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

Cra*_*cis 5 ssl nginx https tls apache-2.2

您刚刚获得了一个新的 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
Run Code Online (Sandbox Code Playgroud)

或者在 Nginx 中使用:

ssl_certificate_key /etc/apache2/ssl/www.example.com.key;
ssl_certificate /etc/apache2/ssl/www.example.com.pem;
Run Code Online (Sandbox Code Playgroud)

记住apachectl configtest只检查这些文件是否存在;并且nginx -t“如果网站证书不是 crt 文件中的第一个,并且密钥错误,则会失败”(感谢Drifter104)。

那么,如何在重新启动之前检查所有内容?


可能的问题

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

  2. 您不小心将中间证书文件与您的网站证书文件混合在一起。

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

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

  5. 证书用于错误的密钥。

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

  7. 您使用了错误的证书(域不在CNSAN 中


一些起点

提取有关密钥、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";
Run Code Online (Sandbox Code Playgroud)

使用 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
Run Code Online (Sandbox Code Playgroud)

可以通过SSL Labs进行验证,但前提是您已经开始使用该配置。

Jen*_*ler 1

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

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