我从 GoDaddy 购买了证书,并收到了一个 .crt 文件和一个 .p7b 文件(PKCS#7)。
这是我在 https-ssl.conf 文件下的配置
<VirtualHost *:443>
----
SSLEngine on
SSLCipherSuite DHE-RSA-AES256-SHA:EDH-RSA-DES-CBC3-SHA:DHE-RSA-AES128-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA
SSLCertificateFile "conf/extra/blablabla.crt"
SSLCertificateChainFile "conf/extra/gd-g2_iis_intermediates.p7b"
当我尝试启动 Apache 服务器时,错误日志中出现以下错误:
Win32 不支持内置 SSLPassPhraseDialog(密钥文件 C:/xampp/apache/conf/extra/blablabla.crt),
AH02564:无法配置加密(?)私钥
我在 Windows Server 2012 环境中,安装了 Xampp Apache 2.4。有人能告诉我是什么导致了 SSL 配置问题吗?
答案1
显然 blablabla.crt 包含私钥(这是允许的,但不推荐),并且密钥是加密的,因此需要密码(这在 Windows 上显然不起作用;例如参见https://support.quovadisglobal.com/kb/a90/i-get-error-message-error-init-sslpassphrasedialog-builtin-is-not-supported-on-win32.aspx)
提取私钥并解密(除非您已经拥有它,例如从 CSR 生成步骤中获取它),然后将解密版本放回文件中,或者将其从该文件中删除,并将解密版本放入/保留在单独的文件中(命名为有意义的名称,如 blablabla.key)并在 中指定它SSLCertificateKeyFile
。无论哪种情况,出于安全考虑,请确保包含解密密钥的文件的 ACL 尽可能严格。使用最新的 OpenSSL(1.0.0+),您可以使用以下任一方式解密
openssl pkey <oldkey >newkey # no -passout, optional -passin
openssl rsa <oldkey >newkey # ditto, only if key is RSA --
# however without greater knowledge you are unlikely to have
# successsfully generated a key and obtained a cert for non-RSA
# oldkey can be the blablabla.crt that contains _both_ cert and key;
# OpenSSL will select the correct-type block from a PEM-format file.
对于 OpenSSL 0.9.x,请pkey
使用
openssl pkcs8 -topk8 -nocrypt <oldkey >newkey
但是,Apache(通过 OpenSSL)不支持证书链的 p7b 格式,尽管 2.4.8+ 应该支持链证书而SSLCertificateFile
无需单独的SSLCertificateChainFile
。首先执行
openssl pkcs7 -print_certs <chain.p7b >chain.pem
然后使用该新文件SSLCertificateChainFile
或将其附加到您正在使用的文件中,即SSLCertificateFile
blablabla.crt 。
PS:我假设 XAMPP(我自己不使用)为您提供了 openssl 命令行。如果没有,这里有一个不错的 Windows 版本的 OpenSSL(免费)http://www.slproweb.com/products/Win32OpenSSL.html