วิธีรับไฟล์. pem จากไฟล์. key และ. crt


คำตอบ:


799

คีย์ของคุณอาจมีรูปแบบ 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 rsaopenssl x509

server.key น่าจะเป็นคีย์ส่วนตัวของคุณและไฟล์. crt นั้นเป็นใบรับรอง x509 ที่ถูกส่งกลับมาแล้ว

หากนี่คือสำหรับเว็บเซิร์ฟเวอร์และคุณไม่สามารถระบุการโหลดคีย์ส่วนตัวและสาธารณะแยกต่างหาก:

คุณอาจต้องต่อไฟล์สองไฟล์เข้าด้วยกัน สำหรับการใช้งานนี้:

cat server.crt server.key > server.includesprivatekey.pem

ฉันจะแนะนำการตั้งชื่อไฟล์ด้วย "includeprivatekey" เพื่อช่วยคุณจัดการการอนุญาตที่คุณเก็บไว้กับไฟล์นี้


2
ตรวจสอบรูปแบบของ server.key ฉันแค่คิดว่ามันเป็น RSA แต่การอ่านบรรทัดแรกของไฟล์อาจจะบอกคุณได้ว่า
maxwellb

10
เพียงหัวขึ้นที่cat server.crt server.key > server.pemจะไม่วางความคิดเห็นที่เปิดในบรรทัดของตัวเองซึ่งดูเหมือนจะเป็นข้อกำหนด จดหมายส่งพัสดุให้ฉันด้วยนรกและฉันใช้เวลาหลายชั่วโมงกว่าจะเข้าใจว่าเกิดอะไรขึ้น
Graham Walters

1
ขอบคุณเกรแฮม เครื่องมือต่าง ๆ จะสร้างไฟล์ต่างกันและในที่สุดการตรวจสอบบางอย่างก็ดี เมื่อฉันทำตามขั้นตอนเหล่านี้ไฟล์จะจบลงด้วยการขึ้นบรรทัดใหม่
maxwellb

เคล็ดลับเกี่ยวกับการเชื่อมไฟล์. crt และ. key เข้าด้วยกันมีประโยชน์มาก ฉันต้องการใช้ใบรับรองของฉันกับ stunnel3 แต่มันไม่มีวิธีระบุไฟล์คีย์ ใช้การต่อข้อมูลที่ได้ผล (อันที่จริงแล้วเนื่องจาก stunnel3 เป็นโปรแกรม Perl ฉันจึงเพิ่มตัวเลือกให้กับตัวเองสำหรับการอ่านไฟล์คีย์อย่างไรก็ตามตั้งแต่ฉันเห็นการเชื่อมต่อใช้งานได้ในภายหลังฉันจึงเปลี่ยน stunnel3 กลับเป็นรหัสเดิม)
LS

2
ขอบอกว่า cat server.crt server.key > server.includesprivatekey.pemมีประโยชน์สำหรับ SSL ที่มี haproxy 1.5
jimm101

224

ฉันต้องทำสิ่งนี้เพื่อ 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


19
ด้วย AWS 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/
FloatingRock

1
คำสั่งที่สองไม่ทำอะไรเลยถ้าอินพุตของคุณเป็นไฟล์ pem ดังนั้นสมมติว่าคุณจำเป็นต้องใช้คำสั่งแรก
Kristofer

! น่ากลัว มันใช้งานได้ดีสำหรับฉัน! เพียงแปลงไฟล์. key และ. crt เป็น. pem โดยใช้บรรทัดโค้ดของคุณจากนั้นฉันอัพโหลด (คัดลอก / วาง) ผ่านคอนโซล AWS ขอบคุณ!
Diego D

79

pemไฟล์ประกอบด้วยใบรับรองและคีย์ส่วนตัว ขึ้นอยู่กับรูปแบบใบรับรอง / คีย์ของคุณ แต่อาจจะง่ายเหมือนนี้:

cat server.crt server.key > server.pem

ฉันได้รับ-bash: server.key.pem: Permission denied
tq

2
@tq: หมายความว่าคุณไม่ได้รับอนุญาตให้อ่านหรือเขียนไฟล์นั้น
sth

ขอบคุณ @sth จะมองหาการอนุญาต แต่ฉันกำลังทำสิ่งนี้ด้วยคำสั่ง sudo
tq

8
@tq: cat server.crt server.key | sudo tee server.pem
ลดขนาด

2
ระวังการขึ้นบรรทัดใหม่หายไฟล์ pem ของเราอาจมีเส้นที่อ่านไม่ออกเช่น ----- END CERTIFICATE ---------- BEGIN CERTIFICATE -----
Wolfgang Fahl

24

นอกจากนี้หากคุณไม่ต้องการให้ขอข้อความรหัสผ่านคุณต้องเรียกใช้คำสั่งต่อไปนี้:

openssl rsa -in server.key -out server.key

9
หากคุณต้องการไฟล์ที่เริ่มต้นด้วย-----BEGIN RSA PRIVATE KEY-----และมีไฟล์ที่ขึ้นต้นด้วย-----BEGIN ENCRYPTED PRIVATE KEY-----นี่คือคำสั่งที่คุณต้องการใช้
Philippe Gerber

18

นี่เป็นตัวเลือกที่ดีที่สุดในการสร้างไฟล์. pem

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts

4

สิ่งที่ฉันสังเกตคือ: ถ้าคุณใช้ 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


1
openssl x509อีกทางเลือกหนึ่งก็คือการผ่านการรับรองจากที่ไม่เข้มงวดผ่าน มันจะออกใบรับรอง PEM ที่ถูกต้อง: cat certificate.crt | openssl x509 > certificate.pem
T0xicCode

หากคุณต้องการได้รับทุกอย่างตั้งแต่ "เริ่มต้น" ไปจนถึงตอนท้ายของไฟล์นั่นเป็นงานที่ต้องทำ โดยเฉพาะคุณต้องการอะไรsed -n '/--BEGIN/,$p' cert.crtในกรณีนี้ เพื่ออธิบายว่า: "-n" บอกให้ sed ไม่พิมพ์สิ่งใดโดยปริยายแล้วนิพจน์ช่วง/--BEGIN/,$จะทำให้pคำสั่ง (พิมพ์) นำไปใช้กับบรรทัดระหว่างบรรทัดแรกที่มี--BEGINและจุดสิ้นสุดของไฟล์ ( $)
dannysauer

4

ฉันพยายามเปลี่ยนจาก 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 ส่วนตัวที่ไม่ได้เข้ารหัส"

.. และในที่สุดก็ใช้งานได้


4

พยายามอัปโหลดใบรับรอง 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.
Adam Raudonis

4
  1. ดาวน์โหลดใบรับรองจากพอร์ทัลชั่วคราวโดย appleId,
  2. ส่งออกใบรับรองจากพวงกุญแจและให้ชื่อ (Certificates.p12)
  3. เปิดโฟลเดอร์ terminal และ goto ที่คุณบันทึกไว้ข้างต้นไฟล์ Certificates.p12
  4. เรียกใช้คำสั่งด้านล่าง:

    ก) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes,

    ข) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. ไฟล์. pem ของคุณพร้อม "pushcert.pem"

0
  • เปิดเทอร์มินัล
  • ไปที่โฟลเดอร์ที่ใบรับรองของคุณตั้งอยู่
  • ดำเนินการคำสั่งด้านล่างโดยแทนที่ชื่อด้วยใบรับรองของคุณ

openssl pkcs12 ใน YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts

  • หวังว่ามันจะทำงาน !!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.