OpenSSL "SSL-Death-Alert" 拒絕服務漏洞(CVE-2016-8610)【原理掃描】【轉】


本文用於解決問題:  OpenSSL "SSL-Death-Alert" 拒絕服務漏洞(CVE-2016-8610)【原理掃描】。

需升級 OpenSSL、nginx 靜態源碼包 解決。

 

1、相關下載地址:

    //openssl官方下載地址
    https://www.openssl.org/source/

    //nginx下載地址
    http://nginx.org/en/download.html


2、附參考文本檔:

    //修訂方案
    https://blog.51cto.com/zhanjun/2097178
    
    //重新編譯Nginx指導手冊【修復靜態編譯Openssl的Nginx漏洞 】[Openssl Heartbleed]
    https://blog.csdn.net/hujkay/article/details/23476557


3、 本文分為3部分,OpenSSL安裝、nginx安裝、可能遇到問題。


一、OpenSSL安裝
    通常出現的OpenSSL的漏洞需要升級版本解決。

1、查看openssl版本
   openssl version

2、下載openssl源碼包,以 openssl-1.1.1d.tar.gz為例
    https://www.openssl.org/source/

    1)解壓

tar zxf openssl-1.1.1d.tar.gz
    2)編譯

./config --prefix=/usr/local/openssl-1.1.1d/ssl
make && make install
    3)將新編譯的openssl替換系統老版本

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl-1.1.1d/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl-1.1.1d/ssl/include/openssl /usr/include/openssl
    4)配置文件搜索路徑

echo "/usr/local/ssl/lib/" >> /etc/ld.so.conf
ldconfig -v |grep openssl
    5)查看安裝完成后的最新版本

openssl version
openssl version -a
 


二、nginx安裝
    先將原nginx 備份,目錄為 /usr/local/nginx。

1、查看系統 nginx是否為靜態編譯;

nginx -V
  如果編譯參數中含有--with-openssl=...,則表明Nginx是靜態編譯Openssl,如下所示:
   

nginx version: EWS/CIS
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.1t 3 May 2016
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --http-log-path=/usr/local/nginx/log/access.log --error-log-path=/usr/local/nginx/log/error.log --pid-path=/usr/local/nginx/pid/nginx.pid --lock-path=/usr/local/nginx/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-pcre=/home/tools/php-tools/pcre-8.37 --without-http-cache --with-http_gzip_static_module --with-threads --with-openssl=/home/tools/openssh-tools/openssl-1.0.1t
    注:注意保存configure arguments,重新編譯時使用;

2、下載nginx源碼包,以 nginx-1.17.8 為例;
    http://nginx.org/en/download.html
   
    1)解壓安裝nginx新版安裝包

tar -zxvf nginx-1.17.8.tar.gz

mv nginx-1.17.8 /usr/local/nginx-1.17.8

cd /usr/local/nginx-1.17.8
    2)執行配置
 

./configure --prefix=/usr/local/nginx --http-log-path=/usr/local/nginx/log/access.log --error-log-path=/usr/local/nginx/log/error.log --pid-path=/usr/local/nginx/pid/nginx.pid --lock-path=/usr/local/nginx/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-pcre --without-http-cache --with-http_gzip_static_module --with-threads --with-openssl=/usr/local/openssl-1.1.1d/ssl
  需注意:
    ①    --with-pcre=/home/tools/php-tools/pcre-8.37 改為  --with-pcre
    ②   --with-openssl=/usr/local/openssl-1.1.1d/ssl
        --with-openssl配置最新的 openssl地址;
    ③   --prefix=/usr/local/nginx 安裝到/usr/local/nginx的nginx目錄下
    
    3)編譯
    

make
make install
 

三、可能遇到問題 
 1、下載openssl源碼編譯安裝后運行
    openssl version 提示:

    /usr/local/openssl/bin/openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

    這是由於openssl庫的位置不正確造成的。

    可以做一個軟連接。假如你的libssl.so.1.1 文件在/usr/local/openssl/lib/下面,可以這樣做  

ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1

ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
    這時openssl version

[root@macco-file lib64]# openssl version
OpenSSL 1.1.1d 10 Sep 2019
    #如果要刪除軟連接,直接刪掉就好

rm /usr/lib64/libcrypto.so.1.1
 

2、make nginx 出錯
   如下所示

/bin/sh: line 2: ./config: No such file or directory
make[1]: *** [/usr/local/ssl/.openssl/include/openssl/ssl.h] Error 127
make[1]: Leaving directory `/usr/local/src/nginx-1.9.9'
make: *** [build] Error 2
   解決方法:

    打開nginx源文件下的/usr/local/nginx-1.17.8/auto/lib/openssl/conf文件【去掉 .openssl】:
    找到這么一段代碼:

CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
 修改成以下代碼:

CORE_INCS="$CORE_INCS $OPENSSL/include"
CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"
CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
 然后再進行Nginx的編譯安裝即可


3、nginx 重啟失敗
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /usr/local/nginx/conf/nginx.conf:138
    解決方法:編輯nginx.conf文件(先備份),
    ssl on 去掉;
    listen 443 改為 listen 443 ssl ;

 

轉自
————————————————
版權聲明:本文為CSDN博主「HerSpoon」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wt461290528/article/details/104607756

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM