Perl 使用LWP::UserAgent的sslv3警报握手失败

Perl 使用LWP::UserAgent的sslv3警报握手失败,perl,https,handshake,lwp-useragent,sslv3,Perl,Https,Handshake,Lwp Useragent,Sslv3,我正在尝试使用LWP::UserAgent发出https请求: #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my $login_url = 'https://www.icscards.nl/abnamrogb/login/login'; my $ssl_options = { SSL_version => 'tlsv1', verify_hostname => 0 }; my $browser = L

我正在尝试使用
LWP::UserAgent
发出https请求:

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;

my $login_url = 'https://www.icscards.nl/abnamrogb/login/login';
my $ssl_options = { SSL_version => 'tlsv1', verify_hostname => 0 };
my $browser = LWP::UserAgent->new(ssl_opts => $ssl_options);
$browser->cookie_jar( {} );

my $response = $browser->get($login_url);
print $response->decoded_content;
并获取以下错误消息:

Can't connect to www.icscards.nl:443

LWP::Protocol::https::Socket: SSL connect attempt failed because of handshake problems error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure at /System/Library/Perl/Extras/5.18/LWP/Protocol/http.pm line 51.
将URL更改为,例如
https://www.google.com/
工作正常,但不是我要获取的URL

值得注意的是:使用python请求此URL时,我会遇到相同的错误

。。。在/System/Library/Perl/Extras/5.18/LWP/Protocol/http.pm第51行发出握手失败警报

看起来您正在使用MacOS和旧版本的Perl。基于此,我假设您的底层OpenSSL版本仍然是0.9.8,因为这个古老的OpenSSL版本是MacOS附带的版本。你可以打电话来证实我的假设

perl -MNet::SSLeay -E 'say Net::SSLeay::SSLeay_version(0)
如果报告版本为0.9.8,我的假设是正确的。如果此报告1.0.0我错了,但以下内容仍然适用。如果报告为1.0.1或更好,则以下解释不适用


OpenSSL 0.9.8不支持ECDHE密码,这也可以在中看到。仅此服务器需要ECDHE密码,从中可以看出。因此,客户机和服务器之间没有通用密码,这意味着TLS握手失败。

您的代码snipet可以正常工作并打印页面内容,没有任何错误。使用:macOS Sierra(darwin 16.7)、LWP::UserAgent:6.26、Mozilla::CA:20160104、IO::Socket::SSL:2.052时也出现LWP https问题,并永久切换到mojo::UserAgent。RIP lwp<代码>\o/谢谢,你完全正确,我有OpenSSL 0.9.8zg。关于如何升级它或使perl/python使用更新版本的任何提示?@JureMerhar:关于如何使用homebrew安装新的OpenSSL以及如何使用此OpenSSL创建python安装,网上有一些信息。对于Perl,您只需要使用这个新的OpenSSL来重建Net::SSLeay,而不是重建所有Perl,但是在线上也有关于此的说明。