openssl .p12证书仅具有串联的.pem证书信息之一

时间:2018-09-14 03:04:13

标签: ssl openssl certificate pem p12

我有两个.p12证书,已使用此命令转换为.pem文件:

openssl pkcs12 -in cert1.p12 -out cert1.pem -nodes

openssl pkcs12 -in cert2.p12 -out cert2.pem -nodes

然后我将两个.pem文件链接为一个.pem文件:

cat cert1.pem cert2.pem > combo.pem

然后我将combo.pem转换为.p12证书:

openssl pkcs12 -export -in combo.pem -out combo.p12

但是当我去检查combo.p12证书的内容时,它只包含cert1.pem的信息:

keytool -v -list -keystore combo.p12

我希望combo.p12证书同时具有.pem证书信息。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

出于说明目的,让我们看看使用StackExchange.com证书链重复实验时会发生什么。我已经从网站上下载了它们,并将它们转换为PEM,并将它们连接到单个PEM文件中,就像您所做的一样。它称为SE.pem。然后将它们转换为PKCS#12格式,如下所示:

$ openssl pkcs12 -export -in SE.pem -out SE.p12
unable to load private key
140736004633472:error:0906D06C:PEM routines:PEM_read_bio:no start line:crypto/pem/pem_lib.c:686:Expecting: ANY PRIVATE KEY

您没有提及。在没有私钥的情况下工作所需的其他参数是-nokeys,如下所示:

$ openssl pkcs12 -export -in SE.pem -out SE.p12 -nokeys
Enter Export Password:
Verifying - Enter Export Password:

然后验证生成的.p12文件中是否包含所有内容:

$ openssl pkcs12 -info -in SE.p12 | grep subject=
Enter Import Password:
MAC:sha1 Iteration 2048
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Certificate bag
Certificate bag
subject=/C=US/ST=NY/L=New York/O=Stack Exchange, Inc./CN=*.stackexchange.com
subject=/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
subject=/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA

我无法弄清楚为什么keytool不能正确列出证书,这两个工具似乎期望.p12捆绑包的内容不同:

$ keytool -list -v -keystore SE.p12 -storetype pkcs12
Enter keystore password:  

Keystore type: PKCS12
Keystore provider: SunJSSE

Your keystore contains 0 entries

实际上我可能会问一个关于我自己的其他问题:-)。这对您的情况至关重要,还是只是另一个验证步骤?