在 CentOS 6.5 上降级 OpenSSL

在 CentOS 6.5 上降级 OpenSSL

我使用的应用程序需要 OpenSSL 0.9.8,它已经安装在我的 CentOS 上(具体来说是 0.9.8e),同时还有 1.0.1e,不幸的是,它是默认使用的。我尝试更改libssl.so.10符号链接以指向旧版本,如下所示:

[mckulpa@nuance-vm ~]$ ldd /usr/bin/openssl 
/usr/bin/openssl: /usr/lib64/libssl.so.10: no version information available (required by /usr/bin/openssl)
    linux-vdso.so.1 =>  (0x00007fff2edff000)
    libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f664457c000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x0000003927600000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x0000003926200000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000003925a00000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x0000003926e00000)
    libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x0000003927200000)
    libdl.so.2 => /lib64/libdl.so.2 (0x000000391a600000)
    libz.so.1 => /lib64/libz.so.1 (0x000000391aa00000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003919e00000)
    libcrypto.so.6 => /usr/lib64/libcrypto.so.6 (0x00007f664421d000)
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x0000003925e00000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x0000003926a00000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x000000391be00000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x000000391a200000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003919600000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x000000391b600000)
[mckulpa@nuance-vm ~]$ export LD_LIBRARY_PATH=~/libs:$LD_LIBRARY_PATH
[mckulpa@nuance-vm ~]$ echo $LD_LIBRARY_PATH 
/home/mckulpa/libs:/usr/local/Nuance/Recognizer_Service/amd64/lib:/usr/local/Nuance/OAM/x86/lib:/usr/local/Nuance/Common/x86/lib:/usr/local/Nuance/Common/amd64/lib
[mckulpa@nuance-vm ~]$ ldd /usr/bin/openssl 
/usr/bin/openssl: /home/mckulpa/libs/libssl.so.10: no version information available (required by /usr/bin/openssl)
    linux-vdso.so.1 =>  (0x00007fff91dbc000)
    libssl.so.10 => /home/mckulpa/libs/libssl.so.10 (0x00007ffe1af50000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x0000003927600000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x0000003926200000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000003925a00000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x0000003926e00000)
    libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x0000003927200000)
    libdl.so.2 => /lib64/libdl.so.2 (0x000000391a600000)
    libz.so.1 => /lib64/libz.so.1 (0x000000391aa00000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003919e00000)
    libcrypto.so.6 => /usr/lib64/libcrypto.so.6 (0x00007ffe1abd9000)
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x0000003925e00000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x0000003926a00000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x000000391be00000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x000000391a200000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003919600000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x000000391b600000)
[mckulpa@nuance-vm ~]$ ls -l libs
total 316
-rwxr-xr-x. 1 mckulpa mckulpa 321224 05-28 14:59 libssl.so.0.9.8e
lrwxrwxrwx. 1 mckulpa mckulpa     16 05-28 15:18 libssl.so.10 -> libssl.so.0.9.8e

但我收到的只是一个警告,并且仍然打印出 1.0.1e 版本:

[mckulpa@nuance-vm ~]$ openssl version
openssl: /home/mckulpa/libs/libssl.so.10: no version information available (required by openssl)
OpenSSL 1.0.1e-fips 11 Feb 2013

有什么想法可以正确地做到这一点吗?

答案1

您的应用程序需要 0.9.8 openssl - 但它是否需要 0.9.8 openssl 可执行文件,或 0.9.8 库?(它是试图运行 openssl,还是链接它?)

CentOS openssl098e 包是“通用加密和 TLS 库的兼容版本”,它将仅安装库 - 它不会安装 0.9.8 可执行文件。

针对您的应用程序运行 ldd,查看它是否链接到某个 openssl 库(libssl 和 libcrypto)。要查看您的应用程序正在尝试运行什么,您可以使用 stracestrace -fo /tmp/strace.out并查找 execv 行。

如果您的应用程序需要 openssl 可执行文件,则需要为 CentOS 6 重新编译 0.9.8 包。

如果您的应用程序需要 openssl 库,则使用 验证您是否需要 x86_64 或 i686 版本ldd application。如果它在 /lib64 中查找,则yum install yum install openssl098e.x86_64。如果它在 /lib 中查找,则yum install openssl098e.i686

答案2

从其他机器复制单个库几乎注定会失败,而且可能会以奇怪且难以诊断的方式失败。不要这样做,如果必须这样做,不要将其描述为“已安装“;这个过程肯定不构成安装。

似乎有一个openssl098eRPM,这意味着它很可能也会在 RHEL6 中。它将被打包以与主系统 OpenSSL 和平共处,并且它似乎包含绝对必要的库必须使用的是旧版本。它没有用户空间openssl工具,但如果您的应用程序需要该工具,我会感到非常惊讶。

尝试做一个yum install openssl098e

答案3

如果您想要openssl 0.9.8CentOS 6.5 上的二进制文件,那么只需从这里下载源代码:https://www.openssl.org/source/,编译并安装它(下载源文件中有说明INSTALL),它将正常工作。

不要忘记正确设置路径,以便您可以在预期的位置找到该二进制文件(/usr/bin/openssl,,/usr/local/bin/openssl等等)

相关内容