ฉันจะสร้างไฟล์ PEM จากใบรับรอง SSL ได้อย่างไร
นี่คือไฟล์ที่ฉันมี:
.crt
server.csr
server.key
ฉันจะสร้างไฟล์ PEM จากใบรับรอง SSL ได้อย่างไร
นี่คือไฟล์ที่ฉันมี:
.crt
server.csr
server.key
คำตอบ:
คีย์ของคุณอาจมีรูปแบบ PEM อยู่แล้ว แต่ตั้งชื่อด้วย. crt หรือ. key
หากเนื้อหาของไฟล์เริ่มต้นด้วย-----BEGIN
และคุณสามารถอ่านได้ในโปรแกรมแก้ไขข้อความ:
ไฟล์นี้ใช้ base64 ซึ่งสามารถอ่านได้ใน ASCII ไม่ใช่รูปแบบไบนารี ใบรับรองอยู่ในรูปแบบ PEM แล้ว เพียงเปลี่ยนนามสกุลเป็น. pem
หากไฟล์อยู่ในรูปแบบไบนารี:
สำหรับ server.crt คุณจะต้องใช้
openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem
สำหรับ server.key ใช้ในสถานที่ของopenssl rsa
openssl x509
server.key น่าจะเป็นคีย์ส่วนตัวของคุณและไฟล์. crt นั้นเป็นใบรับรอง x509 ที่ถูกส่งกลับมาแล้ว
หากนี่คือสำหรับเว็บเซิร์ฟเวอร์และคุณไม่สามารถระบุการโหลดคีย์ส่วนตัวและสาธารณะแยกต่างหาก:
คุณอาจต้องต่อไฟล์สองไฟล์เข้าด้วยกัน สำหรับการใช้งานนี้:
cat server.crt server.key > server.includesprivatekey.pem
ฉันจะแนะนำการตั้งชื่อไฟล์ด้วย "includeprivatekey" เพื่อช่วยคุณจัดการการอนุญาตที่คุณเก็บไว้กับไฟล์นี้
cat server.crt server.key > server.pem
จะไม่วางความคิดเห็นที่เปิดในบรรทัดของตัวเองซึ่งดูเหมือนจะเป็นข้อกำหนด จดหมายส่งพัสดุให้ฉันด้วยนรกและฉันใช้เวลาหลายชั่วโมงกว่าจะเข้าใจว่าเกิดอะไรขึ้น
server.crt server.key > server.includesprivatekey.pem
มีประโยชน์สำหรับ SSL ที่มี haproxy 1.5
ฉันต้องทำสิ่งนี้เพื่อ AWS ELB หลังจากที่ถูกโต้ตอบโดยการโต้เถียงหลายครั้งในที่สุดนี่คือสิ่งที่ได้ผลสำหรับฉัน:
openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem
ขอบคุณNCZ
แก้ไข: As @floatingrock พูดว่า
ด้วย AWS file://
อย่าลืมต้องเพิ่มชื่อไฟล์ที่มี ดังนั้นมันจะดูเหมือน:
aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/
http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html
file://
อย่าลืมต้องเพิ่มชื่อไฟล์ที่มี ดังนั้นมันจะมีลักษณะดังนี้:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
pem
ไฟล์ประกอบด้วยใบรับรองและคีย์ส่วนตัว ขึ้นอยู่กับรูปแบบใบรับรอง / คีย์ของคุณ แต่อาจจะง่ายเหมือนนี้:
cat server.crt server.key > server.pem
-bash: server.key.pem: Permission denied
นอกจากนี้หากคุณไม่ต้องการให้ขอข้อความรหัสผ่านคุณต้องเรียกใช้คำสั่งต่อไปนี้:
openssl rsa -in server.key -out server.key
-----BEGIN RSA PRIVATE KEY-----
และมีไฟล์ที่ขึ้นต้นด้วย-----BEGIN ENCRYPTED PRIVATE KEY-----
นี่คือคำสั่งที่คุณต้องการใช้
นี่เป็นตัวเลือกที่ดีที่สุดในการสร้างไฟล์. pem
openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts
สิ่งที่ฉันสังเกตคือ: ถ้าคุณใช้ openssl เพื่อสร้างใบรับรองมันจะจับทั้งส่วนข้อความและส่วน base64 ใบรับรองในไฟล์ crt รูปแบบ pem ที่เข้มงวดระบุว่า ( นิยาม wiki ) ว่าไฟล์ควรเริ่มต้นและสิ้นสุดด้วย BEGIN และ END
.pem - (Mail ขั้นสูงสำหรับความเป็นส่วนตัว) ใบรับรอง DER ที่เข้ารหัส Base64 ซึ่งอยู่ระหว่าง "----- BEGIN CERTIFICATE -----" และ "----- END CERTIFICATE -----"
ดังนั้นสำหรับบางไลบรารี (ฉันพบสิ่งนี้ในภาษาจาวา) ที่ต้องการรูปแบบ pem ที่เข้มงวด crt ที่สร้างขึ้นจะล้มเหลวในการตรวจสอบความถูกต้องเป็น 'รูปแบบ pem ที่ไม่ถูกต้อง'
แม้ว่าคุณจะคัดลอกหรือ grep บรรทัดด้วย BEGIN / END CERTIFICATE และวางลงในไฟล์ cert.pem แต่ก็ควรใช้งานได้
นี่คือสิ่งที่ฉันทำไม่สะอาดมาก แต่ใช้ได้สำหรับฉันโดยทั่วไปมันจะกรองข้อความที่เริ่มต้นจากบรรทัด BEGIN:
grep -A 1,000 BEGIN cert.crt> cert.pem
openssl x509
อีกทางเลือกหนึ่งก็คือการผ่านการรับรองจากที่ไม่เข้มงวดผ่าน มันจะออกใบรับรอง PEM ที่ถูกต้อง: cat certificate.crt | openssl x509 > certificate.pem
sed -n '/--BEGIN/,$p' cert.crt
ในกรณีนี้ เพื่ออธิบายว่า: "-n" บอกให้ sed ไม่พิมพ์สิ่งใดโดยปริยายแล้วนิพจน์ช่วง/--BEGIN/,$
จะทำให้p
คำสั่ง (พิมพ์) นำไปใช้กับบรรทัดระหว่างบรรทัดแรกที่มี--BEGIN
และจุดสิ้นสุดของไฟล์ ( $
)
ฉันพยายามเปลี่ยนจาก GoDaddy เป็นแอพ Engine เคล็ดลับอะไรที่ใช้บรรทัดนี้:
openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr
เหมือนเดิม แต่แทนที่ชื่อด้วยชื่อโดเมนของฉัน (ไม่ใช่ว่าสำคัญจริงๆ)
และฉันก็ตอบคำถามทั้งหมดที่เกี่ยวข้องกับชื่อ / องค์กรทั่วไปในชื่อ www.name.com
จากนั้นฉันเปิด csr คัดลอกวางใน go daddy จากนั้นดาวน์โหลดดาวน์โหลดคลายซิปนำทางไปยังโฟลเดอร์ที่คลายซิปด้วยเทอร์มินัลและป้อน:
cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt
จากนั้นฉันก็ใช้คำแนะนำเหล่านี้จากปัญหากับ SSL โดเมนที่กำหนดเองของ Google Appsซึ่งก็คือ:
openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem
ตรงตามที่เป็นยกเว้นยกเว้น privateKey.key ฉันใช้ name.unencrypted.priv.key และแทน www_mydomain_com.crt ฉันใช้ name.crt
จากนั้นฉันอัพโหลด public.pem ไปยังคอนโซลผู้ดูแลระบบสำหรับ "PEM ที่เข้ารหัส X.509 ใบรับรอง" และอัปโหลด private.pem สำหรับ "การเข้ารหัส PEM RSA ส่วนตัวที่ไม่ได้เข้ารหัส"
.. และในที่สุดก็ใช้งานได้
พยายามอัปโหลดใบรับรอง GoDaddy ไปยัง AWS ฉันล้มเหลวหลายครั้ง แต่ในที่สุดมันก็ค่อนข้างง่าย ไม่จำเป็นต้องแปลงอะไรเป็น. pem คุณเพียงแค่ต้องแน่ใจว่าได้รวมใบรับรองบันเดิลของ GoDaddy ไว้ในพารามิเตอร์ลูกโซ่เช่น
aws iam upload-server-certificate
--server-certificate-name mycert
--certificate-body file://try2/40271b1b25236fd1.crt
--private-key file://server.key
--path /cloudfront/production/
--certificate-chain file://try2/gdig2_bundle.crt
และในการลบการอัปโหลดที่ล้มเหลวครั้งก่อนคุณสามารถทำได้
aws iam delete-server-certificate --server-certificate-name mypreviouscert
An error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
เรียกใช้คำสั่งด้านล่าง:
ก) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes
,
ข) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts
openssl pkcs12 ใน YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts
.pem
ไป.crt
.key
และ