• 隐藏侧边栏
  • 展开分类目录
  • 关注微信公众号
  • 我的GitHub
  • QQ:1753970025
Chen Jiehua

Nginx SSL配置 

之前用了Let‘s Encrypte来做网站的HTTPS证书,nginx经过简单配置就完成了。然后这几天却意外发现某些浏览器无法访问……

问题根源

起因是阿里云备案中心发消息说已备案网站(本网站)无法访问,但是我自己在本地访问却一切正常,手机上也可以正常访问,于是便不了了之。

然而昨天晚上使用Kali Linux,用内置的Mozilla Firfox访问却意外发现网站内容空白。观察发现:

  • 从开发者面板 Network 只有request,却没有respone;
  • 服务器nginx log没有看到请求记录;

初步怀疑是 SSL 配置的问题,大致配置如下:

将SSL部分注释掉,网站可以正常访问!所以问题的根源是SSL配置的问题了。

Nginx SSL配置

查看Nginx SSL文档,其中配置建议:

To reduce the processor load it is recommended to

  • set the number of worker processes equal to the number of processors,
  • enable keep-alive connections,
  • enable the shared session cache,
  • disable the built-in session cache,
  • and possibly increase the session lifetime (by default, 5 minutes)

配置示例:

对比我之前的配置,主要是增加了 SSL 几个其他的选项。

同时,通过对比服务器上另外一个HTTPS站点的配置文件,对每个ssl_xxx进行尝试了一下,最后发现是 ssl_ciphers 导致的,将 ssl_ciphers 重新设置后可以正常访问:

ssl_ciphers

ssl_ciphers 的配置为:

其中 ciphers 的依赖于OpenSSL库,我们可以查看所有支持的 ciphers

之前使用默认值能够正常访问,而最近刚好升级nginx,所以问题应该是nginx不同版本的 ssl_ciphers 默认值发生变化导致,查看官方说明 果然发现有坑:

  • The shared SSL session cache has been supported since 0.5.6.
  • Version 1.9.1 and later: the default SSL protocols are TLSv1, TLSv1.1, and TLSv1.2 (if supported by the OpenSSL library).
  • Version 0.7.65, 0.8.19 and later: the default SSL protocols are SSLv3, TLSv1, TLSv1.1, and TLSv1.2 (if supported by the OpenSSL library).
  • Version 0.7.64, 0.8.18 and earlier: the default SSL protocols are SSLv2, SSLv3, and TLSv1.
  • Version 1.0.5 and later: the default SSL ciphers are “HIGH:!aNULL:!MD5”.
  • Version 0.7.65, 0.8.20 and later: the default SSL ciphers are “HIGH:!ADH:!MD5”.
  • Version 0.8.19: the default SSL ciphers are “ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM”.
  • Version 0.7.64, 0.8.18 and earlier: the default SSL ciphers are
    ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP”.

至此,搞定!

码字很辛苦,转载请注明来自ChenJiehua《Nginx SSL配置》

评论