如何更新 OpenSSL 库

如何更新 OpenSSL 库

我正在使用 Debian(Stretch)。这里openssl version返回:

开放式SSL1.1.0f 2017 年 5 月 25 日(图书馆:OpenSSL 1.1.0-pre6-dev xx xxx xxxx)

  1. 如何更新用于 OpenSSL 的“库”(1.1.0-pre6-dev)到最新版本apt-get install openssl似乎没有帮助?

  2. 在不同的服务器上,openssl version返回“OpenSSL 1.1.0g 2 Nov 2017 (Library: OpenSSL 1.1.0f 25 May 2017)”:使用的版本库与安装的包不同怎么可能?

更新1

apt-cache policy openssl libssl1.1输出是:

开放式SSL:

Installed: 1.1.0f-3+deb9u1
Candidate: 1.1.0f-3+deb9u1

Version table:
1.1.0f-3+deb9u1 500
500 http://security.debian.org/debian-security stretch/updates/main amd64 Packages
100 /var/lib/dpkg/status

1.1.0f-3 500
500 http://debian.mirrors.ovh.net/debian stretch/main amd64 Packages

libssl1.1:

Installed: 1.1.0f-5

Candidate: 1.1.0f-5

Version table:

1.1.0f-5 100
100 /var/lib/dpkg/status

1.1.0f-3+deb9u1 500
500 http://security.debian.org/debian-security stretch/updates/main amd64 
Packages

1.1.0f-3 500
500 http://debian.mirrors.ovh.net/debian stretch/main amd64 Packages

更新2

似乎安装了两个版本的 openssl:

usr/local/ssl/bin/openssl version返回 OpenSSL 1.0.2h 2016 年 5 月 3 日

usr/bin/openssl version返回 OpenSSL 1.1.0f 2017 年 5 月 25 日(库:OpenSSL 1.1.0-pre6-dev xx XXX xxxx)

which openssl返回 /usr/bin/openssl

ldd $(which openssl)回报

linux-vdso.so.1 (0x00007fff3b074000)
libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007f4ec0de0000)
libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007f4ec095b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4ec0757000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4ec053a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4ec019b000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f4ec12f9000)

答案1

首先,您应该删除本地安装的库和二进制文件(libcryptolibsslopenssl)。这将确保您使用打包版本,即接受安全支持的版本。

为了得到你现在的样子真的后,IENginx 具有 HTTP2 和 TLS,我强烈建议您使用向后移植的包而不是自己构建;该版本具有您正在寻找的功能。为此,请运行(以 root 身份)

echo deb http://http.debian.net/debian stretch-backports main > /etc/apt/sources.list.d/stretch-backports.list
apt update
apt install -t stretch-backports nginx

答案2

Debian 拉伸是当前的稳定版本(截至 2017 年 11 月)。这保安队将安全修复程序向后移植到已发布的代码版本,因此虽然您不会获得新功能,但您可以合理地确定您的 SSL 库是最新的。

已安装或可能安装哪些相关软件包

dpkg -l '*openssl*'

存储库中提供了哪些版本的已安装软件包

dpkg -l '*openssl*' | awk '/^i/{print $2}' | xargs apt-show-versions -a

确保一切都是最新的

apt-get update
apt-get upgrade

对于任何给定的包,你可以通过阅读 中的 Changes 文件来查看已应用了哪些补丁/usr/share/doc/{package_name}/changelog.Debian.gz。例如,

zless /usr/share/doc/openssl/changelog.Debian.gz

答案3

看起来你正在使用一些 Linux 发行版,这意味着你的软件包更新取决于你的发行版维护者,只有当所述维护者将新版本推送到你的发行版存储库时,你才会获得新版本的软件包(它也可能涉及升级到新版本)您的发行版的版本)。

当然你可以遵循例如手动(如果您使用的是 Ubuntu/Debian/Mint)构建新版本的 OpenSSL,然后使用 dpkg 来安装它,但这可能会导致可怕的后果,例如您安装的应用程序将停止使用 SSL 连接或停止工作共。

如果您确实需要一个新版本的 OpenSSL 来使用,您可以从源代码编译它并安装到 /usr/local ,这样它就不会干扰系统范围的软件包。这通常就像跑步一样简单

./configure && make && make install

但如今考虑到 CMake 和其他构建链的存在,这并不总是那么简单。无论如何,许多 Linux 应用程序都附带了如何构建它们的手册。

相关内容