Nginx 配置 TLSv1.2 协议失效的问题

  • Post author:
  • Post category:其他




Nginx 配置 TLSv1.2 协议失效的问题



①、背景描述

所有业务出口都挂Nginx上,Nginx配置了证书但是通过https访问时谷歌浏览器、火狐、Edge浏览器报错,提示正在使用已过时的SSL版本,v1.0,建议使用v1.2或更高版本。



②、原因分析:

访问的域名得Nginx配置是设置的

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 

度娘“nginx 证书v1.2失效”得知nginx配置了N多vhost,只要有其中一个配置文件配置了过时的ssl_protocols 那么所有的配置都会使用过时的版本。

检查Nginx配置

server
  {
       listen 443 ssl;
       server_name granfa.example.com;
       # ssl on;  //如果同时使用http和https,这个不要打开,注意
       ssl_certificate /usr/local/nginx/conf/cert/3893973__example.com.pem;
       ssl_certificate_key /usr/local/nginx/conf/cert/3893973__example.com.key;
       ssl_session_timeout 5m;
       ssl_protocols SSLv2 SSLv3 TLSv1; #就是这行配置造成的问题。
       ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
       ssl_prefer_server_ciphers on;

       location / {
               proxy_pass        http://granfa;
               allow 118.113.15.13;
               allow 10.20.11.0/24;
               allow 220.166.180.0/24;
               deny all;
              }
       location = /favicon.ico {
                log_not_found off;
                access_log off;
                }
     access_log  /usr/local/nginx/logs/granfa_443.log  mainlog_post;

 }



③、解决思路



3.1、查看Nginx所有vhost配置文件配置的ssl_protocols 值。

可以看到有很多配置还是使用的v1、v2、v3

[root@nginx-180-master-180 vhost_backup]# grep -rin "ssl_protocols" ./
./testmixingren.example.com.conf:18:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testfdd.example.com.conf:21:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testbtpay.example.com.conf:22:              ssl_protocols SSLv2 SSLv3 TLSv1;
./maven.example.com.conf:29:    ssl_protocols TLSv1.1 TLSv1.2;  # 支持的协议
./j.example.com.conf:18:    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
./j.example.com.conf:19:    #ssl_protocols TLSv1.1 TLSv1.2;  # 支持的协议
./granfa.example.com.conf:29:       ssl_protocols SSLv2 SSLv3 TLSv1;
./ab.example.com.conf:18:              ssl_protocols SSLv2 SSLv3 TLSv1;
./alipaytest.example.com.conf:28:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testweburl.example.com.conf:22:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testnewrisk.example.com.conf:29:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testbaolifund.example.com.conf:22:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testpaymiddle.example.com.conf:21:              ssl_protocols SSLv2 SSLv3 TLSv1;
./elk.example.com.conf:17:    ssl_protocols TLSv1.1 TLSv1.2;  # 支持的协议
./testmonth.example.com.conf:22:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testmiddle.example.com.conf:21:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testrisk3.example.com.conf:21:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testacs.example.com.conf:30:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testlogs.example.com.conf:21:              ssl_protocols SSLv2 SSLv3 TLSv1;
./j.example.com.conf_backup:29:       ssl_protocols SSLv2 SSLv3 TLSv1;
./testcmprofit.example.com.conf:22:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testcps3.example.com.conf:21:              ssl_protocols SSLv2 SSLv3 TLSv1;
./testrisk2.example.com.conf:29:              ssl_protocols SSLv2 SSLv3 TLSv1;



3.2 替换所有低版本为v1.2

低版本:sl_protocols SSLv2 SSLv3 TLSv1

高版本:ssl_protocols TLSv1 TLSv1.1 TLSv1.2

sed -i "s/ssl_protocols SSLv2 SSLv3 TLSv1/ssl_protocols TLSv1 TLSv1.1 TLSv1.2/g" `grep -rl 'ssl_protocols SSLv2 SSLv3 TLSv1' ./`



3.3重新加载nginx配置

/usr/local/nginx/sbin/nginx -t    #检查配置是否有问题
/usr/local/nginx/sbin/nginx -s reload   #刷新配置



3.4再次通过浏览器访问https站点

经测试谷歌浏览器、Egde浏览器、360浏览器都是正常返回了。

在这里插入图片描述



版权声明:本文为xjjj064原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。