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

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浏览器都是正常返回了。


已有 0 条评论

    欢迎您,新朋友,感谢参与互动!