我正在运行一个旧的Debian服务器,每天一次通过Perl脚本获取网页.从昨天开始,脚本因"500 SSL协商失败"错误而失败.
use strict;
use LWP::UserAgent;
my $browserObj = LWP::UserAgent->new();
$response = $browserObj->get( "https://www.domain.tld" );
print $response->status_line . "\n" if( ! $response->is_success );
Run Code Online (Sandbox Code Playgroud)
就像我说的,它是一个运行旧版本的旧服务器:
我制作了服务器的快照,以便我可以尝试各种解决方案,如果失败则返回快照.这正是我在每次测试后所做的,返回到原始服务器状态.
测试1: 我尝试的第一件事是将OpenSSL更新为1.0.2d.这没有帮助,我仍然得到"SSL协商失败"错误.然后我更新了Crypt:SSLeay.这完全打破了SSL(导致服务器无法连接到任何安全服务器).
测试2:在 不更新OpenSSL的情况下更新了Crypt :: SSLeay.导致服务器无法再次连接到安全服务器.
测试3:将 OpenSSL更新为1.0.2d.更新了LWP.没有区别.仍有"500 SSL协商失败"
还有什么我可以尝试的吗?
PS:由于几个原因,我无法更新Debian本身.
我让它为 Perl 工作。正如我所怀疑的,服务器上使用 SSL 的每个程序都需要单独修补。但这是 Perl 的解决方案:
1)更新OpenSSL(至版本1.0.2d)
这是每个使用 SSL 的程序必需的步骤!在我的 Debian 系统上,我使用了此处的说明。
2) 更新网络::SSLeay
这是必要的,否则步骤 4) 将失败。
$ cpan Net::SSLeay
Run Code Online (Sandbox Code Playgroud)
3)更新Getopt::Long
同样,此步骤是必要的,否则步骤 4) 将失败。
$ cpan Getopt::Long
Run Code Online (Sandbox Code Playgroud)
4) 更新 Crypt::SSLeay
请注意,这也会更新 LWP。
$ cpan Crypt::SSLeay
Run Code Online (Sandbox Code Playgroud)