Openssl 使用中间证书将 pem 转换为 crt

Openssl 使用中间证书将 pem 转换为 crt

使用 Firefox,可以轻松地将页面使用的 SSL 证书导出为 x509,并将所有中间证书导出为 *.crt。

我需要通过使用 openssl 将 *.pem 文件转换为非二进制格式 *.crt 来执行相同操作。

这些是 apache 当前使用的证书:

SSLCertificateFile /etc/apache2/ssl/cert-start.pem
SSLCertificateKeyFile /etc/apache2/ssl/key-no-pw.pem
SSLCACertificateFile /etc/apache2/ssl/cert-bundle.pem

我可以轻松地将其转换SSLCertificateFile为 crt:

openssl x509  -in cert-start.pem -out cert-start.crt

我尝试过用完整链构建 CRT -chain-clcerts但没有成功。

包含所有中间证书的正确方法是什么SSLCACertificateFile /etc/apache2/ssl/cert-bundle.pem

答案1

cat cert-start.pem cert-bundle.pem > chain.pem

如果它也包含密钥(在某些情况下是需要的,但取决于用途),那么

cat cert-start.pem cert-bundle.pem key-no-pw.pem > full_chain.pem

如果你检查输出,你会看到类似这样的内容(对于 chain.pem 来说):

-----BEGIN CERTIFICATE-----
 ... <base64 encoded server cert> ...
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
 ... <base64 encoded intermediate cert> ...
-----END CERTIFICATE-----

对于 full_chain.pem 来说,它将是这样的:

-----BEGIN CERTIFICATE-----
 ... <base64 encoded server cert> ...
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
 ... <base64 encoded intermediate cert> ...
-----END CERTIFICATE-----

-----BEGIN PRIVATE KEY-----
 ... <base64 encoded key>
-----END PRIVATE KEY-----

如果您使用“检查”它,openssl x509 -in chain.pem您将只看到第一个(在本例中为服务器)证书。其余的将被视为注释 - 忽略。您必须将其分离到额外的文件中,或者只需通过管道将特定的行范围打印到 openssl 即可查看内容。真正的检查可以使用 cat 或您喜欢的一些文本编辑器“直观地”完成...一旦应用程序需要 pem / crt 文件,这就是您所需要的。

如果您希望将其作为“容器”处理,则正确的格式是 pkcs12。在那里,您可以将其作为一组证书处理,并以这种方式处理它并查看/导入它。在这种情况下,命令将是

openssl pkcs12 -export -in cert-start.pem -inkey key-no-pw.pem -certfile cert-bundle.pem -out full_chain.p12 -nodes

可以使用命令检查 pkcs12 输出

openssl pkcs12 -in full_chain.p12 -nodes

请注意,“正确”格式(p12 或 pem / crt)取决于用途。

答案2

您只需将它们连接起来

cat domain.tld.key domain.tld.crt root.crt > domain.tld.pem

相关内容