LWP拒绝通过HTTPS连接

时间:2013-08-15 10:02:45

标签: perl https debian lwp

我使用Perl v5.14.2和libwww-perl v6.04-1在Debian上运行以下Perl代码段

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new("GET", "https://google.com/");
my $rep = $ua->request($req);
print $rep->status_line;

这会立即返回“500无法连接到google.com:443”。我尝试过使用LWP::Simple, Net::SSLeay, Crypt::SSLeay等,但没有成功。

奇怪的是,在运行完全相同的Perl和LWP版本的另一个Debian系统上执行相同的代码。

所以我想,底层系统有一些错误,但其他应用程序 - 比如任何浏览器的cURL - 都运行良好。

此外,openssl s_client -connect google.com:443会在两个系统上返回Verify return code: 20 (unable to get local issuer certificate)

有没有人遇到过这种现象并有解决方案?

3 个答案:

答案 0 :(得分:7)

而不是:

$ua = LWP::UserAgent->new;

尝试使用它:

$ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });

答案 1 :(得分:3)

其他人与LWP 500争夺战的错误:

某些LWP 500错误显然是由另一种类型的SSL问题引起的(使用verify_hostname设置无法解决)。相反,LWP可能正在与HTTPS服务器通信,但响应不是LWP所期望的。就我而言,解决方案是通过以下方式强制使用SSLv3:

my %ssl_options = (SSL_version => 'SSLv3');
$ua = LWP::UserAgent->new(ssl_opts => \%ssl_options), 

此外,对于任何想要弄清楚你会得到什么样的500错误的人,请输出以及错误:

print $response->as_string;

对于我的问题(通过设置SSLv3解决),我的$ response-> as_string输出包括:

" SSL例程:SSL23_GET_SERVER_HELLO:sslv3警告意外消息LWP"

我还要说我的代码在早期版本的Ubuntu上运行了好几年。这个问题只出现在我升级Ubuntu之后。我得出的结论是,LWP的新版本可能有多种方式与旧版本不同,所以开发人员要小心!

祝你好运解决你的LWP问题!

答案 2 :(得分:1)

我在带有Strawberry Perl的Windows Server 2003上遇到此问题。错误500是IO::Socket::IP的问题。

执行模块重新安装(cpan,强制安装IO::Socket::IP)解决了问题。