6

我正在使用REST::Client并且我的代码因 SSL 错误而失败。

这是代码:

#!usr/bin/perl -w
use strict;
use REST::Client;

my $client = REST::Client->new();

$client->GET("https://something/api/sessions");
print $client->responseContent();

这是输出:

WP::Protocol::https::Socket: SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/local/share/perl/5.10.1/LWP/Protocol/http.pm line 51.

我知道问题所在。REST::Client无法忽略 SSL 证书。

curl当我不使用“-k”选项时,我得到完全相同的错误:

这是 curl 命令:

curl -i -H "Accept:application/*+xml;version=1.5" -u "username@system:password" -X post https://something/api/sessions

这是卷曲输出(错误):

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

但是,如果我在 curl 命令中添加“-k”,那么它就可以正常工作。

从 curl 的手册页,这里是“-k”的解释:

(SSL)  This  option  explicitly  allows  curl to perform "insecure" SSL connections and transfers.

问题:

那么,如何REST::Client忽略 SSL 证书?或者还有其他优雅的工作方式吗?我浏览了REST::ClientCPAN 上的文档,但它没有谈论这个。

谢谢。

4

2 回答 2

4

我通过添加以下行使其工作:

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0;

参考:https ://splash.riverbed.com/docs/DOC-1602

于 2013-06-17T07:01:40.953 回答
4

我发现该选项并没有完全解决 LWP 6.x 中的问题。对我来说,这很有效:

# setup rest client                                                                                                             
my $client = REST::Client->new();                                                                                               

# don't verify SSL certs                                                                                                        
$client->getUseragent()->ssl_opts(verify_hostname => 0);                                                                        
$client->getUseragent()->ssl_opts(SSL_verify_mode => SSL_VERIFY_NONE);
于 2016-07-14T14:50:47.093 回答