一 概述
OpenSSL 是一个开源的安全套接字层 (SSL: Secure Socket Layer) 密码库,应用可以通过该程序完成加密的、安全的通信。在一些旧版本的 OpenSSL 中可能会暴出一些高危的安全漏洞,因此需要对系统的 OpenSSL 版本进行升级。
Notes:
在升级 OpenSSL 前需要评估好当前的应用依赖当前版本的 OpenSSL,以免在升级完毕后由于应用层的不兼容导致影响业务。
二 编译安装
本次升级使用编译安装的方式,需要提前到 https://openssl.org/source/ 中下载好对应的源码文件。
2.1 初始化编译环境
Notes:
编译环境为 CentOS 7.9.2009 Minimal 最小化安装,内核版本为 3.10.0-1160.el7.x86_64
# 1. 配置为腾讯云的 CentOS Base Yum 源
mv /etc/yum.repos.d/CentOS-Base.repo \
/etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo \
http://mirrors.cloud.tencent.com/repo/centos7_base.repo
# 2. 配置为腾讯云的 EPEL 源
mv /etc/yum.repos.d/epel.repo \
/etc/yum.repos.d/epel.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo \
http://mirrors.cloud.tencent.com/repo/centos7_base.repo
# 3. 更新缓存
yum clean all
yum makecache
# 4. 安装一些必要的依赖
yum -y install perl perl-IPC-Cmd gcc
2.3 执行编译
# 1. 获取最新的介质
curl -o openssl-3.0.13.tar.gz \
https://openssl.org/source/openssl-3.0.13.tar.gz
# 2. 解压
tar xf openssl-3.0.13.tar.gz
# 3. 配置编译参数
cd openssl-3.0.13
./config --prefix=/usr/local/openssl-3.0.13
# 注: --prefix 表示后续的安装路径,可自行定义
# 4. 执行编译
make && make install
# 注:正常情况整个过程为 10 ~ 15 min
三 更新系统 openssl
# 1. 备份旧版本的 openssl
mv /usr/bin/openssl /usr/bin/openssl.old-$(date +'%s')
# 2. 备份系统动态库文件
cp /etc/ld.so.conf /etc/ld.so.conf.old-$(date +'%s')
# 3. 创建软链接
ln -sf /usr/local/openssl-3.0.13/bin/openssl \
/usr/bin/openssl
# 4. 更新动态库
echo "/usr/local/openssl-3.0.13/lib64" >> /etc/ld.so.conf
ldconfig -v
# 5. 检查
openssl version
# 返回:
# OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
四 回退
如果有发现升级 OpenSSL 版本会对一些应用或系统有影响而不得不回退的,可以按照以下方式:
# 1. 确认当前路径是软链接
file /usr/bin/openssl
# 返回:
# /usr/bin/openssl: symbolic link to `/usr/local/openssl-3.0.13/bin/openssl'
# 2. 删除软链接
rm -f /usr/bin/openssl
# 3. 回退旧版本 openssl
mv /usr/bin/openssl.old-XXXXX /usr/bin/openssl
# 4. 回退动态库
cat /etc/ld.so.conf.old-XXXX > /etc/ld.so.conf
ldconfig -v
# 5. 检查
openssl version
# 返回:
# OpenSSL 1.0.2k-fips 26 Jan 2017