openssl p12证书不像Windows那样



我使用openssl:创建证书

openssl pkcs12 -export -in domain.crt.pem -inkey domain.key.pem -certfile domain.cha.pem -chain -CAfile domain.cha.pem -out domain.p12

openssl pkcs12 -export -in domain.crt.pem -inkey domain.key.pem -chain -CAfile domain.cha.pem -out domain.p12

openssl pkcs12 -export -in domain.crt.pem -inkey domain.key.pem -certfile domain.cha.pem -out domain.p12

或(具有domain.crt.pem中的ca证书(

openssl pkcs12 -export -in domain.crt.pem -inkey domain.key.pem -out domain.p12

一个用于我的smtp网关证书链不在那里

echo | openssl s_client -crlf -connect smtp.domain.de:25 -starttls smtp -servername
smtp.domain.de | openssl x509 -noout -dates
depth=0 CN = smtp.domain.de
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = smtp.domain.de
verify error:num=21:unable to verify the first certificate
verify return:1
250 HELP
DONE
notBefore=Apr 22 00:00:00 2021 GMT
notAfter=Mar 14 23:59:59 2022 GMT

但是如果将这个p12文件导入到windows并导出所有证书,我会得到

echo | openssl s_client -crlf -connect smtp.domain.de:25 -starttls smtp -servername smtp.domain.de | openssl x509 -noout -dates
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = Encryption Everywhere DV TLS CA - G1
verify return:1
depth=0 CN = smtp.domain.de
verify return:1
250 HELP
DONE
notBefore=Apr 22 00:00:00 2021 GMT
notAfter=Mar 14 23:59:59 2022 GMT

openssl缺少什么参数来纠正这一问题????

与所有内容一样,最好查看有关如何做到这一点的文档

我可以想出三种方法。

  1. 在输入pem文件中包括所有链证书。您的命令不需要更改,只需要更改您的输入即可。

  2. 使用"-certfile";选项指定所需的其他证书。

例如openssl pkcs12-export-in domain.crt.pem-inkey domain.key.pem-certfile digicerts.pem-out domain.p12

  1. 使用-链";以及-CAfile/-CApath/configsetup从CA存储中提取链

例如openssl pkcs12-导出-在域.crt.pem-inkey域.key.pem-chain-out域.p12

(假设openssl的默认ca存储设置(或

例如openssl pkcs12-export-in domain.crt.pem-inkey domain.key.pem-chain-CAfile cacert.pem-out domain.p12

提供一个ca存储(cacert.pem(,其中包括组成所需链所需的所有证书。

================更新=============

我有一个www.example.com的证书链示例,其链为:www.example.comXXXX开发中级CAXXXX开发CA

它们在文件中:

www.example.com.cert.pem - the www.example.com certificate
www.example.com.key.pem - the www.example.com certificate key
intermediate.pem - the XXXX Development Intermediate CA certificate
ca.pem - the XXXX Development CA certificate

当我进行验证时,我得到:

openssl verify -show_chain -untrusted intermediate.pem -CAfile ca.pem www.example.com.cert.pem
.www.example.com.cert.pem: OK
Chain:
depth=0: C = NZ, ST = Auckland, L = Auckland, O = XXXX, CN = www.example.com, emailAddress = shane.powell@xxxx.com (untrusted)
depth=1: C = NZ, ST = Auckland, O = XXXX, CN = XXXX Development Intermediate CA, emailAddress = shane.powell@xxxx.com
depth=2: C = NZ, ST = Auckland, L = Auckland, O = XXXX, CN = XXXX Development CA, emailAddress = shane.powell@xxxx.com

示例1:

将三个文件合并为一个文件。它们只是文本文件,所以可以按任何方式组合
Powershell示例:

dir www.example.com.cert.pem,intermediate.pem,ca.pem | gc | out-file www.example.com.all.pem

创建p12文件:

openssl pkcs12 -export -in www.example.com.all.pem -inkey www.example.com.key.pem -out www.example.com.p12

示例2:

创建p12文件:

openssl pkcs12 -export -in www.example.com.cert.pem -inkey www.example.com.key.pem -certfile intermediate.pem -certfile ca.pem -out .www.example.com.p12

示例3:

用powershell生成一个带有intermedate和ca证书的ca存储文件,同样,它只是将文本文件组合在一起,所以可以随心所欲:

dir intermediate.pem,ca.pem | gc | out-file ca-all.pem

创建p12文件:

openssl pkcs12 -export -in www.example.com.cert.pem -inkey www.example.com.key.pem -chain -CAfile ca-all.pem -out www.example.com.p12

使用以上示例中的任何www.example.com.p12输出文件,我可以使用以下命令进行验证:

openssl pkcs12 -in www.example.com.p12 -info -nodes | openssl verify -show_chain -CAfile ca.pem
Enter Import Password:
MAC: sha1, Iteration 2048
MAC length: 20, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Certificate bag
Certificate bag
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
stdin: OK
Chain:
depth=0: C = NZ, ST = Auckland, L = Auckland, O = XXXX, CN = www.example.com, emailAddress = shane.powell@xxxx.com (untrusted)
depth=1: C = NZ, ST = Auckland, O = XXXX, CN = XXXX Development Intermediate CA, emailAddress = shane.powell@xxxx.com
depth=2: C = NZ, ST = Auckland, L = Auckland, O = XXXX, CN = XXXX Development CA, emailAddress = shane.powell@xxxx.com

现在,要将以上内容应用于您的示例,您需要证书pem和密钥pem,并且需要获得正确的中间pem和根ca-pem文件。这些通常由颁发证书的CA提供。你也可以使用谷歌手动完成。

您的中间证书是:;加密无处不在DV TLS CA-G1";。搜索";digicert加密无处不在DV TLS CA-G1";给我这一页。

我会下载";PEM";";加密无处不在DV TLS CA-G1";证明书在同一页面上,您还可以下载";DigiCert Global Root CA";PEM文件。

使用";openssl验证";上面的命令示例中,我将验证我是否拥有正确的中间证书和根证书。

使用上面的任何示例创建p12文件(在这一点上,示例2对我来说似乎更容易(。

然后我将使用";openssl pkcs12|openssl verify";命令,就像我对自己的榜样所做的那样。

相关内容

最新更新