500 SSL协商失败

时间:2014-10-25 15:27:57

标签: perl ssl windows-xp

我的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中的那些是路径中唯一的。

任何关于可能已经改变以阻止上述工作的提示都会感激不尽!

1 个答案:

答案 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)中看到。所以我想原因可能至少是以下之一:

  • 您使用的是不支持TLS1.0的openssl版本。您提供版本号0.9.8.1,但这种版本从未存在过。你的意思是0.9.8l看起来相似(并支持TLS1.0)或者你的意思是完全不同。
  • 他们不仅从同行中删除了SSL 3.0,而且还使密码变得扁平化,因此它现在需要您的旧OpenSSL尚不支持的密码。
  • 或者他们不仅要求TLS 1.0+而且要求TLS 1.1+。但是,自Ope​​nSSL版本1.0.1以来,仅包含对TLS1.1的支持。