ไฟล์ 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.