我正在将一个应用程序从PHP/cURL转移到Perl和LWP::UserAgent。我需要向Web服务器发送POST请求,并提供客户端证书和密钥文件。 我想复制的PHP代码是:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSLCERT, "/path/to/certificate.pem");
curl_setopt($ch, CURLOPT_SSLKEY, "/path/to/private.key");
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, "secretpassword");
这是我的Perl代码:
my $ua = LWP::UserAgent->new();
$ua->ssl_opts(
SSL_verify_mode => 0,
SSL_cert_file => '/path/to/certificate.pem',
SSL_key_file => "/path/to/private.key",
SSL_passwd_cb => sub { return "secretpassword"; }
);
这段 PHP 代码成功连接到服务器,但 Perl 代码出现以下错误:
SSL 读取错误 error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
我无法确定我漏掉了什么。
private.key
(PHP)和private.pem
(Perl)是打字错误还是移植的一部分? - amonuse Net::SSL ();
吗?那会强制 LWP 使用Net::SSL
(来自Crypt::SSLeay
)而不是IO::Socket::SSL
。 - emazep