CentOS 7 编译安装 OpenSSL 3_升级OpenSSL

By | 最新修改:2025-04-13

前言

本文的主要内容是讲述 如何在 CentOS 7 操作系统上通过源代码方式编译安装 OpenSSL 的最新版本

CentOS 7 默认的 OpenSSL 版本过低会导致一些应用程序安装失败或者无法使用,因此需要升级 OpenSSL 到指定版本,可能是 1.1+ 或者是 3.1+。

OpenSSl


系统软件源的 OpenSSL 版本

yum install -y openssl
openssl version
[root@host ~]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

当前操作系统版本是 CentOS 7.9.2009。

而 OpenSSL 官方最新版本是 3.4+,有升级需求的人请往后看。


更改 CentOS 7 软件源

由于 CentOS 7 的官方软件源已经无法使用,于是这里必须更改软件源:

cat>/tmp/installer.sh<<EOF
cd /etc/yum.repos.d
sed -i "s@mirrorlist=http://mirrorlist.centos.org@## mirrorlist=http://mirrorlist.centos.org@g" *.repo
sed -i "s@#baseurl=http://mirror.centos.org@baseurl=https://mirrors.aliyun.com@g" *.repo
yum makecache
yum update -y
EOF
bash /tmp/installer.sh

安装 GCC-11

由于 CentOS 7 通过软件源安装的 GCC 版本过低,于是在这里升级 GCC 的版本。

cat>/tmp/installer.sh<<EOF
yum update -y
echo "+++++++++++++++++++++++++++++++++安装 GCC 11:"
yum install -y centos-release-scl
cd /etc/yum.repos.d
sed -i "s@mirrorlist=@# mirrorlist=@g" CentOS-SCLo-scl.repo
sed -i "s@mirrorlist=@# mirrorlist=@g" CentOS-SCLo-scl-rh.repo
sed -i "s@# baseurl=http://mirror.centos.org@baseurl=https://mirrors.aliyun.com@g" CentOS-SCLo-scl.repo
sed -i "s@#baseurl=http://mirror.centos.org@baseurl=https://mirrors.aliyun.com@g" CentOS-SCLo-scl-rh.repo
yum install -y devtoolset-11
echo "source /opt/rh/devtoolset-11/enable" >>/etc/bashrc

source /etc/bashrc
ln -vsf /opt/rh/devtoolset-11/root/bin/* /usr/bin/

/usr/bin/gcc --version | grep "gcc (GCC) 11."
EOF
bash /tmp/installer.sh

安装依赖

cat>/tmp/installer.sh<<EOF
yum groupinstall -y "Development Tools"
yum install -y wget gcc make zlib-devel perl perl-IPC-Cmd perl-Test-Simple perl-CPAN
EOF
bash /tmp/installer.sh

下载 OpenSSL 源码

可到 OpenSSL 的官方网站获取最新的源码:https://openssl-library.org/source/index.html

或者,到 GitHub 的相关发行版下载页面获得源码:https://github.com/openssl/openssl/releases/

以上两个渠道获得的是同样的 URL。

如果因网络问题而下载不到源码,解决方案可参考站内文章:如何在境内加速 GitHub 资源的下载以及克隆

# 本文的所有脚本要求在同一个终端实例下完成
export OPENSSL_VER=3.4.1
cat>/tmp/installer.sh<<EOF
cd /tmp
wget --continue https://github.com/openssl/openssl/releases/download/openssl-\${OPENSSL_VER}/openssl-\${OPENSSL_VER}.tar.gz
EOF
bash /tmp/installer.sh

解压源码包

cat>/tmp/installer.sh<<EOF
cd /tmp
if [ -d "openssl-\${OPENSSL_VER}" ]; then
    rm -rf openssl-\${OPENSSL_VER}/
fi
tar zxf openssl-\${OPENSSL_VER}.tar.gz
if [ \$? -gt 0 ]; then
    echo "OpenSSL 源码包解压失败!"
    exit
else
    echo "OpenSSL 源码包解压成功!"
fi
EOF
bash /tmp/installer.sh

处理编译条件

cat>/tmp/installer.sh<<EOF
cd /tmp
cd openssl-\${OPENSSL_VER}/
## ./config --prefix=/usr/local/openssl --openssldir=/etc/ssl shared zlib
./config --prefix=/usr/local/openssl --openssldir=/etc/ssl shared zlib \
enable-ssl3 enable-ssl3-method enable-mdc2 enable-md2
if [ \$? -gt 0 ]; then
    echo "条件配置错误!"
    exit
else
    echo "条件配置成功!"
fi
EOF
bash /tmp/installer.sh

开始编译和安装

cat>/tmp/installer.sh<<EOF
cd /tmp
cd openssl-\${OPENSSL_VER}/

make depend
if [ \$? -gt 0 ]; then
    echo "处理依赖失败!"
    exit
else
    echo "处理依赖成功!"
    sleep 5
fi
make -j2
if [ \$? -gt 0 ]; then
    echo "OpenSSL 编译失败!"
    exit
else
    echo "OpenSSL 编译成功!"
    sleep 5
fi
make install
if [ \$? -gt 0 ]; then
    echo "OpenSSL 安装失败!"
    exit
else
    echo "OpenSSL \${OPENSSL_VER} 安装成功!"
    echo "删除 OpenSSL 源码包和目录"
    sleep 5
    rm -rfv /tmp/openssl-\${OPENSSL_VER}*
fi
EOF
bash /tmp/installer.sh

添加系统变量

cat>/tmp/installer.sh<<EOF
echo 'export LD_LIBRARY_PATH="/usr/local/openssl/lib64:\${LD_LIBRARY_PATH}"' >> /etc/profile
source /etc/profile
echo 'export PATH="\${PATH}:/usr/local/openssl/bin"' >> /etc/bashrc
source /etc/bashrc
EOF
bash /tmp/installer.sh

链接动态库

cat>/tmp/installer.sh<<EOF
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl/  /usr/include/openssl

echo "/usr/local/openssl/lib64" >> /etc/ld.so.conf
ldconfig -v | grep -i libssl
EOF
bash /tmp/installer.sh

检验安装的 OpenSSL

ldconfig -v | grep -i "libssl"
ldconfig -v | grep -i "libcrypto"

如果是类似于以下执行结果,那么表示 OpenSSL 3.4+ 安装成功:

libssl.so.3 -> libssl.so.3
libssl3.so -> libssl3.so
libssl.so.10 -> libssl.so.1.0.2k

# 以及
libcrypto.so.3 -> libcrypto.so.3
libcrypto.so.10 -> libcrypto.so.1.0.2k

查看当前 OpenSSL 版本

openssl version

命令执行结果:

OpenSSL 3.4.1 11 Feb 2025 (Library: OpenSSL 3.4.1 11 Feb 2025)

总结

OpenSSL 是 Web 时代不可或缺的基本组件,是现代密码学技术的重要组成部分。无论是 SSL/TLS 的大众普及,还是它支持的多种加解密算法,都是现代 IT 工业的基石。

在 HTTPS 和其他 Sockets 通信的领域往往需要 OpenSSL 来进行加密传输、完整性保证,和防止窃听等等工作。为避免版本过于老旧所引发的各种问题,包括程序代码的漏洞以及对一些版本比较新的软件对新版本 OpenSSL 的需求等等,所以要更新为最新版本以适应需求。

由于 CentOS 7 上面的 OpenSSL 版本太老,可能会不满足当前一些最新应用程序的要求,因此在编译安装 LEMP 架构的软件之前升级它。


程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com