如何修复Perl LWP中的SSL错误?

时间:2017-08-07 17:04:04

标签: perl ssl lwp

#!/usr/bin/perl
use strict;
use warnings;

use LWP::UserAgent;

my $ua = LWP::UserAgent->new(
    agent => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4',
    ssl_opts => { verify_hostname => 0 }
);

my $response = $ua->get('https://www.themoviedb.org');

给出错误消息:

  

无法连接到www.themoviedb.org:443

     

SSL连接尝试失败错误:14077410:SSL   例程:SSL23_GET_SERVER_HELLO:sslv3警报握手失败   /Library/Perl/5.18/LWP/Protocol/http.pm第46行。

我使用macOS Sierra

LWP->VERSION                            6.26
IO::Socket::SSL->VERSION                2.049
Net::SSLeay->VERSION                    1.72
Net::SSLeay::OPENSSL_VERSION_NUMBER()   0x009081df
LWP::UserAgent->VERSION                 6.26
LWP::Protocol::https->VERSION           6.04

如何解决?

1 个答案:

答案 0 :(得分:5)

  

Net :: SSLeay :: OPENSSL_VERSION_NUMBER()0x009081df

这是OpenSSL 0.9.8,至少7年,不支持TLS 1.1和TLS 1.2,不支持任何ECDHE密码。此外,对于旧版本的OpenSSL,IO :: Socket :: SSL中不支持SNI

查看SSLLabs report for www.themoviedb.org您会看到:

  

此网站仅适用于支持SNI的浏览器。

因此,您需要升级您的OpenSSL版本。请注意,您之后还需要重新编译Net :: SSLeay并将其链接到较新的OpenSSL版本。