Nginx OpenSSL版本升级
openssl升级
OpenSSL程序库当前广泛用于实现互联网的传输层安全(TLS)协议。心脏出血(Heartbleed),也简称为心血漏洞,是一个出现在加密程序库OpenSSL的安全漏洞,此漏洞于2012年被引入了软件中,2014年4月首次向公众披露。只要使用的是存在缺陷的OpenSSL实例,无论是服务器还是客户端,都可能因此而受到攻击。此问题的原因是在实现TLS的心跳扩展时没有对输入进行适当验证(缺少边界检
查),因此漏洞的名称来源于“心跳”(heartbeat)。该程序错误属于缓冲区过读,即可以读取的数据比应该允许读取的还多。
下载地址
- https://www.openssl.org/source/
升级步骤
#查看当前版本
nginx -V |& grep -i "openssl"|sed -rn "s/.* +(OpenSSL.*)-.*/\1/p"
#下载openssl的高版本,这里以1.1.1q举例
wget -P /var/download https://www.openssl.org/source/old/1.1.1/openssl-1.1.1q.tar.gz --no-check-certificate
#解压
tar -xvf openssl-1.1.1q.tar.gz -C /apps/
#重新编译
cd /apps/nginx-1.20.2/
./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --withhttp_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --add-module=/usr/local/src/echo-nginx-module --with-openssl=/apps/openssl-1.1.1q
#编译安装
#make -j $(lscpu|sed -rn "s/^CPU\(s\).*([0-9]+)$/\1/p") && make install
make -j $(lscpu|awk '/^CPU\(s\)/{print $2}')&& make install
#关闭nginx进程
nginx -s quit
#重启nginx
nginx
#查看版本
nginx -V |& grep -i "openssl"|awk 'NR==1{print $3,$4}'
强制升级脚本(会直接中断nginx运行)
#!/bin/bash
Openssl_Vsion=openssl-1.1.1q
Suffix=tar.gz
Install_Url=/root/apps
Grt_url=https://www.openssl.org/source/old/1.1.1/$Openssl_Vsion.$Suffix
Download_url=/var/download
#nginx_url=/apps/nginx-1.20.2/
nginx_url=/apps/nginx/nginx-1.19.0
Make_option=$(nginx -V |& sed -rn "s/^configure.*: (.*)/\1/p")
function check() {
#判断当前版本是否大于1.1.1
if [[ $(nginx -V|& grep -i "openssl"| awk 'NR==1{print $3,$4}'|grep -o "[0-9]"|tr -d "\n") -ge $(echo $Openssl_Vsion|grep -o "[0-9]"|tr -d "\n") ]];then
echo "当前版本不需要升级" && exit
fi
#判断是否存在软件包,不存在则下载
if [ ! -f $Download_url/${Openssl_Vsion}.$Suffix ];then
[ -d $Download_url ] || mkdir -pv $Download_url
wget -P $Download_url $Grt_url --no-check-certificate
fi
}
function make_pkg() {
[ ! -d $Install_Url ] && mkdir -pv $Install_Url
[ -d $Install_Url/$Openssl_Vsion ] || tar -xvf $Download_url/$Openssl_Vsion.$Suffix -C $Install_Url
#重新编译
cd $nginx_url || exit
sh configure $Make_option --with-openssl=$Install_Url/$Openssl_Vsion
make -j $(lscpu|awk '/^CPU\(s\)/{print $3}') && make install
sleep 10
[ $? -eq 0 ] || exit
#关闭nginx 进程
nginx -s quit
#启动nginx
nginx && echo "升级成功,当前版本为:$(nginx -V |& grep -i "openssl"|awk 'NR==1{print $3,$4}')"
}
check
make_pkg