在 CentOS 7 Linux 平台上编译 OpenSSL 3.0.0

        在 2021 年 9 月 7 日,OpenSSL 3.0.0 正式发布了。本文介绍一下在 CentOS 7 平台上编译 OpenSSL 3.0.0 源码的过程。首先检查一下操作系统和编译相关软件(包括Perl、GCC)的版本信息,检查结果如下图:

       从图中可知当前使用的操作系统是 CentOS 7.9,已经安装了 GCC v4.8.5、Perl v5.16.3。OpenSSL 3.0.0 的下载地址是 https://www.openssl.org/source/openssl-3.0.0.tar.gz ,如果使用 wget 命令下载 OpenSSL 3.0.0 会报错,错误提示信息如下:
ERROR: cannot verify www.openssl.org's certificate, issued by '/C=US/O=Let's Encrypt/CN=R3': Issued certificate has expired
        这个错误涉及到 OpenSSL 官方站点使用的 Let's Encrypt CA 证书,1.0.2 版本的 OpenSSL 将在验证网站证书时报错,而当前 CentOS 7.9中默认包含的 OpenSSL 版本是 1.0.2k,所以会出错。对于该问题在 OpenSSL 官方的 Blog 上有解释,其链接为:Old Let’s Encrypt Root Certificate Expiration and OpenSSL 1.0.2 - OpenSSL Blog 。可以通过加上命令参数 --no-check-certificate 来绕过这个问题,即使用命令:
wget https://www.openssl.org/source/openssl-3.0.0.tar.gz --no-check-certificate
        也可以不用 wget,而使用 curl 命令下载。执行如下命令:
curl https://www.openssl.org/source/openssl-3.0.0.tar.gz -O --progress
        下载文件后,使用命令解压缩:
tar -xvf openssl-3.0.0.tar.gz
        在 OpenSSL 3.0.0 文件包中,包含以下关于在 Linux 平台上编译源码的说明文件:INSTALL.md,NOTES-PERL.md,NOTES-UNIX.md 。其中指出除了用到 C 语言编译器之外,还要用到 Perl 解释器。在 NOTES-PERL.md 指出编译时需要用到 Perl 的 Text::Template 模块。于是按照以下步骤操作:
       首先为 Perl 解释器安装 CPAN 模块,执行以下命令:
yum -y install perl-CPAN
        CPAN安装完成之后,执行以下命令安装 Text::Template 模块:
cpan -i Text::Template

        在安装过程中,会有一些询问的选项,需要用户手动输入回答,如下图:

        接下来如果执行 ./Configure 命令会报错,因为还缺少 IPC::Cmd 模块。这是 OpenSSL 3.0.0 文档中未明确提示的!执行以下命令进行安装:
cpan -i IPC::Cmd 

        这样就完成了准备工作,可以正式开始编译 OpenSSL 3.0.0 的源码了。可使用“ --prefix= ”指定头文件和库文件的存放路径,使用“--openssldir=”指定证书等文件存放的路径,这里使用的命令是:
./Configure --prefix=/usr/local/openssl-3.0.0 --openssldir=/usr/local/openssl-3.0.0
        命令执行完成后,显示设置成功,如下图:

        依次执行以下命令:
make
make test
        绝大部分测试项能够通过,少数测试项被跳过。测试完成后显示如下:

         执行以下命令执行安装:
make install
       这里 OpenSSL 3.0.0 版的文件将被安装到 /usr/local/openssl-3.0.0 路径下,包含的文件及其分布如下:

openssl-3.0.0
              |
              | ---- bin
              |          | ------ c_rehash   (Perl 脚本文件)
              |          | ------ openssl     (可执行文件)
              |
              | ---- include
              |            | ---- openssl
              |                        | ---- aes.h,  comp.h,  das.h,  kdferr.h, pkcs12.h ...
              |
              | ---- misc
              |           | ---- CA.pl       (Perl 脚本文件)
              |           | ---- tsget       (到文件 tsget.pl 的符号链接)
              |           | ---- tsget.pl    (Perl 脚本文件)
              |
              | ---- share
              |           | ---- doc
              |           |           | ---- openssl
              |           |                        | ---- html
              |           |                                    | ---- man1
              |           |                                    |            | ---- CA.pl.html,  openssl-gendsa.html ...
              |           |                                    |
              |           |                                    | ---- man3
              |           |                                    |            | ---- ADMISSIONS.html  ...
              |           |                                    |
              |           |                                    | ---- man5
              |           |                                    |            | ---- config.html,  fips_config.html, x509v3_config.html
              |           |                                    |
              |           |                                    | ---- man7
              |           |                                                 | ---- bio.html,  crypto.html  ...
              |           | 
              |           | ---- man
              |                       | --- man1
              |                       |          | ---- asn1parse.lossl, ca.lossl, ca.pl.lossl, ciphers.lossl ...
              |                       |
              |                       | --- man3
              |                       |          | ---- ACCESS_DESCRIPTION_free.30ssl ...
              |                       |
              |                       | --- man5
              |                       |          | ---- config.5ossl, fips_config.5ossl, x509v3_config.5ossl
              |                       |
              |                       | --- man7
              |                                  | ---- bio.7ossl, crypto.7ossl, ct.7ossl, des_modes.7ossl ...
              |
              | ---- certs (空目录,未包含文件)
              |
              | ---- lib64
              |           | ---- engines-3
              |           |             | ---- capi.so, loader_attic.so, padlock.so
              |           |
              |           | ---- libcrypto.so    (到文件 libcrypto.so.3 的符号链接)
              |           | ---- libssl.a
              |           | ---- libssl.so.3
              |           | ---- pkgconfig
              |           |               | ---- libcrypto.pc,  libssl.pc,  openssl.pc
              |           | 
              |           | ---- libcrypto.a
              |           | ---- libcrypto.so.3
              |           | ---- libssl.so    (到文件 libssl.so.3 的符号链接)
              |           | ---- ossl-modules
              |                            | ---- legacy.so
              |
              | ---- private (空目录,未包含文件)
              |
              | ---- ct_log_list.cnf         (ASCII 文本文件)
              | ---- ct_log_list.cnf.dist   (ASCII 文本文件)
              | ---- openssl.cnf.dist      (ASCII 文本文件)
              | ---- openssl.cnf            (ASCII 文本文件)

       上面显示的文件分布是以字符形式呈现的,也可以直接参看下图:

        依次执行以下命令:
cd /usr/local/openssl-3.0.0/bin
export LD_LIBRARY_PATH=/usr/local/openssl-3.0.0/lib64:$LD_LIBRARY_PATH
./openssl version
        可以看到显示的 OpenSSL 可执行文件版本是 2021 年 9 月 7 日发布的 3.0.0:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值