在漏洞扫描的时候出现“启用TLS1.0”的安全漏洞,描述为:不被视为 PCI 数据安全标准,推荐使用TLS1.2及以上版本;
我这边服务器使用的是CentOS7,默认自带的openssl是1.0.2版本,当前的最新稳定版本是1.1.1k,支持TLS1.2和TLS1.3;

文档内容:

  --->升级 openssl 编译安装

  --->重新编译安装 Nginx 并配置测试

升级 openssl 编译安装

首先解决环境所依赖的各种软件包:

[root@kafka-test ~]# yum -y install perl perl-devel gcc gcc-c++

前往官网下载最新稳定版本:
https://www.openssl.org/source/

将下载的tgz包解压,并进行后续的编译安装

    ##查看安装包
[root@kafka-test ~]# cd /opt/
[root@kafka-test opt]# ls -l openssl-1.1.1k.tar.gz
-rw-r--r--. 1 root root 9823400 Jun 19 22:57 openssl-1.1.1k.tar.gz ##解压软件压缩包
[root@kafka-test opt]# tar -xvf openssl-1.1.1k.tar.gz
... ...
... ...
[root@kafka-test opt]# cd openssl-1.1.1k ##进行编译安装
##这里我没有指定安装的路径,使用默认,有需求请 --prefix= 指定路径
[root@kafka-test openssl-1.1.1k]# ./config
Operating system: x86_64-whatever-linux2
Configuring OpenSSL version 1.1.1k (0x101010bfL) for linux-x86_64
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile **********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm --dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** 'Troubleshooting' section in the INSTALL file first) ***
*** ***
********************************************************************** [root@kafka-test openssl-1.1.1k]# make && make install
... ...
... ...

此时查看新版本信息会报错

    ##此时的报错是缺少文件,一共两个,当处理完一个还会有另一个报错
[root@kafka-test ~]# /usr/local/bin/openssl version
/usr/local/bin/openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory [root@kafka-test ~]# /usr/local/bin/openssl version
/usr/local/bin/openssl: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory ##将两个缺少的库文件做软连接即可
[root@kafka-test ~]# ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/
[root@kafka-test ~]# ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/ ##此时再次查看新版本信息,安装完成
[root@kafka-test ~]# /usr/local/bin/openssl version
OpenSSL 1.1.1k 25 Mar 2021

确定系统默认的openssl是哪个版本,是否需要新旧替换

  这里有一个需要说明的问题:

    我在公司的服务器上安装新版的openssl之后,默认的openssl还是原来的 1.0.2k 版本,而在家测试安装的时候却直接变为新版的 1.1.1k;

    但这个命令原本用的是 /usr/bin/openssl ,新版安装后变为 /usr/local/bin/openssl ,所以默认使用直接变为了新版;

    说实话,我自己也没有深究为什么有这个情况,但是我有应对依然默认旧版得到方法,下面写下新旧替换的方法;

    ##使用 which 命令来查看执行命令实际使用的是那个路径下的文件
##情况分为两种,第一种则是直接变更为了新版,无需你再做新旧替换
##第二种则是依然使用的旧版,需要我们手动去替换命令
[root@kafka-test ~]# which openssl
/usr/local/bin/openssl ##这个是我家里测试的情况,默认命令的路径已经更改
##当你使用 openssl 命令的时候,它已经是 1.1.1k 的版本了
[root@kafka-test ~]# /usr/local/bin/openssl version
OpenSSL 1.1.1k 25 Mar 2021 ##其他的命令路径还有如下两个,其版本为旧版的 1.0.2k
##随后我又开了另一个虚拟机,其使用的是 /usr/bin/openssl 这个路径下的命令
[root@kafka-test ~]# /usr/bin/openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017 [root@kafka-test ~]# /bin/openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017

新旧版本替换

    ##查看命令所使用的路径,将旧版的命令重命名
##然后进行新版命令的软连接创建即可替换完成
[root@kafka-test ~]# which openssl
/usr/bin/openssl
[root@kafka-test ~]# cd /usr/bin/
[root@kafka-test bin]# mv openssl openssl102
[root@kafka-test bin]# ln -s /usr/local/bin/openssl openssl

至此,openssl的升级已经完成

--返回目录--


下面是应对我所遇到的漏洞修复,对Nginx的重新编译

重新编译安装 Nginx 并配置测试

升级 openssl 主要的目的是使 Nginx 可以使用更安全的TLS,以及相应的密码套件;

重新编译(或初次)安装时记得加 --with-openssl 选项来指定使用的 openssl,安装新的 openssl 时我是没有指定路径,追加选项 --with-openssl=/usr/local/

[root@kafka-test nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx \
> --group=nginx --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module \
> --with-http_sub_module --with-http_gzip_static_module --with-http_realip_module --with-stream \
> --with-openssl=/usr/local

当前情况下,执行 make 会报错

[root@kafka-test nginx-1.18.0]# make
make -f objs/Makefile
make[1]: Entering directory `/opt/nginx-1.18.0'
cd /usr/local \
&& if [ -f Makefile ]; then make clean; fi \
&& ./config --prefix=/usr/local/.openssl no-shared no-threads \
&& make \
&& make install_sw LIBDIR=lib
/bin/sh: line 2: ./config: No such file or directory
make[1]: *** [/usr/local/.openssl/include/openssl/ssl.h] Error 127
make[1]: Leaving directory `/opt/nginx-1.18.0'
make: *** [build] Error 2

原因是其找不到openssl相关的文件:make[1]: *** [/usr/local/.openssl/include/openssl/ssl.h] Error 127

这里需要修改编译的配置文件,在 nginx 解压目录下的 auto/lib/openssl/conf 中;
找相应的路径,将 .openssl 去掉,整合成相应可以找到的路径
  例如:CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
  完整的路径为/usr/local/include/openssl/ssl.h

[root@kafka-test nginx-1.18.0]# vi auto/lib/openssl/conf

    ##原版配置文件
36 have=NGX_OPENSSL . auto/have
37 have=NGX_SSL . auto/have
38
39 CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
40 CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
41 CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
42 CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
43 CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
44 CORE_LIBS="$CORE_LIBS $NGX_LIBPTHREAD" ##我们要修改
36 have=NGX_OPENSSL . auto/have
37 have=NGX_SSL . auto/have
38
39 CORE_INCS="$CORE_INCS $OPENSSL/include"
40 CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
41 CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
42 CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"
43 CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
44 CORE_LIBS="$CORE_LIBS $NGX_LIBPTHREAD"

此时完成还会出现问题,会提示你找不到 libssl.a 和 libcrypto.a

[root@kafka-test nginx-1.18.0]# make
make -f objs/Makefile
make[1]: Entering directory `/opt/nginx-1.18.0'
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I
... ...
... ...
cc: error: /usr/local/lib/libssl.a: No such file or directory
cc: error: /usr/local/lib/libcrypto.a: No such file or directory
make[1]: *** [objs/nginx] Error 1
make[1]: Leaving directory `/opt/nginx-1.18.0'
make: *** [build] Error 2

这两个文件在我们压缩包解压目录下,将 libssl.a 和 libcrypto.a 放到相应目录下

    ##我们下载的包里面有,找到我们解压的目录
[root@kafka-test ~]# ls -l /opt/openssl-1.1.1k/{libssl.a,libcrypto.a}
-rw-r--r--. 1 root root 5640890 Jun 19 23:06 /opt/openssl-1.1.1k/libcrypto.a
-rw-r--r--. 1 root root 1024544 Jun 19 23:06 /opt/openssl-1.1.1k/libssl.a ##放到上面 conf 配置文件中配置的目录下
[root@kafka-test ~]# cp -a /opt/openssl-1.1.1k/libssl.a /usr/local/lib/
[root@kafka-test ~]# cp -a /opt/openssl-1.1.1k/libcrypto.a /usr/local/lib/

处理这些之后我们在编译安装就已经正常进行了;

注意:

  重新编译nginx的配置文件都是新的,可能并不是以前相同的配置,比如nginx的版本信息是否隐藏了;

  信息都是重新编译的,这种重新编译安装nginx的方法也适用于nginx升级,而且,它是不需要停服务的;

    ##重新编译安装
[root@kafka-test ~]# cd /opt/nginx-1.18.0
[root@kafka-test nginx-1.18.0]# make clean
rm -rf Makefile objs
[root@kafka-test nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx \
> --group=nginx --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module \
> --with-http_sub_module --with-http_gzip_static_module --with-http_realip_module --with-stream \
> --with-openssl=/usr/local
... ...
... ... ##当你是重新编译安装的,结束看到的是提示,并不是报错
##初次安装是正常的打印信息
[root@kafka-test nginx-1.18.0]# make && make install
... ...
... ...
test -d '/usr/local/nginx/logs' \
|| mkdir -p '/usr/local/nginx/logs'
make[1]: Leaving directory `/opt/nginx-1.18.0'

修改 nginx.conf 配置并验证

[root@kafka-test ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/200
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.1.1k 25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx
--with-http_stub_status_module --with-http_v2_module --with-http_ssl_module
--with-http_sub_module --with-http_gzip_static_module --with-http_realip_module
--with-stream --with-openssl=/usr/local ##查看web信息
[root@kafka-test ~]# openssl s_client -connect 域名地址:443 -tls1_2
[root@kafka-test ~]# openssl s_client -connect 域名地址:443 -tls1_3

--返回目录--


升级openssl并重新编译Nginx的更多相关文章

  1. 重新编译Nginx指导手册【修复静态编译Openssl的Nginx漏洞 】(转)

    1. 概述    当前爆出了Openssl漏洞,会泄露隐私信息,涉及的机器较多,环境迥异,导致修复方案都有所不同.不少服务器使用的Nginx,是静态编译opensssl,直接将openssl编译到ng ...

  2. nginx之升级openssl及自定义nginx版本

    favicon.ico浏览器图标配置 favicon.ico 文件是浏览器收藏网址时显示的图标,当客户端使用浏览器问页面时,浏览器会自己主动发起请求获取页面的favicon.ico文件,但是当浏览器请 ...

  3. 升级openssl

    升级openssl 依赖openssl的软件,如果是静态编译openssl,那么需要重新编译软件,如果是利用openssl的so动态库,那么只需要替换一下so文件并重启软件即可 openssh也依赖o ...

  4. Windows编译Nginx源码

    Windows下的Nginx战役,人不作就不会死!就像是拿着麦当劳的优惠券去买肯德基一样,别扭啊 Nginx是一款轻量级的Web 服务器.反向代理服务器.邮件服务器等等集一大串荣誉于一身的大牌人物!他 ...

  5. 升级openssl环境至openssl-1.1.0c

    升级openssl环境至openssl-1.1.0c1.查看源版本 [root@zj ~]# openssl version -aOpenSSL 1.0.1e-fips 11 Feb 2013 2.下 ...

  6. centos 5.x 升级openssl

    今日想在centos 5.2上面安装mysql 5.5.37,在make的时候提示: Linking C shared module adt_null.so [ 65%] Built target a ...

  7. 编译Nginx支持Tcp_warppers

    Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性.TCP Wrappers 是一种 ...

  8. 手动编译 Nginx 并安装 VeryNginx

    VeryNginx 是个非常有意思且便捷的 Nginx 扩展程序.最近新开了台 VPS,便想体验一下它带来的快感. VeryNginx 有个不超过 5 行的安装方法,但作为强迫症我更喜欢使用自己编译的 ...

  9. CentOS升级OpenSSL至OpenSSL 1.1.0f版本<其中有遇到libcrypto.so的问题>

    概述: 整体步骤如下: 1.先检查版本 2.进行安装 <安装采用源码安装,然后再做相关的链接指向> 一.检查当前环境 1. 查看当前版本 openssl version 或者使用 yum ...

随机推荐

  1. [笔记] c和指针

    1.简介 2.基本概念 3.指针 计算机内存的最小单位是位(bit),每个位可以容纳值0或1,单独的位用处不大,通常许多位合成一组作为一个单位,以存储较大范围的值 每个字节包含8位,可以存储无符号值0 ...

  2. 【转载】认识SSD的SATA、mSATA 、PCIe和M.2四种主流接口

    认识SSD的SATA.mSATA .PCIe和M.2四种主流接口 2018-09-25 • 工具 • 评论关闭 认识SSD的SATA.mSATA .PCIe和M.2四种主流接口

  3. 在虚拟机中安装 Ubuntu

    https://www.cnblogs.com/huohu121/p/12250869.html 火狐python 博客园 首页 新随笔 联系 订阅 管理 随笔 - 54  文章 - 0  评论 - ...

  4. Mysql 数据库基本操作

    1.数据库设置密码 [root@db02 scripts]# mysqladmin -uroot password 123 2.使用密码登录 #1.正确的方式(不规范) [root@db02 scri ...

  5. JFlash ARM对stm32程序的读取和烧录-(转载)

    本篇文章主要是记录一下JFlash ARM 的相关使用和操作步骤,读取程序说不上破解,这只是在没有任何加密情况下对Flash的读写罢了!在我们装了JLINK驱动后再根目录下找到JFlash ARM , ...

  6. 将.netcore5.0(.net5)部署在Ubuntu的docker容器中

    环境:     宿主机:winows 10 家庭版     虚拟机管理软件:Hyper-V     虚拟机系统:Ubuntu 20.10     Docker版本:Docker CE 20.10.2 ...

  7. LINUX创建文件和目录的默认权限

    在linux中,一位用户在创建文件和目录时,对其具有的权限都是一样的,如需更改,需要chmod命令做相应的更改.为什么?其实是权限掩码起作用了. 权限掩码的作用就是规范初创文件和目录时候的权限设置,免 ...

  8. 【玩转PDF】贼稳,产品要做一个三方合同签署,我方了!

    一.前言 事情是这个样子的,小农的公司,之前有个功能需要签署来进行一系列的操作,于是我们引入了一个三方平台的签署--上上签,但是有一个比较尴尬的点就是,它不支持合同在浏览器上和附件一起预览的,我们想要 ...

  9. ffmpeg安装之linux编译安装

    转发自白狼栈:查看原文 关于ffmpeg的安装,有的人可能要折腾很久,甚至折腾一个礼拜,究其原因,基本都是编译安装惹的祸. 我们提供4种安装方式,最复杂的莫过于centos7上的编译安装. ffmpe ...

  10. [leetcode] 117. 填充同一层的兄弟节点 II

    117. 填充同一层的兄弟节点 II 与116. 填充同一层的兄弟节点完全一样,二叉树的层次遍历..这是这次不是完美二叉树了 class Solution { public void connect( ...