วิธีส่งออกห่วงโซ่ใบรับรอง CA จาก PFX ในรูปแบบ PEM โดยไม่มีแอตทริบิวต์ของถุง


31

ฉันมีไฟล์ PKCS12 ที่มีห่วงโซ่ใบรับรองแบบเต็มและรหัสส่วนตัว ฉันจำเป็นต้องแบ่งไฟล์ออกเป็น 3 ไฟล์สำหรับแอปพลิเคชัน 3 ไฟล์ที่ฉันต้องการมีดังนี้ (ในรูปแบบ PEM):

  • ไฟล์คีย์ที่ไม่มีการเข้ารหัส
  • ไฟล์ใบรับรองไคลเอ็นต์
  • ไฟล์ใบรับรอง CA (รูทและสื่อกลางทั้งหมด)

นี่เป็นงานทั่วไปที่ฉันต้องทำดังนั้นฉันจึงกำลังมองหาวิธีที่จะทำสิ่งนี้โดยไม่ต้องมีการแก้ไขเอาต์พุตเอง

ฉันพยายามต่อไปนี้:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>

วิธีนี้ใช้ได้ผลดี แต่ผลลัพธ์มีคุณสมบัติถุงซึ่งแอปพลิเคชันไม่ทราบวิธีจัดการ

หลังจากการค้นหาบางอย่างฉันพบวิธีแก้ปัญหาที่แนะนำในการส่งผลลัพธ์ผ่าน x509 เพื่อตัดคุณลักษณะถุง

openssl x509 -in <clientcert.cer> -out <clientcert.cer>

ทำงานได้ แต่ฉันพบปัญหาในไฟล์ cacert ไฟล์ที่ส่งออกมีเพียงหนึ่งใน 3 certs ในห่วงโซ่

มีวิธีใดที่จะหลีกเลี่ยงการรวมแอ็ตทริบิวต์ bag ในเอาต์พุตของคำสั่ง pkcs12 หรือวิธีที่เอาต์พุตเอาท์พุต x509 รวมใบรับรองทั้งหมดหรือไม่? นอกจากนี้หากใช้งานผ่าน x509 เป็นทางออกที่ง่ายที่สุดมีวิธีที่จะส่งออกท่อจาก pkcs12 เป็น x509 แทนที่จะเขียนไฟล์สองครั้งหรือไม่?

คำตอบ:


36

ในที่สุดฉันก็มาถึงวิธีการแก้ปัญหาที่จะท่อผ่าน sed

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>

ขอบคุณ! สิ่งนี้ช่วยฉันได้บ้างในวันนี้! ;-)
จิมพี

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