您刚刚获得一个新的 HTTPS(SSL/TLS)证书,并且您希望它是正确的中级证书。
在 Apache 中的设置如下:
SSLCertificateKeyFile /etc/ssl/www.example.com.key
SSLCertificateChainFile /etc/ssl/www.example.com.chn
SSLCertificateFile /etc/ssl/www.example.com.crt
或者在 Nginx 中使用:
ssl_certificate_key /etc/apache2/ssl/www.example.com.key;
ssl_certificate /etc/apache2/ssl/www.example.com.pem;
记住apachectl configtest
只检查这些文件是否存在;并且nginx -t
“如果网站证书不是 crt 文件中的第一个,并且密钥错误,则会失败”(感谢流浪者104)。
那么,如何在重启之前检查一切?
可能的问题
你有错误的中间体(例如GeoTrust 在一页上列出了所有中间体)。
您意外地将中级证书文件与您的网站证书文件混合在一起。
您包含了根证书(影响性能,因为这会发送不必要的数据)。
您缺少一个或多个中级证书。
该证书的密钥错误。
您已将这些文件保留为服务器上的任何人都可读(例如
chmod 644
)。
一些起点
提取有关密钥、CSR 或证书文件的信息:
openssl rsa -check -in "www.example.com.key";
openssl req -text -noout -verify -in "www.example.com.csr";
openssl x509 -text -noout -in "www.example.com.crt";
使用 sha256 获取公钥哈希(例如设置 HPKP):
openssl rsa -in "www.example.com.key" -pubout -outform der | openssl dgst -sha256 -binary | openssl enc -base64
openssl x509 -in "www.example.com.chn" -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
openssl req -in "www.example.com.csr" -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
openssl s_client -connect www.example.com:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
可以通过以下方式验证SSL 实验室,但仅当您已开始使用该配置时。
答案1
答案2
您可以复制配置文件并编辑端口。从那里您可以启动 Web 服务器的第二个实例 (nginx/apache) 并检查配置是否有效。您
无需访问https://www.your-domain.com
(端口 443),而是改为访问https://www.your-domain.com:8443
(端口 8443)。
使用正在运行的实例,您可以使用外部工具检查并检查日志中的错误。这最大限度地降低了配置和证书更改后您的网站不可用的风险。
根据您的配置大小和虚拟主机数量,这可能是一种非常耗时的解决方案。
@symcbean 在评论中也提到了解决方案。