Apache - 从现有的 .crt 文件生成私钥

lud*_*egu 7 ssl apache-httpd

我有一些 apache 实例使用自制生成的证书顺利运行。现在我必须使用提供的证书,但我发送的只是一个 .crt 文件。试图将其复制到正确的目录中,但是当我尝试重新启动网络服务器时,它会记录:

SSL Library Error: 185073780 error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
Run Code Online (Sandbox Code Playgroud)

我认为这是正确的,因为 .key 文件是我自己制作的。有没有办法从 .crt 生成正确的 .key 文件?

slm*_*slm 7

对于您的自签名证书,您可能执行了以下操作:

$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
       -keyout mysitename.key -out mysitename.crt
Run Code Online (Sandbox Code Playgroud)

然后为 Apache 创建这样的行:

<VirtualHost 192.168.0.1:443>
DocumentRoot /var/www/website
ServerName www.domain.com
SSLEngine on
SSLCertificateFile /etc/ssl/crt/primary.crt
SSLCertificateKeyFile /etc/ssl/crt/private.key
SSLCertificateChainFile /etc/ssl/crt/intermediate.crt
</VirtualHost> 
Run Code Online (Sandbox Code Playgroud)

有了 CA 签名的证书,情况略有变化。您需要使用private.key用于签署 CA 证书的文件,而不是用于执行自签名证书的文件。

在某些情况下,您可以从提供给您的文件中导出密钥,但我们需要了解有关提供给您的实际证书文件的更多信息。

例子

我处理过 .p12 文件,需要从中提取 .key 文件。

$ openssl pkcs12 -in star_qmetricstech_com.p12 -out star_qmetricstech_com.key 
Run Code Online (Sandbox Code Playgroud)

但是对于 SSL 证书,容器文件有多种类型,因此您必须特别注意不同的文件,以及哪些文件一起使用。

参考