在CentOS 6.5上降级OpenSSL

我使用的应用程序需要OpenSSL 0.9.8,它已经安装在我的CentOS上1.0.8e(不幸的是默认使用)。 我试图改变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 

任何想法如何正确地做到这一点?

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

CentOS openssl098e软件包是一个“通用encryption和TLS库的兼容版本”,将只安装这些库 – 它不会安装0.9.8可执行文件。

对你的应用程序运行ldd,看它是否连接到一个openssl库(libssl和libcrypto)。 要查看应用程序试图运行的内容,可以使用strace -fo /tmp/strace.out然后查找execv行。

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

如果您的应用程序需要openssl库,那么使用ldd applicationvalidation您是否需要x86_64或i686版本。 如果正在查看/ lib64,则yum install yum install openssl098e.x86_64 。 如果它正在查看/ lib然后yum install openssl098e.i686

从其他机器复制单个库是一个几乎可以保证失败的练习,很可能是奇怪的和难以诊断的方式。 不要这样做,如果你必须这样做,不要把它描述为“ 安装 ”; 该过程绝对不构成安装。

在CentOS 6的基础知识库中似乎有一个openssl098e RPM,这意味着它很可能也在RHEL6中。 它将被打包成与主系统OpenSSL和平共处,它似乎包含了必须具有旧版本的必要库。 它没有openssl工具的用户空间,但是如果你的应用程序需要,我会感到非常惊讶。

尝试做一个yum install openssl098e

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

不要忘记正确设置path,以便哟可以在您希望的位置find二进制文件( /usr/bin/openssl/usr/local/bin/openssl等)