前言
主要内容
本文的主要内容是讲述 如何在 CentOS 7 操作系统上通过源代码方式编译安装 OpenSSL 的最新版本。
CentOS 7 默认的 OpenSSL 版本过低会导致一些应用程序安装失败或者无法使用,因此需要升级 OpenSSL 到指定版本,可能是 1.1+ 或者是 3.1+。
什么是 OpenSSL
OpenSSL 是一个用 C语言代码写的开源软件库包,此软件包的部分功能包括:SSL 协议库、用于加解密的二进制应用程序以及密码算法库等。
OpenSSL 的作用
应用程序可以应用 OpenSSL 软件包通过确认另一端连接者的身份进行安全通信,以避免窃听。所以它也广泛应用于互联网的 Web 服务器上。
OpenSSL 的特性
通过 OpenSSL 建立的安全信道有以下的特性:
- 数据保密性:
OpenSSL 软件库将输入的明码数据或文件用用于加密的算法和密钥转换成加密的数据或文件,然后传输到接收方,接收方用对应密钥来解密,从而得到之前的明文数据或文件。
-
数据完整性:
通过对数据的一致性校验来为数据的完整性保驾护航。
-
安全验证:
OpenSSL 提供的加密功能作为个人的特有标识,用户的密钥可以作为特定个人安全验证的标识,证明这个会话是唯一的不二的个人用户发起的。基于此特性,SSL 就是利用公开密钥的加密技术来为用户端和服务器端作为交换数据时的加密通讯协议。
服务器软件使用 OpenSSL 强大的 SSL 密码库来加密 HTTPS。又比如 OpenSSH 用来加密 SSH,它也是基于 OpenSSL 的加解密功能。
OpenSSL 的算法
密钥和证书的管理
-
OpenSSL 提供了对证书、公钥、私钥、证书请求等编解码功能。它还通过一定的函数和应用程序对各种公开密钥对和对称密钥的产生方法进行作业。
-
OpenSSL 在标准中提供了对私钥的加密保护功能,使得可以安全地进行存储和分发。
-
事实上,OpenSSL 提供的 CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。
对称加密
所谓的“对称加密”,它指的是通讯的双方使用同一密码或密钥进行加解密。
OpenSSL 一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是 RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5。
非对称加密
“非对称加密”指的是加解密的双方持有不同的密码或密钥,比如 HTTPS 的加密数据交换技术用的就是非对称加密。
HTTPS 有公钥和私钥之分,公钥在客户端(即访客)手中,私钥在服务器端,公钥通过客户端的 CA 证书进行生成。公钥加密的内容,也只有相应的私钥进行解密,反之亦然。
OpenSSL 一共实现了4种非对称加密算法,包括 DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
信息摘要
信息摘要用来计算一组数据或文件的唯一特征,通过计算,获得的是唯一的一串字符。经由计算出来的字符串,对比验证数据或文件是否修改过。此特性在文件下载方面用途很广。
OpenSSL 实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法。此外,OpenSSL 还实现了 DSS标准中规定的两种信息摘要算法 DSS 和 DSS1。
OpenSSL 在 Web 服务的加密
OpenSSL 可为 SSL(安全套接层协议)/TLS(传输层安全协传输层安全协议议) 两种密钥加密方式为 Web 服务提供加密的功能,从而实行端到端的加密和密钥对比。
SSL 现已经进化到了 SSLv2 和 SSLv3 两个版本,而 TLS 目前是 TLSv1.3,尽管 SSLv3 与 TLS 相似,但是它们之间的不同也是明显的。
用于 Web 服务的 HTTP/2 和 HTTP/3 默认用的是 TLS 进行加密和安全传输,尽管早时的 HTTPS 用的是 SSL。
以上,参考自: https://baike.baidu.com/item/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 的官方软件源已经无法使用,于是这里必须更改软件源:
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
安装 GCC-11
由于 CentOS 7 通过软件源安装的 GCC 版本过低,于是在这里升级 GCC 的版本。
yum update -y
echo "+++++++++++++++++++++++++++++++++Installing 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."
安装依赖
yum groupinstall -y "Development Tools"
yum install -y wget gcc make zlib-devel perl perl-IPC-Cmd perl-Test-Simple perl-CPAN
下载 OpenSSL 源码
可到 OpenSSL 的官方网站获取最新的源码:https://openssl-library.org/source/index.html。
或者,到 GitHub 的相关发行版下载页面获得源码:https://github.com/openssl/openssl/releases/。
以上两个渠道获得的是同样的 URL。
如果因网络问题而下载不到源码,解决方案可参考站内文章:如何在境内加速 GitHub 资源的下载以及克隆。
cd /tmp
OPENSSL_VER=3.4.0
wget --continue https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VER}/openssl-${OPENSSL_VER}.tar.gz
解压源码包
cd /tmp
if [ -d "openssl-${OPENSSL_VER}" ]; then
rm -rf openssl-${OPENSSL_VER}/
fi
tar zxf openssl-${OPENSSL_VER}.tar.gz
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
开始编译和安装
make depend
make -j2
make install
添加系统变量
echo 'export LD_LIBRARY_PATH="/usr/local/openssl/lib64:${LD_LIBRARY_PATH}"' >> /etc/profile
source /etc/profile
链接动态库
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
检验安装的 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.0 22 Oct 2024 (Library: OpenSSL 3.4.0 22 Oct 2024)
总结
OpenSSL 是 Web 时代不可或缺的基本组件,是现代密码学技术的重要组成部分。无论是 SSL/TLS 的大众普及,还是它支持的多种加解密算法,都是现代 IT 工业的基石。
由于 CentOS 7 上面的 OpenSSL 版本太老,可能会不满足当前一些最新应用程序的要求,因此在编译安装 LEMP 架构的软件之前升级它。
鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。
本文章可以转载,但是需要说明来源出处!
本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com