แปลงจาก P7B เป็น PEM ผ่าน OpenSSL


39

บน Ubuntu ฉันไม่สามารถแปลงใบรับรองโดยใช้ openssl ได้สำเร็จ

vagrant@dev:/vagrant/keys$ openssl pkcs7 -print_certs -in a.p7b -out a.cer 
unable to load PKCS7 object <blah blah>:PEM
routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: PKCS7

คุณเคยเห็นข้อผิดพลาดนี้มาก่อนหรือไม่


คุณแน่ใจหรือว่าไฟล์นี้เป็น p7b
Zoredache

ไฟล์ถูกย้ายระหว่างเซิร์ฟเวอร์หรืออัพโหลดผ่าน FTP หรือไม่ หากเป็นรูปแบบที่ถูกต้องจริงดูเหมือนว่าอาจจะเกิดความเสียหาย ลองถ่ายโอนไฟล์ไปยังเซิร์ฟเวอร์อีกครั้งในโหมดไบนารี (หากใช้ FTP) หรือคัดลอกไฟล์จากแหล่งที่มาอีกครั้ง
Garrett

ฉันว่ามันเป็น p7b ตามส่วนต่อท้ายของไฟล์ ฉันดาวน์โหลดใหม่ผ่านทาง Firefox แต่ฉันยังคงมีข้อผิดพลาด OpenSSL เหมือนเดิม ...
เควินเมเรดิ ธ

1
@ เควินให้อะไรfile a.p7bคุณ
Nic Young

@NicYoung - ฉันเพิ่งได้รับข้อความแสดงข้อผิดพลาดข้างต้น ไม่มีเอาต์พุต
เควินเมเรดิ ธ

คำตอบ:


55

ลองสิ่งนี้:

$ openssl pkcs7 -inform der -in a.p7b -out a.cer

ถ้ามันไม่ได้ทำงานนำมาสู่เครื่อง Windows และการส่งออกเป็นไปตามนี้คู่มือ


8
สังเกตว่า OP มีพารามิเตอร์-print_certsในคำสั่ง มันส่งผลกระทบต่อรูปแบบผลลัพธ์: เมื่อคุณได้รับรูปแบบ PEM (เริ่มต้นด้วย ----- BEGIN CERTIFICATE -----) และหากไม่มีคุณจะได้รับรูปแบบ PKCS # 7 (----- BEGIN PKCS7-- ---)
Sylvain

ใช้งานได้เฉพาะเมื่อฉันวาง-inform derส่วน โปรดทราบว่าในขณะที่การส่งออกคีย์จาก Windows Cert Manager DER และ P7B เป็นสองตัวเลือกที่แตกต่างกัน
jpaugh

18

ดังนั้นเพื่อรวมคำตอบข้างต้นคำสั่งคือ:
openssl pkcs7 -in cert.p7b -inform DER -print_certs -out cert.pem

ตรวจสอบแล้วว่าใช้งานได้กับ Windows โดยใช้ OpenSSL-Win64

/ ขอบคุณ Bogdan ที่พบข้อผิดพลาด


8

ฉันทำตามคำแนะนำนี้เพื่อแนะนำให้คุณเปลี่ยนบรรทัดส่วนหัว / ส่วนท้าย

-----BEGIN PKCS #7 SIGNED DATA-----
[data]
-----END PKCS #7 SIGNED DATA-----

ไปยัง

-----BEGIN CERTIFICATE-----
[data]
-----END CERTIFICATE-----

จากนั้นรันคำสั่งopenssl pkcs7 -in foo.modified.crt -print_certs -out foo.certs(โดยที่foo.modified.crtไฟล์ที่คุณบันทึกเวอร์ชันที่แก้ไขเข้าไป) สิ่งนี้ทำให้ฉันได้ผลลัพธ์เดียวกันกับการทำงานผ่านการส่งออกใบรับรอง Windows ตามที่แนะนำในคำตอบอื่น ๆ


5

เท่าที่ฉันรู้ต่อไปนี้ควรแปลงใบรับรอง pkcs7 เป็น pem

openssl pkcs7 -in certificate_file.p7b -print_certs -out cert.pem

ทำไมคุณถึงหมายถึงคำตอบนี้เกี่ยวข้องกับหัวข้อนี้ เพราะอย่างที่คุณเห็น มันเหมือนกับข้างต้น
msavara

3

วิธีแก้ปัญหาอย่างรวดเร็วในกรณีของฉัน (ไฟล์จำนวนมากที่ไม่มีส่วนหัว / ส่วนท้าย):

base64 -d $FILE | openssl pkcs7 -inform DER -print_certs


1
ฉันมีใบรับรองที่เข้ารหัส base64 และฉันไม่รู้อะไรเพิ่มเติมเกี่ยวกับเรื่องนี้และคำสั่ง base64 -d ช่วยฉันได้หลายปัญหา โซลูชันนี้ควรพร้อมใช้งานในผลการค้นหามากขึ้น ขอขอบคุณ!

2

ฉันมีปัญหานี้เช่นกัน ฉันจะตรวจสอบไฟล์ p7b ที่ฉันคัดลอกมาจากโฮสต์ Win7

ฉันพบว่าพวงกุญแจ gnome สามารถนำเข้าใบรับรอง จากที่นั่นส่งออกไปยัง DER ได้ง่าย

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