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

Dmi*_*riy 1 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');
Run Code Online (Sandbox Code Playgroud)

给出错误信息:

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

SSL连接尝试失败错误:14077410:SSL例程:SSL23_GET_SERVER_HELLO:sllv3警报握手失败,位于/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
Run Code Online (Sandbox Code Playgroud)

怎么解决?

Ste*_*ich 5

Net :: SSLeay :: OPENSSL_VERSION_NUMBER()0x009081df

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

查看www.themoviedb.orgSSLLabs报告,您将看到:

此站点仅适用于支持SNI的浏览器.

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