我的Windows XP Pro系统出现了一个新问题,下面的Perl代码证明了这一点(当然,这是一个来自更大程序的非常简单的例子)。
它曾经工作到几天前,我拉着我的头发试图找出系统上可能发生的变化以阻止它工作,我希望有人在这里可能是能够给我一些线索。 (它在我的Windows 8.1系统上仍能正常工作。)
问题是下面的代码(现在)失败了" 500 SSL协商失败"。
use strict;
use warnings;
use HTTP::Request;
use LWP::UserAgent;
$ENV{HTTPS_DEBUG} = 1;
my $url = "https://secure.quksdns4.net:2087/";
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new (GET => $url);
my $res = $ua->request($req);
my $sts = $res->code;
my $hdr = $res->headers_as_string;
my $txt = $res->content;
print "\n".$sts."\n\n".$hdr."\n";
print $txt if ($sts == 500);
exit;
输出结果为:
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:error in SSLv2/v3 read server hello A
SSL_connect:before/connect initialization
SSL_connect:SSLv3 write client hello A
SSL3 alert read:fatal:handshake failure
SSL_connect:failed in SSLv3 read server hello A
SSL_connect:before/connect initialization
SSL_connect:SSLv2 write client hello A
SSL_connect:error in SSLv2 read server hello A
500
Content-Type: text/plain
Client-Date: Sat, 25 Oct 2014 14:52:43 GMT
Client-Warning: Internal response
500 SSL negotiation failed:
但奇怪的是,如果删除了端口号(:2087),它可以工作(尽管不是很有用!)。
Active Perl v5.8.8(多年来我没有改变),ssleay32& libeay32 dlls是0.9.8.1(多年来也没有变化),虽然系统中有一些,但C:\ Perl \ bin中的那些是路径中唯一的。
任何关于可能已经改变以阻止上述工作的提示都会感激不尽!
答案 0 :(得分:3)
简而言之:我认为对等体刚刚因为POODLE attack禁用了SSL 3.0(至少在端口2087上),并且因为您仍然在不受支持的操作系统上使用非常旧的软件,您仍然尝试使用SSL 3.0进行连接
编辑:看起来Crypt :: SSLeay的版本0.57(此时LWP需要)使用已经SSLv23握手,理论上它应该与TLS 1.x兼容。这也可以在调试输出(SSLv2/v3 write client hello
)中看到。所以我想原因可能至少是以下之一: