前言
本文的主要内容是讲述 如何在 CentOS 7 操作系统上通过源代码方式编译安装 OpenSSL 的最新版本。
CentOS 7 默认的 OpenSSL 版本过低会导致一些应用程序安装失败或者无法使用,因此需要升级 OpenSSL 到指定版本,可能是 1.1+ 或者是 3.1+。
系统软件源的 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