在使用前检查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文件中,并且如果密钥错误”(感谢Drifter104 )。

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


可能的问题

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

  2. 您不小心混合了中级证书文件和您的网站证书文件。

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

  4. 您缺less一个或多个中间证书。

  5. 证书是错误的密钥。

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

  7. 您正在使用错误的证书(域不在CN或SAN中 )


一些起点

提取有关密钥,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实验室进行validation,但只有在您开始使用该configuration时才能进行validation。

有一个很好的Linux命令行脚本testssl.sh可以用于这个目的。 我也使用过其他协议(例如FTPS)。

至于最后的检查,我仍然会使用SSL服务器testing 。 它产生一个漂亮的testing结果,你可以转发给客户;-)。