Let‘s Encrypt+nginx之漏洞 SSL/TLS协议信息泄露漏洞(CVE-2016-2183)

根据漏洞扫描的提示查看官网给出的解释,如下:

SWEET32 Mitigation (CVE-2016-2183)

SWEET32 (https://sweet32.info) is an attack on older block cipher algorithms
that use a block size of 64 bits. In mitigation for the SWEET32 attack DES based
ciphersuites have been moved from the HIGH cipherstring group to MEDIUM in
OpenSSL 1.0.1 and OpenSSL 1.0.2. OpenSSL 1.1.0 since release has had these
ciphersuites disabled by default.

  • OpenSSL 1.0.2 users should upgrade to 1.0.2i
  • OpenSSL 1.0.1 users should upgrade to 1.0.1u

根据官网要求升级对应大版本到指定的分支,比如我默认的是centos6自带的1.0.1e,这个版本是有很多漏洞的,按照要求准备升级到1.0.1u

步骤

一、执行脚本文件进行下载对应版本openssl,代码如下:

#!/bin/sh
#下载安装指定版本openssl
#以下是普通用户脚本,一些操作需要root权限的sudo,root用户可删除
wget http://www.openssl.org/source/openssl-1.0.1u.tar.gz
sudo tar xzvf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
sudo ./config shared zlib

make && make install
sudo chmod 777 /usr/local/ssl
cd /usr/local/ssl/
sudo ./bin/openssl version -a

#替换旧版openssl
sudo mv /usr/bin/openssl /usr/bin/openssl.old2
sudo mv /usr/include/openssl  /usr/include/openssl.old2
sudo ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/ssl/include/openssl/ /usr/include/openssl

#配置库文件搜索路径
#root的写法  echo  "/usr/local/ssl/lib" >> /etc/ld.so.conf
echo  "/usr/local/ssl/lib" |sudo tee -a /etc/ld.so.conf
sudo ldconfig

#测试新版是否正常
openssl version -a

#备注:如果你是普通用户创建的软链注意权限问题

二、重新编译nginx,指定相应的新版本的openssl模块

  1. 找到之前下载的nginx源码包,我的是nginx-1.16.1,进入主目录执行如下命令:
    首先查看当前nginx的版本及模块,复制configure arguments准备下次重新编译使用
nginx -V
----------------------------------------------------------------------------
nginx version: nginx/1.16.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) 
built with OpenSSL 1.0.1e  22 Sep 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-pcre=/ywj/src/pcre-8.35 --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_stub_status_module --without-http_charset_module --with-http_v2_module
  1. 其次,重新配置模块并重新编译nginx文件,具体操作如下:
./configure --prefix=复制已有的模块+ with-openssl=/ytxt/src/openssl-1.0.1u
#注意:这里新增模块with-openssl指定新的nginx ssl模块依赖的ssl库,如果没有这步最终的nginx的ssl编译版本是openssl-1.0.1u,而运行版本还是原来的openssl-1.0.1e

在这里插入图片描述

#编译完成后,执行make,但不执行make install
make
  1. 替换原来的nginx为新版本的
#先备份
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx20181113.old
#再复制最新额
cp ./objs/nginx /usr/local/nginx/sbin/nginx

#查看最新版本
nginx -V
----------------------------------------------------------------------------
nginx version: nginx/1.16.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) 
built with OpenSSL 1.0.1u  22 Sep 2016
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-pcre=/ywj/src/pcre-8.35 --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_stub_status_module --without-http_charset_module --with-http_v2_module --with-openssl=/ytxt/openssl-1.0.1u

其他注意事项

我的某个服务器自动升级证书脚本执行失败,会报curl: (35) SSL connect error,经分析不能执行curl -o https://*****这样的脚本,后来发现openssl的版本依赖的nss不支持,本来像直接升级nss可惜操作不顺利直接升级openssl到新版本(可以通过包管理库yum进行安装,避免依赖问题)

yum install nmap;
nmap -sV --script ssl-enum-ciphers -p 443 js.iz***e100.cn

443/tcp open  http    nginx 1.16.1
| ssl-enum-ciphers: 
|   TLSv1.0
|     Ciphers (13)
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_RSA_WITH_AES_128_CBC_SHA
|       TLS_RSA_WITH_AES_256_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
|     Compressors (1)
|       uncompressed
|   TLSv1.1
|     Ciphers (13)
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_RSA_WITH_AES_128_CBC_SHA
|       TLS_RSA_WITH_AES_256_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
|     Compressors (1)
|       uncompressed
|   TLSv1.2
|     Ciphers (25)
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_RSA_WITH_AES_128_CBC_SHA
|       TLS_RSA_WITH_AES_128_CBC_SHA256
|       TLS_RSA_WITH_AES_128_GCM_SHA256
|       TLS_RSA_WITH_AES_256_CBC_SHA
|       TLS_RSA_WITH_AES_256_CBC_SHA256
|       TLS_RSA_WITH_AES_256_GCM_SHA384
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
|     Compressors (1)
|_      uncompressed

其中包含TLS_RSA_WITH_3DES_EDE_CBC_SHA或者其他DES的字样,通过nmap这个探测可以测试当前tls的加密级别,解决方案直接在nginx的ssl_ciphers中去掉DES、3DES这样的算法以及添加!DES:!3DES:来屏蔽隐藏的

总结

第一步、升级openssl升级到指定的修正版本,这个从测试其版本的角度修复这个问题(这步基本解决自动扫描漏洞的问题)
第二步、ssl的指定算法需要排除DES、3DES这样的算法,这个从算法匹配的角度解决这个问题

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值