我们的网站拥有 Network Solutions 提供的 SSL 证书。将 Apache/OpenSSL 升级到 2.4.9 版后,启动 HTTPD 时出现以下警告:
AH02559: The SSLCertificateChainFile directive (/etc/httpd/conf.d/ssl.conf:105) is deprecated, SSLCertificateFile should be used instead
根据Apache mod_ssl 手册事实确实如此:
SSLCertificateChainFile 已弃用
当 SSLCertificateFile 扩展为还可以从服务器证书文件加载中间 CA 证书时,SSLCertificateChainFile 在 2.4.8 版本中已过时。
查找文档SSL证书文件,看起来我只需要将我的电话替换为SSL证书链文件和SSL证书文件。
此更改使我的 ssl.conf 从此变为:
SSLCertificateFile /etc/ssl/STAR.EXAMPLE.COM.crt
SSLCertificateKeyFile /etc/ssl/server.key
SSLCertificateChainFile /etc/ssl/Apache_Plesk_Install.txt
更改为:
SSLCertificateFile /etc/ssl/STAR.EXAMPLE.COM.crt
SSLCertificateFile /etc/ssl/Apache_Plesk_Install.txt
SSLCertificateKeyFile /etc/ssl/server.key
...但这不起作用。Apache 根本拒绝启动,没有任何错误消息。
我不确定这里还能尝试什么,因为我对 mod_ssl 或 SSL 证书不太熟悉。我记得我们需要添加Apache_Plesk_安装.txt文件以使 Internet Explorer 在我们的网站上没有 SSL 警告,但除此之外我就不知道了。
任何帮助都将不胜感激。谢谢。
答案1
我也遇到了同样的问题。我刚刚将这些行替换为/etc/apache2/site-enabled/default-ssl.conf
SSLCertificateFile /etc/ssl/certs/domain.crt
SSLCertificateKeyFile /etc/ssl/private/domain.key
#SSLCertificateChainFile /etc/apache2/ssl.crt/chain.crt
如您所见,我只是注释掉了SSLCertificateChainFile
。然后,看到与您相同的错误,我将我的chain.crt
在最后的domain.crt
,就像这样:
root@host~: cat /etc/apache2/ssl.crt/chain.crt >> /etc/ssl/certs/domain.crt
而且效果非常好。
答案2
我使用以下脚本创建包含链式证书的证书包。
#!/bin/sh
#
# Convert PEM Certificate to ca-bundle.crt format
#
test ! $1 && printf "Usage: `basename $0` certificate" && exit 1
# Friendly Name and Underline Friendly Name with equal signs
openssl x509 -in $1 -text -noout | sed -e 's/^ *Subject:.*CN=\([^,]*\).*/\1/p;t c' -e 'd;:c' -e 's/./=/g'
# Output Fingerprint and swap = for :
openssl x509 -in $1 -noout -fingerprint | sed -e 's/=/: /'
# Output PEM Data:
echo 'PEM Data:'
# Output Certificate
openssl x509 -in $1
# Output Certificate text swapping Certificate with Certificate Ingredients
openssl x509 -in $1 -text -noout | sed -e 's/^Certificate:/Certificate Ingredients:/'
要使用它,请从服务器证书开始,然后依次通过证书链中的任何中间证书回到根证书。
./bundle.sh myserver.crt >myserver.chain
./bundle.sh intermediate.crt >>myserver.chain
./bundle.sh root.crt >>myserver.chain
其中相应的证书名称应替换为您的真实证书名称。
答案3
将站点证书、中间文件以及 SSLCertificateFile 指令指定的文件放在一起,将私钥连接到 SSLCertificateKeyFile 指定的文件中,这样一切就都设置好了。虽然您可以将私钥与证书放在同一个文件中,但不建议这样做。请查看文档了解更多详细信息:
http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcertificatefile
我建议不要将根 CA 证书作为 SSLCertificateFile 的一部分,因为客户端应该信任根 CA 证书,这样证书验证才能按设计进行。
此外,如果 apache 错误日志中没有任何内容,那么可以将错误日志的粒度设置得更细,例如http://httpd.apache.org/docs/current/mod/core.html#loglevel