我刚刚手动将 OpenSSL 从 3.0.2 升级到 3.0.7。我知道 3.0.2 有可用的补丁,但是,与必须一遍又一遍地解释为什么版本仍然显示 3.0.2 相比,这种方式更容易回答管理层。所以没有必要对此发表评论。
安装后使用以下命令时,我最初遇到了“无法查找符号 BIO_f_zlib”错误:
config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl share zlib
将配置更改为:
config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl no-comp
这很成功。
现在我的安装已完成,我看到命令openssl version
显示:
OpenSSL 3.0.72022 年 11 月 1 日(库:OpenSSL 3.0.22022 年 3 月 15 日)
如何更正我的安装以使库版本与二进制版本匹配?
笔记:
- 我更新了
/etc/ld.so.conf.d
一个名为openssl-3.0.7.conf
with 的文件/usr/local/ssl/lib
内容。 - 我还更改了系统环境 PATH var 以包含
/usr/local/ssl/bin
. - 我执行
ldconfig -v
并source /etc/environment
更新后(没有喜悦),最后重新启动(仍然没有喜悦)。
仍然看到输出不匹配openssl version
。
我尝试了重新链接的建议libssl.so.3
,但没有成功。请参阅下面的环境信息和尾随openssl version
输出。/usr/local/ssl
根据构建中的配置选项安装了新的 OpenSSL (3.0.7) 。
# lsb_release -a 没有可用的 LSB 模块。 发行商 ID:Ubuntu 说明:Ubuntu 22.04.1 LTS 发布时间:22.04 代号: 杰米 # 查找 /usr/local -name 'libssl.so*' /usr/local/qualys/cloud-agent/lib/libssl.so.1.1 /usr/local/qualys/cloud-agent/lib/libssl.so /usr/local/ssl/lib64/libssl.so.3 /usr/local/ssl/lib64/libssl.so /usr/local/lib64/libssl.so /usr/local/lib64/libssl.so.3_3.0.2 <== 从 libssl.so.3 重命名 /usr/local/src/openssl-3.0.7/libssl.so.3 /usr/local/src/openssl-3.0.7/libssl.so #ls-l/usr/local/lib64/libssl.so* lrwxrwxrwx 1 root root 32 十一月 2 17:07 /usr/local/lib64/libssl.so ->/usr/local/ssl/lib64/libssl.so.3 -rwxr-xr-x 1 root root 809464 11 月 1 日 15:55 /usr/local/lib64/libssl.so.3_3.0.2 #ls-l/usr/local/ssl/lib64/libssl.so* lrwxrwxrwx 1 root root 11月1日21:23 /usr/local/ssl/lib64/libssl.so -> libssl.so.3 -rwxr-xr-x 1 root root 808704 11 月 1 日 21:23 /usr/local/ssl/lib64/libssl.so.3 # openssl版本-a OpenSSL 3.0.72022 年 11 月 1 日(库:OpenSSL 3.0.22022 年 3 月 15 日) 建成时间: UTC 时间 2022 年 10 月 27 日星期四 17:06:56 平台:debian-amd64 选项:bn(64,64) 编译器: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -ffile-prefix-map=/build/openssl-WsPfAX/openssl-3.0.2=。 -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG -Wdate -时间-D_FORTIFY_SOURCE = 2 OPENSSLDIR:“/ usr / lib / ssl” ENGINESDIR:“/usr/lib/x86_64-linux-gnu/engines-3” MODULESDIR:“/usr/lib/x86_64-linux-gnu/ossl-modules” 播种来源:特定于操作系统 CPUINFO: OPENSSL_ia32cap=0xfefa32035f8bffff:0x1c2ffb
我错过了什么以及如何确保使用该库的进程正在使用正确的版本库?
答案1
看来你的库没有更新。除了更新 OpenSSL 之外,您还需要更新相应的库(在本例中为 libssl)。最好的办法是:
apt update
apt upgrade
手动更新 OpenSSL 可能会破坏其某些用法 - 库不适合系统上的其他库,因此最好的方法是使用上述两个命令。您的系统可能尚未准备好支持比存储库中更新版本的 OpenSSL。
另一种方法是手动更新所有库。因此,如果您首先手动更新 OpenSSL,然后手动更新 libssl,并进一步手动更新其他库。但是,您最终可能需要将整个系统升级到较新的版本,这显然是不建议的。
答案2
您的 OpenSSL 二进制文件似乎已正确升级到版本 3.0.7,但该库仍指向旧版本 3.0.2。要解决此问题,您需要更新库路径以指向新版本。
首先,检查您的 OpenSSL 库所在的位置。根据您的 find 命令输出,它似乎位于/usr/local/ssl/lib64/libssl.so.3。
接下来,您需要更新系统的库路径以查找新版本。您已经添加了/usr/local/ssl/lib到/etc/ld.so.conf.d/openssl-3.0.7.conf,但您还需要运行LD配置使用新路径更新库缓存的命令:
sudo ldconfig
这应该更新库缓存以包含新的 OpenSSL 库路径。
最后,通过运行以下命令检查库版本是否已更新:
ldd $(which openssl)
这应该显示 openssl 使用的库路径。如果它仍然显示旧版本,请尝试使用 /usr/local/ssl/bin 中 openssl 二进制文件的路径运行 ldd。
如果库路径已更新,运行 openssl version 现在应该显示二进制文件和库的正确版本。
openssl version -a
我希望这有帮助!
答案3
这prefix=/usr/local/ssl
不是 Ubuntu 22 上默认的 OpenSSL isstalaltion 前缀。您现在已经有了新版本/usr/local/ssl
和默认版本。您可以尝试使用以下选项进行构建
export CONFARGS = --prefix=/usr --openssldir=/usr/lib/ssl --libdir=lib/x86_64-linux-gnu no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng
./Configure shared $(CONFARGS) linux-x86_64 && perl configdata.pm -d
make -j4
make install
也许创建一个.deb
包并在安装之前对其进行测试。