首先我以爲沒事就用綠盟掃漏洞的公司,就是閒的蛋疼,傻逼!很多服務器使用nginx,若是openssl 是靜態編譯的,直接將openssl 編譯到nginx裏面去了,這就意味着,單純升級openssl 是沒有任何效果的,nginx不會加載外部的openssl動態連接庫的,必須將nginx從新編譯才能夠根治。因此我說那些沒事就掃漏洞的公司是傻逼。。。linux
一.判斷nginx 是不是靜態編譯的nginx
[root@bogon ~]# /usr/local/nginx/sbin/nginx –V服務器
若是編譯參數中含有 –with-openssl= path ,或者有 –with-http_ssl_module ,則代表nginx 是靜態編譯的,那麼恭喜你在升級完openssl 以後還有從新編譯nginx,指定openssl 的目錄。dom
二. 升級openssl(後續須要從新編譯nginx,建議採用此方法升級openssl)ide
[root@bogon soft]# cd /usr/src/openssl-1.1.0h/ui
[root@bogon openssl-1.1.0h]# ./config --prefix=/usr/local/openssl-1.1.0h/sslidea
[root@bogon openssl-1.1.0h]# echo $?spa
0orm
[root@bogon openssl-1.1.0h]# make && make installip
[root@bogon openssl-1.1.0h]# echo $?
0
將新編譯的openssl 替換老版本的
[root@bogon openssl-1.1.0h]# mv /usr/bin/openssl /usr/bin/openssl.bak
[root@bogon openssl-1.1.0h]# mv /usr/include/openssl /usr/include/openssl.bak
[root@bogon openssl-1.1.0h]# ln -s /usr/local/openssl-1.1.0h/ssl/bin/openssl /usr/bin/openssl
[root@bogon openssl-1.1.0h]# ln -s /usr/local/openssl-1.1.0h/ssl/include/openssl /usr/include/openssl
[root@bogon lib]# pwd
/usr/local/openssl-1.1.0h/ssl/lib
[root@bogon lib]# cp libssl.so.1.1 /usr/lib64/libssl.so.1.1
[root@bogon lib]# cp libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
[root@bogon lib]# ldconfig -v | grep ssl
ldconfig: 沒法對 /usr/lib64/nx/X11 進行 stat 操做: 沒有那個文件或目錄
/usr/local/openssl-1.1.0h/ssl:
libssl.so.1.1 -> libssl.so.1.1
libssl3.so -> libssl3.so
libssl.so.10 -> libssl.so.1.0.1e
[root@bogon lib]# echo $?
0
[root@bogon lib]# openssl version -a
OpenSSL 1.1.0h 27 Mar 2018
built on: reproducible build, date unspecified
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO
_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/local/openssl-1.1.0h/ssl/ssl\"" -DENGINESDIR="\"/usr/local/openssl-1.1.0h/ssl/lib/engines-1.1\"" -Wa,--noexecstackOPENSSLDIR: "/usr/local/openssl-1.1.0h/ssl/ssl"
ENGINESDIR: "/usr/local/openssl-1.1.0h/ssl/lib/engines-1.1"
三.從新編譯nginx
查看nginx 中openssl 的版本
[root@bogon wwwroot]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf
/nginx.conf --modules-path=/usr/local/nginx/modules --error-log-path=/data/logs/nginx/error.log --http-log-path=/data/logs/nginx/access.log --user=www --group=www --http-client-body-temp-path=/usr/local/nginx/tmp/client_body --http-proxy-temp-path=/usr/local/nginx/tmp/proxy --http-fastcgi-temp-path=/usr/local/nginx/tmp/fastcgi --http-uwsgi-temp-path=/usr/local/nginx/tmp/uwsgi --http-scgi-temp-path=/usr/local/nginx/tmp/scgi --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-mail=dynamic --with-stream=dynamic
從新編譯nginx,並制定openssl 新版本的目錄。從新編譯nginx時,以前nginx 的配置參數要保證同樣
[root@bogon nginx-1.14.0]# pwd
/usr/src/nginx-1.14.0
[root@bogon nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --modules-path=/usr/local/nginx/modules --error-log-path=/data/logs/nginx/error.log --http-log-path=/data/logs/nginx/access.log --user=www --group=www --http-client-body-temp-path=/usr/local/nginx/tmp/client_body --http-proxy-temp-path=/usr/local/nginx/tmp/proxy --http-fastcgi-temp-path=/usr/local/nginx/tmp/fastcgi --http-uwsgi-temp-path=/usr/local/nginx/tmp/uwsgi --http-scgi-temp-path=/usr/local/nginx/tmp/scgi --with-http_ssl_module --with-openssl=/usr/local/openssl-1.1.0h/ssl --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-mail=dynamic --with-stream=dynamic
[root@bogon nginx-1.14.0]# echo $?
0
[root@bogon nginx-1.14.0]# make
make -f objs/Makefile
make[1]: Entering directory `/usr/src/nginx-1.14.0'
cd /usr/local/openssl-1.1.0h/ssl \
&& if [ -f Makefile ]; then make clean; fi \
&& ./config --prefix=/usr/local/openssl-1.1.0h/ssl/.openssl no-shared no
-threads \ && make \
&& make install_sw LIBDIR=lib
/bin/sh: line 2: ./config: 沒有那個文件或目錄
make[1]: *** [/usr/local/openssl-1.1.0h/ssl/.openssl/include/openssl/ssl.h] 錯誤
127make[1]: Leaving directory `/usr/src/nginx-1.14.0'
make: *** [build] 錯誤 2
[root@bogon nginx-1.14.0]# echo $?
2
make 以後報錯,解決方法以下:
修改nginx 源文件下的 /usr/src/nginx-1.14.0/auto/lib/openssl/conf
找到這麼一段代碼:
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
[root@bogon nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --modules-path=/usr/local/nginx/modules --error-log-path=/data/logs/nginx/error.log --http-log-path=/data/logs/nginx/access.log --user=www --group=www --http-client-body-temp-path=/usr/local/nginx/tmp/client_body --http-proxy-temp-path=/usr/local/nginx/tmp/proxy --http-fastcgi-temp-path=/usr/local/nginx/tmp/fastcgi --http-uwsgi-temp-path=/usr/local/nginx/tmp/uwsgi --http-scgi-temp-path=/usr/local/nginx/tmp/scgi --with-http_ssl_module --with-openssl=/usr/local/openssl-1.1.0h/ssl --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-mail=dynamic --with-stream=dynamic
[root@bogon nginx-1.14.0]# echo $?
0
[root@bogon nginx-1.14.0]# make
[root@bogon nginx-1.14.0]# echo $?
0
注:此處千萬不要 執行make install,不然會覆蓋nginx 以前的配置文件
拷貝nginx的二進制目錄到nginx的安裝目錄下
@ 能夠先備份原來的二進制文件(/usr/local/sbin/nginx),而後在拷貝
[root@bogon vhost]# pkill nginx
[root@bogon vhost]# cp /usr/src/nginx-1.14.0/objs/nginx /usr/local/nginx/sbin/nginx
cp:是否覆蓋"/usr/local/nginx/sbin/nginx"? y
# 重啓nginx 查看nginx中的openssl 版本
[root@bogon nginx-1.14.0]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@bogon vhost]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
built with OpenSSL 1.1.0h 27 Mar 2018
TLS SNI support enabled