通过OpenSSL从P7B转换为PEM


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)将文件重新传输到服务器,或者从源重新复制文件。
加勒特

我说这是基于文件后缀的p7b。我通过Firefox重新下载了该文件,但仍然遇到相同的OpenSSL错误...
Kevin Meredith 2012年

1
@Kevin file a.p7b给你什么?
Nic Young

@NicYoung-我刚刚收到上述错误消息。无输出。
凯文·梅瑞迪斯

Answers:


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.certsfoo.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

我也有这个问题。我要验证从Win7主机复制的p7b文件。

我发现gnome密钥环可以导入证书。从那里很容易导出到DER

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.