openssl .p12 证书只有一个串联的 .pem 证书信息

Posted

技术标签:

【中文标题】openssl .p12 证书只有一个串联的 .pem 证书信息【英文标题】:openssl .p12 cert only has one of the concatenated .pem cert info 【发布时间】:2018-09-14 03:04:13 【问题描述】:

我有两个 .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 cert的内容时,它只有cert1.pem的信息:

keytool -v -list -keystore combo.p12

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

【问题讨论】:

欢迎来到 ***。看起来您的问题与以下问题重复:Load multiple certificates into PKCS12 with openssl。您是否尝试将证书及其密钥及其信任链放入 .p12 捆绑包中? 我看到了这个问题,但我认为我的情况略有不同,因为我没有两个 .p12 证书的 -in-inkey 私有证书。但是要回答您的问题,是的,我正在尝试这样做.. 【参考方案1】:

出于说明目的,让我们看看使用 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

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

【讨论】:

以上是关于openssl .p12 证书只有一个串联的 .pem 证书信息的主要内容,如果未能解决你的问题,请参考以下文章

使用openssl命令从.p12文件中提取证书和私钥。

使用OpenSSL创建多级CA证书链签发证书并导出为pkcs12/p12/pfx文件

使用OpenSSL创建多级CA证书链签发证书并导出为pkcs12/p12/pfx文件

使用OpenSSL创建多级CA证书链签发证书并导出为pkcs12/p12/pfx文件

如何解决错误“无法加载PEM客户端证书,OpenSSL错误:02001003:系统库:fopen:没有这样的过程”?

SaltStack-OpenSSL-Pkcs12:如何使用saltStack转换生成的letsencrypt证书