在 CentOS 7 上升级 OpenSSL 到 1.1.1

在 CentOS 7 上升级 OpenSSL 到 1.1.1,最稳妥的方式是源码编译安装。因为 CentOS 7 官方仓库的默认版本是 1.0.2,并且不会提供 1.1.1 的大版本升级。

这里有一个核心原则需要注意:不要覆盖系统自带的 OpenSSL 1.0.2。很多系统工具(如 yumssh)都依赖旧版本,强行替换可能导致系统故障。我们的目标是“新旧共存”,让需要 TLS 1.3 的新应用(如重新编译 Nginx)能找到新版即可。

? 操作步骤:源码编译安装 OpenSSL 1.1.1

1. 安装编译依赖

首先,需要安装编译所需的工具和库。

sudo yum groupinstall -y "Development Tools"
sudo yum install -y perl-IPC-Cmd perl-core wget zlib-devel

2. 下载并解压源码

进入一个临时目录,下载 OpenSSL 1.1.1 源码。这里以 1.1.1w 版本为例,你可以在 OpenSSL 官网 找到其他小版本。

# 创建工作目录
mkdir -p ~/openssl-build && cd ~/openssl-build

# 下载源码(请根据需要替换版本号)
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz

# 解压并进入目录
tar -xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w

3. 配置、编译与安装

这一步是最关键的。配置的核心是指定一个独立于系统的安装路径(如 /usr/local/openssl-1.1.1),这是实现版本共存的基础。

# 配置安装路径和编译选项
./config --prefix=/usr/local/openssl-1.1.1 \
        --openssldir=/usr/local/openssl-1.1.1/ssl \
        shared \
        zlib-dynamic

# 开始编译(-j$(nproc) 可以利用所有CPU核心加速)
make -j$(nproc)

# 运行测试(可选,但强烈建议执行,确保编译无误)
make test

# 安装到指定目录
sudo make install

⚙️ 配置系统识别新版 OpenSSL

安装完成后,新版 OpenSSL 已存在于 /usr/local/openssl-1.1.1 目录,但系统还找不到它。需要完成以下配置:

  1. 配置动态链接库 让系统能够找到新版 OpenSSL 的动态库文件(.so 文件)。

    # 创建新的配置文件
    echo '/usr/local/openssl-1.1.1/lib' | sudo tee /etc/ld.so.conf.d/openssl-1.1.1.conf
    # 更新动态链接库缓存
    sudo ldconfig
  2. 配置命令行环境(可选) 如果你希望在终端直接使用新版 openssl 命令,可以设置环境变量。建议创建一个独立的脚本,而不是直接覆盖 /usr/bin/openssl

    # 创建环境变量脚本
    sudo tee /etc/profile.d/openssl-1.1.1.sh << 'EOF'
    export PATH=/usr/local/openssl-1.1.1/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/openssl-1.1.1/lib:$LD_LIBRARY_PATH
    export PKG_CONFIG_PATH=/usr/local/openssl-1.1.1/lib/pkgconfig:$PKG_CONFIG_PATH
    EOF

    # 加载环境变量(或重新登录终端)
    source /etc/profile.d/openssl-1.1.1.sh

✅ 验证与后续使用

完成以上步骤后,进行验证:

# 检查默认命令版本(应显示新版本号 1.1.1w)
openssl version

# 检查系统原生版本(应仍为旧版本 1.0.2k)
/usr/bin/openssl version

后续提醒

  • 本次操作仅为系统安装了 OpenSSL 1.1.1 的库和命令。

  • 若要让你的 Nginx 支持 TLS 1.3,还需要使用这个新路径(--with-openssl=/usr/local/openssl-1.1.1)重新编译 Nginx,让 Nginx 在编译时链接到新的 OpenSSL 库。

  • 如果在验证时发现 openssl version 显示的版本号未变,请重新登录 SSH 会话或检查 source 命令是否已正确执行。


关键词:Linux运维

网友留言(0 条)

发表评论

验证码