ไฟล์ Pem คืออะไรและแตกต่างจากรูปแบบไฟล์คีย์อื่น ๆ ของ OpenSSL อย่างไร


1342

ฉันรับผิดชอบในการบำรุงรักษาเซิร์ฟเวอร์ Debian สองเครื่อง ทุกครั้งที่ฉันต้องทำอะไรกับใบรับรองความปลอดภัยฉันใช้ Google เพื่อทำแบบฝึกหัดและเอาชนะจนกว่ามันจะใช้งานได้ในที่สุด

อย่างไรก็ตามในการค้นหาของฉันฉันมักจะเจอรูปแบบไฟล์ที่แตกต่างกัน ( .key, .csr, .pem) แต่ผมไม่เคยได้รับสามารถที่จะหาคำอธิบายที่ดีของสิ่งที่วัตถุประสงค์ในแต่ละรูปแบบไฟล์เป็น

ฉันสงสัยว่าผู้คนที่ดีที่ ServerFault สามารถให้ความกระจ่างเกี่ยวกับเรื่องนี้ได้หรือไม่?


คำตอบ:


1654

SSL มีมานานพอแล้วที่คุณคิดว่าจะมีการตกลงกันในรูปแบบคอนเทนเนอร์ และคุณถูกต้องมี มีมาตรฐานมากเกินไปเมื่อมันเกิดขึ้น ดังนั้นนี่คือสิ่งที่ฉันรู้และฉันแน่ใจว่าคนอื่นจะพูดสอด

  • .csr - นี่คือคำขอลงนามใบรับรอง แอปพลิเคชั่นบางตัวสามารถสร้างแอปพลิเคชันเหล่านี้เพื่อส่งไปยังผู้ออกใบรับรอง รูปแบบที่เกิดขึ้นจริงเป็น PKCS10 ซึ่งถูกกำหนดไว้ในRFC 2986 ซึ่งจะรวมถึงรายละเอียดที่สำคัญบางส่วนของใบรับรองที่ร้องขอเช่นหัวเรื่อง, องค์กร, รัฐ, อะไรและรหัสสาธารณะของใบรับรองเพื่อลงนาม สิ่งเหล่านี้ได้รับการลงนามโดย CA และส่งคืนใบรับรอง ใบรับรองกลับมาเป็นประชาชนใบรับรอง (ซึ่งรวมถึงคีย์สาธารณะ แต่ไม่คีย์ส่วนตัว) ซึ่งตัวเองสามารถในสองสามรูปแบบ
  • .pem - กำหนดใน RFCs 1421ถึง1424นี่เป็นรูปแบบคอนเทนเนอร์ที่อาจรวมถึงใบรับรองสาธารณะ (เช่นการติดตั้ง Apache และไฟล์ใบรับรอง CA /etc/ssl/certs) หรืออาจรวมห่วงโซ่ใบรับรองทั้งหมดรวมถึงกุญแจสาธารณะรหัสส่วนตัวและ ใบรับรองหลัก นอกจากนี้ยังอาจเข้ารหัส CSR (เช่นใช้ที่นี่ ) เนื่องจากรูปแบบ PKCS10 สามารถแปลเป็น PEM ได้ ชื่อนี้มาจากPrivacy Enhanced Mail (PEM)ซึ่งเป็นวิธีการที่ล้มเหลวสำหรับอีเมลที่ปลอดภัย แต่รูปแบบของคอนเทนเนอร์ที่ใช้กันอยู่และเป็นการแปลพื้นฐานของ x509 ASN.1 คีย์ 64
  • .key - นี่คือไฟล์ที่จัดรูปแบบ PEM ที่มีเพียงคีย์ส่วนตัวของใบรับรองที่ระบุและเป็นเพียงชื่อทั่วไปและไม่ใช่ชื่อที่ได้มาตรฐาน ในการติดตั้ง Apache /etc/ssl/privateนี้อยู่บ่อยครั้งใน สิทธิในไฟล์เหล่านี้มีความสำคัญมากและบางโปรแกรมจะปฏิเสธที่จะโหลดใบรับรองเหล่านี้หากตั้งค่าผิด
  • .pkcs12 .pfx p12 ที่ - แต่เดิมที่กำหนดโดยอาร์เอสในมาตรฐานสาธารณะคีย์การเข้ารหัส (ย่อ PKCS) ที่ "12" ตัวแปรที่เพิ่มขึ้นมาโดยไมโครซอฟท์และส่งเป็นภายหลังRFC 7292 นี่เป็นรูปแบบคอนเทนเนอร์ที่มีรหัสผ่านที่มีทั้งคู่ใบรับรองสาธารณะและส่วนตัว ไม่เหมือนกับไฟล์. pem คอนเทนเนอร์นี้ถูกเข้ารหัสอย่างสมบูรณ์ Openssl สามารถเปลี่ยนสิ่งนี้ให้เป็นไฟล์. pem ได้ทั้งกุญแจสาธารณะและกุญแจส่วนตัว:openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

รูปแบบอื่น ๆ ที่แสดงเป็นระยะ ๆ :

  • .der - วิธีเข้ารหัสไวยากรณ์ ASN.1 ในไบนารี่ไฟล์. pem เป็นเพียงไฟล์. 64 ที่เข้ารหัส Base64 OpenSSL สามารถแปลงสิ่งเหล่านี้เป็น. pem ( openssl x509 -inform der -in to-convert.der -out converted.pem) Windows เห็นสิ่งเหล่านี้เป็นไฟล์ใบรับรอง โดยค่าเริ่มต้น Windows จะส่งออกใบรับรองเป็นไฟล์ที่จัดรูปแบบ. Order พร้อมส่วนขยายอื่น ชอบ...
  • .cert .cer .crt - .ไฟล์รูปแบบ. pem (หรือน้อยกว่า. ad ) ที่มีนามสกุลต่างกันหนึ่งไฟล์ที่ Windows Explorer รู้จักเป็นใบรับรองซึ่ง. pem ไม่ใช่
  • .p7b .keystore - กำหนดในRFC 2315เป็น PKCS หมายเลข 7 นี่เป็นรูปแบบที่ใช้โดย Windows สำหรับการแลกเปลี่ยนใบรับรอง Java เข้าใจธรรมชาติเหล่านี้และมักจะใช้.keystoreเป็นส่วนขยายแทน รูปแบบนี้มีวิธีกำหนดไว้ในการรวมใบรับรองเส้นทางใบรับรอง
  • .crl - รายการเพิกถอนใบรับรอง เจ้าหน้าที่ออกใบรับรองจะจัดทำสิ่งเหล่านี้เป็นวิธียกเลิกการอนุญาตใบรับรองก่อนที่จะหมดอายุ บางครั้งคุณสามารถดาวน์โหลดได้จากเว็บไซต์ CA

โดยสรุปมีสี่วิธีในการแสดงใบรับรองและส่วนประกอบต่าง ๆ :

  • PEM - ควบคุมโดย RFCs ซึ่งถูกใช้เป็นพิเศษโดยซอฟต์แวร์โอเพนซอร์ซ สามารถมีส่วนขยายได้หลากหลาย (.pem, .key, .cer, .cert และอื่น ๆ )
  • PKCS7 - มาตรฐานแบบเปิดที่ใช้โดย Java และรองรับโดย Windows ไม่มีเนื้อหาของรหัสส่วนตัว
  • PKCS12 - มาตรฐานส่วนบุคคลของ Microsoft ที่กำหนดไว้ในภายหลังใน RFC ที่ให้ความปลอดภัยที่เพิ่มขึ้นเมื่อเทียบกับรูปแบบ PEM ข้อความล้วน สิ่งนี้สามารถมีวัสดุคีย์ส่วนตัว มันใช้งานได้ดีกว่าโดยระบบ Windows และสามารถแปลงเป็นรูปแบบ PEM ได้อย่างอิสระผ่านการใช้ openssl
  • DER - รูปแบบหลักของ PEM มันมีประโยชน์ที่จะคิดว่ามันเป็นไฟล์เลขฐานสองแบบเข้ารหัส PEM base64 ไม่ได้ใช้บ่อยมากนอก Windows

ฉันหวังว่านี่จะช่วยได้.


297
สิ่งที่ดีเกี่ยวกับมาตรฐานก็คือว่ามีมากมายให้เลือกจาก ...
squillman

36
.crt เป็นอีกหนึ่งส่วนขยายที่พบบ่อยสำหรับ .cert และ .cer
เดวิด Pashley

44
PEM เป็นรูปแบบไฟล์ที่อาจประกอบด้วยใบรับรอง (aka. พับลิกคีย์), ไพรเวตคีย์หรือทั้งสองอย่างต่อกันเข้าด้วยกัน อย่าใส่ใจกับนามสกุลไฟล์มากนัก มันหมายถึง Privacy Enhanced Mail การใช้งานที่ไม่เห็นประโยชน์มากนัก แต่รูปแบบไฟล์ติดอยู่
Dan Carley

20
คำตอบที่มีประโยชน์มาก ssh-keygenแต่ผมไม่คิดว่าคุณได้ครอบคลุมรูปแบบผับที่สร้างขึ้นโดย มันจะมีประโยชน์ที่จะรู้ว่ามันเกี่ยวข้องกับส่วนที่เหลืออย่างไร
Jez

24
ไม่สามารถช่วยสังเกตว่า "อีเมลที่ปรับปรุงความเป็นส่วนตัว" จะให้คำย่อ "PEE" ซึ่งตรงข้ามกับ "PEM" RFCs มีแนวโน้มที่จะใช้วลี "เพิ่มความเป็นส่วนตัวเมล"
ดาน

141

PEM ด้วยตัวเองไม่ใช่ใบรับรอง แต่เป็นวิธีการเข้ารหัสข้อมูล ใบรับรอง X.509 เป็นข้อมูลประเภทหนึ่งที่เข้ารหัสโดยใช้ PEM

PEM คือใบรับรอง X.509 (ซึ่งมีโครงสร้างที่กำหนดโดยใช้ ASN.1) เข้ารหัสโดยใช้ ASN.1 DER (กฎการเข้ารหัสที่แตกต่าง) จากนั้นเรียกใช้ผ่านการเข้ารหัส Base64 และติดอยู่ระหว่างบรรทัดจุดยึดข้อความธรรมดา (BEGIN CERTIFICATE และ END CERTIFICATE )

คุณสามารถแสดงข้อมูลเดียวกันโดยใช้การแทน PKCS # 7 หรือ PKCS # 12 และยูทิลิตีบรรทัดคำสั่ง openssl สามารถใช้ในการทำสิ่งนี้

ประโยชน์ที่ชัดเจนของ PEM คือความปลอดภัยในการวางลงในเนื้อความของข้อความอีเมลเนื่องจากมีจุดยึดและมีความสะอาด 7 บิต

RFC1422มีรายละเอียดเพิ่มเติมเกี่ยวกับมาตรฐาน PEM เนื่องจากเกี่ยวข้องกับคีย์และใบรับรอง


1
คุณจะทำสิ่งนี้ "ใช้บรรทัดคำสั่ง openssl" ได้อย่างไร
Samik R

2
ในการแปลงไฟล์ DER A (.crt .cer .der) เพื่อ openssl x509 -inform der -in cert.cer -out cert.pemPEM: ในการแปลงไฟล์พีอีเอ็มเพื่อ openssl x509 -outform der -in cert.pem -out certi.derDER: การแปลงไฟล์ PKCS # 12 (.pfx p12 ที่) ที่มีคีย์ส่วนตัวและใบรับรองการ openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodesPEM: วิธีแปลงไฟล์ใบรับรอง PEM และไพรเวตคีย์เป็น PKCS # 12 (.pfx .p12): openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crtจากที่นี่
mpeac

54

บางครั้งไฟล์ที่มีอยู่แล้ว.crt .pemดู: https://stackoverflow.com/questions/991758/openssl-pem-key


4
ความจริงฉันเพิ่งสังเกตเห็นในวันนี้ ฉันต้องป้อนใบรับรอง PEM ใน loadbalancer ของ rackspace และฉันสงสัยว่า crt ที่สร้างขึ้นนั้นอยู่ในรูปแบบนั้นหรือไม่ แต่มันก็ใช้งานได้เช่นกันดังนั้นมันจึงเป็นข้อสรุปของฉันเช่นกันส่วนใหญ่ของ. crt มาในรูปแบบ PEM ดูเหมือน
Glenn Plas

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