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浏览器都是正常返回了。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值