使用 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