Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl REST::Client:如何忽略SSL证书_Perl - Fatal编程技术网

Perl REST::Client:如何忽略SSL证书

Perl REST::Client:如何忽略SSL证书,perl,Perl,我正在使用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:

我正在使用
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证书

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

下面是curl命令:

curl -i -H "Accept:application/*+xml;version=1.5" -u "username@system:password" -X post https://something/api/sessions
这是旋度输出(错误):

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

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

问题:

那么,如何使
REST::Client
忽略SSL证书呢?或者有没有其他优雅的工作方式?我浏览了关于CPAN的
REST::Client
文档,但它没有谈到这一点


谢谢。

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

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0;

参考资料:

我发现该选项并没有完全解决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);

值得一提的是,最好在服务中部署一个合适的CA签名证书(如果可能的话),或者仅在证书是唯一的情况下,特别是信任单个证书。效果非常好。只有SSL\u VERIFY\u NONE需要封装在单引号中以防止严格的编译失败。通常,Perl中会隐式引用
=>
左侧的键。我还没有像平时那样,经历过这样严格的旅行。这就是代码示例包含
my
的原因。
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0;
# 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);