我尝试了以下操作,但无法获取晚于以下日期的构建日期:
2012 年 8 月 21 日星期二 05:18:46 UTC
我已完成以下操作:
apt-get dist-upgrade
apt-get update
apt-get upgrade openssl
和
apt-get purge openssl
apt-get install openssl
和
apt-get purge libcrypto1.0.0
apt-get install libcrypto1.0.0
一切似乎都运行正常,但构建日期仍与上面相同。并且http://filippo.io/Heartbleed/测试仍然失败。
我知道我没有疯,因为我能够在星期三更新我的相同服务器。(除硬件外,其他所有方面都相同)。
编辑:
我比较了两台机器上的 /etc/apt/sources.list 文件,发现它们看起来完全相同。为什么一台服务器更新了,而另一台却没有更新?
编辑:
按照建议做:
apt-get purge openssl
reboot
apt-get install openssl
reboot
无济于事。
在 libssl1.0.0 上尝试了相同的命令,仍然与上面列出的版本相同。
这让我很困惑。
有什么建议么?
编辑
一旦我获得足够的街头信誉(15),我将 +1 可行的解决方法
编辑
根据建议,我运行了 apt-get 和 --reinstall --print-uris 并返回:
http://us.archive.ubuntu.com/ubuntu/pool/main/o/openssl/openssl_1.0.1-4ubuntu5.12_amd64.deb
然后重启,版本与上面列出的相同。心脏出血仍然失败。
答案1
强制重新安装包
Apt 认为软件包已安装并升级。手动验证和测试 libssl 表明情况并非如此,因此软件包数据库与已安装的文件不一致(可能文件之前已升级,但未涉及软件包管理器)。无论出于何种原因,软件包均未正确升级或重新安装。这假设已确定系统报告了已修复的版本,但仍显示为易受攻击。
首先,尝试强制重新安装受影响的软件包:
apt-get install --reinstall libssl1.0.0
如果失败,请尝试强制完全删除该软件包,而不涉及任何 Apt 的依赖管理和健全性检查:
dpkg --force-all --remove libssl1.0.0
此时,系统实际上已经“损坏”,因为缺少 libssl,并且仍然安装了许多依赖于它的软件包(这是 Apt 极力避免的,也是我们背着 Apt 的原因),因此请重新安装libssl1.0.0,从存储库重新下载最新的包:
apt-get clean && apt-get install libssl1.0.0
或者,如果您已经下载了已知良好的 deb 包,则可以使用 dpkg 来安装并强制覆盖任何现有文件:
dpkg --force-overwrite -i libssl1.0.0_1.0.1-4ubuntu5.12_amd64.deb
重新测试并检查(debsums、sha1sum)已安装的文件是否符合已知良好的配置。
答案2
如果你的apt-get 存储库不包含任何预编译1.0.1g OpenSSL版本,因此只需从官方网站下载源并进行编译即可。
下面单个命令行来编译和安装最新的 openssl 版本。
curl https://www.openssl.org/source/openssl-1.0.1g.tar.gz | tar xz && cd openssl-1.0.1g && sudo ./config && sudo make && sudo make install
通过符号链接用新的 openssl 二进制文件替换旧的 openssl 二进制文件。
sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`
你们都很好!
# openssl version should return
openssl version
OpenSSL 1.0.1g 7 Apr 2014
参见博客文章。
注意:正如博客文章中所述,此解决方法无法修复“必须使用 1.0.1g openSSL 源重新编译的 Nginx 和 Apache 服务器”。
答案3
您的 PATH 中可能有两个版本的 OpenSSL。如果您编译了自己的版本,则可能会发生这种情况。
尝试这个/usr/bin/openssl version
。
这应该是OpenSSL包版本的位置。
答案4
您需要更新 libssl1.0.0,然后重启服务器。如果不重启,它将无法工作。