在 Ubuntu 22,04 上:将 OpenSSL 从 3.0.2 升级到 3.0.7; `openssl version` 命令仍然显示库为 3.0.2

在 Ubuntu 22,04 上:将 OpenSSL 从 3.0.2 升级到 3.0.7; `openssl version` 命令仍然显示库为 3.0.2

我刚刚手动将 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 -vsource /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包并在安装之前对其进行测试。

相关内容