![在 CentOS 6.5 上降级 OpenSSL](https://linux22.com/image/633850/%E5%9C%A8%20CentOS%206.5%20%E4%B8%8A%E9%99%8D%E7%BA%A7%20OpenSSL.png)
我使用的应用程序需要 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
从其他机器复制单个库几乎注定会失败,而且可能会以奇怪且难以诊断的方式失败。不要这样做,如果必须这样做,不要将其描述为“已安装“;这个过程肯定不构成安装。
似乎有一个openssl098e
RPM,这意味着它很可能也会在 RHEL6 中。它将被打包以与主系统 OpenSSL 和平共处,并且它似乎包含绝对必要的库必须使用的是旧版本。它没有用户空间openssl
工具,但如果您的应用程序需要该工具,我会感到非常惊讶。
尝试做一个yum install openssl098e
。
答案3
如果您想要openssl 0.9.8
CentOS 6.5 上的二进制文件,那么只需从这里下载源代码:https://www.openssl.org/source/,编译并安装它(下载源文件中有说明INSTALL
),它将正常工作。
不要忘记正确设置路径,以便您可以在预期的位置找到该二进制文件(/usr/bin/openssl
,,/usr/local/bin/openssl
等等)