您刚刚获得了新的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 )。
那么,在重新启动之前如何检查一切?
您有错误的中间体(例如, GeoTrust在一个页面上列出了所有的中间体 )。
您不小心混合了中级证书文件和您的网站证书文件。
你包括根证书(影响性能,因为这发送不必要的数据)。
您缺less一个或多个中间证书。
证书是错误的密钥。
您已经将这些文件留在服务器上的任何人可读(如chmod 644 )。
您正在使用错误的证书(域不在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结果,你可以转发给客户;-)。