linux centos 中OpenSSL升级方法详解

    xiaoxiao2021-03-26  58

    linux /centos 中OpenSSL升级方法详解

    OpenSSL升级前段时间出现天大bug了,这样导致大家都急着去升级OpenSSL来初安全了,但是很多的朋友在家linux并不知道如何去升级OpenSSL了,下面我整理了一文章大家一起参考一下。

    相关软件下载地址 Apache:http://httpd.apache.org/ Nginx:http://nginx.org/en/download.html OpenSSL:http://www.openssl.org/ openssl-poc 附件说明 PoC.py : 漏洞利用测试PoC脚本 showssl.pl:OpenSSL动态库版本检测脚本 安装OpenSSL步骤

    由于运营环境不同,以下过程仅供参考。openssl属于系统应用,被较多应用依赖,由于环境不同等因素,请先在测试环境进行充分测试。 从官方下载最新版本的opensssl库 wget https://www.openssl.org/source/openssl-1.0.1g.tar.gz 解压下载的openssl压缩包 tar -zxvf openssl-1.0.1g.tar.gz 进入解压后的openssl文件夹 cd openssl-1.0.1g 执行文件夹中的config文件,这里openssl的安装目录默认是/usr/local/ssl(由于系统环境差异路径可能不一致,下同),注意添加zlib-dynamic参数,使其编译成动态库

     代码如下 复制代码 ./config shared zlib-dynamic config完成后执行 make 命令 make make 命令执行完后再执行 make install 命令,安装openssl make install 重命名原来的openssl命令 mv /usr/bin/openssl  /usr/bin/openssl.old 重命名原来的openssl目录 mv /usr/include/openssl  /usr/include/openssl.old 将安装好的openssl 的openssl命令软连到/usr/bin/openssl ln -s /usr/local/ssl/bin/openssl  /usr/bin/openssl 将安装好的openssl 的openssl目录软连到/usr/include/openssl ln -s /usr/local/ssl/include/openssl  /usr/include/openssl 修改系统自带的openssl库文件,如/usr/local/lib64/libssl.so(根据机器环境而定) 软链到升级后的libssl.so ln -s /usr/local/ssl/lib/libssl.so /usr/local/lib64/libssl.so 执行命令查看openssl依赖库版本是否为1.0.1g: strings /usr/local/lib64/libssl.so |grep OpenSSL 在/etc/ld.so.conf文件中写入openssl库文件的搜索路径 echo "/usr/local/ssl/lib" >> /etc/ld.so.conf 使修改后的/etc/ld.so.conf生效

    ldconfig -v 查看现在openssl的版本是否是升级后的版本 openssl version 更新Webserver的 OpenSSL依赖库 如果webserver在安装编译时加载了openssl,还需对webserver进行重启或者重新编译操作。因webserver安装时分为动态编译和静态编译openssl两种方式,所以具体操作方式也不同。 判断webserver是否为动态编译ssl的两种方法

    通过ldd命令查看依赖库

    ldd查看程序依赖库,存在libssl.so则为动态编译ssl(如上图),反之为静态(如下图):

    查看编译参数 如输入以命令/usr/sbin/nginx -V,查看nginx的编译参数,参数中不存在--with-openssl则为动态编译ssl的,反之为静态:

    更新OpenSSL库 a) 如果webserver是动态编译ssl安装的,直接重启apache,nginx等相应webserver服务即可。 b) 如果webserver是静态编译ssl安装的,可参照以下方法更新: apache静态编译ssl的情况: 源码重新安装apache,使用ssl静态编译: 执行apache的configure文件时,除了业务需要的参数外,需要指定ssl为静态编译

     代码如下 复制代码 ./configure --enable-ssl=static --with-ssl=/usr/local/ssl (openssl的安装路径)

    安装apache

     代码如下 复制代码 make && make install

    恢复原有apache配置,重启服务即可 nginx静态编译ssl的情况: 源码重新安装nginx,使用ssl静态编译: 执行nginx的configure文件时,除了业务需要的参数外,需要指定ssl为静态编译,编译参数带上--with-openssl便表明为静态编译ssl

     代码如下 复制代码 ./configure  --with-http_ssl_module --with-openssl=/usr/local/ssl (openssl的安装路径)

    安装nginx

     代码如下 复制代码 make && make install

    恢复原有nginx配置,重启服务即可 如有其他使用openssl的情况,参照apache和nginx的解决方式。 测试漏洞是否存在 使用附件PoC.py根据脚本提示检测是否存在漏洞。 如: 测试https://192.168.0.1漏洞是否存在执行命令如下

     代码如下 复制代码 python PoC.py -p 443,8443 192.168.0.1

    检测动态库libssl.so版本 检测当前进程使用的libssl.so版本 执行附件showssl.pl检查脚本,无信息输出或无漏洞版本openssl输出,表示升级成功;如输出中有unknown,请业务自查libssl.so.1.0.0的版本是否是受影响的版本。 (详情见附件)

     代码如下 复制代码 #!/usr/bin/perl -w my @listInfo = `lsof |grep libssl|awk '{print $1" "$2" "$NF}'|sort -u`; foreach my $info (@listInfo) { my ($procName, $procPid, $libPath) = split(/s/, $info); next if (!defined($procName) || !defined($procPid)|| !defined($libPath)); my $version = `strings $libPath|grep -E "^OpenSSL [0-9]+.[0-9]+"`; chomp $version; if ($version =~ /s*OpenSSLs*1.0.1[a-f]{0,2}/) { print "$procName($procPid) : $libPath ($version).n"; } }

    检测系统使用的libssl.so版本 执行命令:

     代码如下 复制代码 strings /usr/local/lib64/libssl.so |grep OpenSSL

    查看openssl依赖库版本是否为1.0.1g 注:/usr/local/lib64/libssl.so 路径仅供参考,由具体机器环境决定,参考升级步骤

    转载请注明原文地址: https://ju.6miu.com/read-350058.html

    最新回复(0)