我已将服务器上的 openssl 版本升级到最新版本的 openssl,但反向代理服务器正在使用的库指向。
strings /usr/lib64/libssl.so.10 | grep "^OpenSSL "
OpenSSL 1.0.1e-fips 11 Feb 2013
当我输入命令时
openssl 版本
表明
[root@newreverseproxy openssl-1.0.2]# openssl version
OpenSSL 1.0.2 22 Jan 2015
我需要我的反向代理服务器 nginx 使用最新版本的 OpenSSL,如果有人能帮助我我将不胜感激。
答案1
“问题”在于您的 ngnix 链接到了 libssl 的特定版本 (libssl.so.10)...您新编译的 libssl 具有不同的版本。运行
ldd `which openssl`
查看它是哪个版本...
为了让 ngnix 使用新版本,您也libssl
必须重新编译。ngnix
另一个选择是编译openssl-1.0.1l.tar.gz
,这是该软件 1.0.1 系列的最新版本。结果libssl
将与 1.0.1e 兼容,并可由您现有的ngnix
二进制文件轻松使用。
如果您要用较新版本替换 libssl,请注意这是一个相当“冒险”的事情,因为许多应用程序都使用 libssl,所以最好确保它能正常工作,否则许多程序可能无法启动。
用 替换 libssl 的一个好方法ngnix
是将新库安装libssl
到备用目录中,然后ngnix
从指向新目录的环境变量开始。只需确保新编译的库的调用方式与运行LD_LIBRARY_PATH
时找到的库完全相同即可ldd
ngnix
export LD_LIBRARY_PATH=/usr/local/new-libssl/lib
ngnix -whatever-options-you-want
答案2
除了 Tobi 关于 openssl 版本的建议之外,您可能没有将库安装到正确的位置。例如,如果您只运行“./configure; make; make install”,它将默认安装到 /usr/local/lib。即使您正确设置了前缀,您仍可能会安装到 /usr/lib/ 而不是 /usr/lib64,并且 ldconfig 可能未正确设置
但是,您的发行版几乎肯定有更新的库可用,这些库不需要编译。现在手动编译 openssl 或多或少意味着您从现在开始必须手动编译它,所以这实际上是最后的手段。这里无意冒犯,但如果您在使用这种方法时遇到问题,那么这不是正确的方法,至少在您关心的服务器上不是。
如果您运行的是 RedHat、CentOS、Fedora 或任何其他使用 .rpm 包的发行版,请尝试运行“sudo yum update”。如果您运行的是 debian、ubuntu、mint 或任何其他使用 .deb 包的发行版,请尝试运行“sudo apt-get update; sudo apt-get dist-upgrade”。如果您需要更多帮助,请尝试在 Google 上搜索如何更新您的发行版 - 有很多人发布关于如何为 GHOST 或 Heartbleed 或 poodle 升级各种 Linux 发行版的文章,因此其中一个会有您可以使用的说明。