使用前检查 Apache/Nginx 上的 HTTPS 设置

使用前检查 Apache/Nginx 上的 HTTPS 设置

您刚刚获得一个新的 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)。

那么,如何在重启之前检查一切?


可能的问题

  1. 你有错误的中间体(例如GeoTrust 在一页上列出了所有中间体)。

  2. 您意外地将中级证书文件与您的网站证书文件混合在一起。

  3. 您包含了根证书(影响性能,因为这会发送不必要的数据)。

  4. 您缺少一个或多个中级证书。

  5. 该证书的密钥错误。

  6. 您已将这些文件保留为服务器上的任何人都可读(例如chmod 644)。

  7. 您使用了错误的证书(域名不在中国或者存储区域网络


一些起点

提取有关密钥、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

有一个很好的 Linux 命令行脚本测试sl.sh你可以使用它来实现这个目的。我也用它来实现其他协议(例如 FTPS)。

作为最后的检查,我仍然会使用SSL 服务器测试. 它会生成漂亮的测试结果,您可以将其转发给客户 ;-)。

答案2

您可以复制配置文件并编辑端口。从那里您可以启动 Web 服务器的第二个实例 (nginx/apache) 并检查配置是否有效。您
无需访问https://www.your-domain.com(端口 443),而是改为访问https://www.your-domain.com:8443(端口 8443)。
使用正在运行的实例,您可以使用外部工具检查并检查日志中的错误。这最大限度地降低了配置和证书更改后您的网站不可用的风险。
根据您的配置大小和虚拟主机数量,这可能是一种非常耗时的解决方案。

@symcbean 在评论中也提到了解决方案。

相关内容