Perl LWP::UserAgent忽略SSL\u验证\u对等

Perl LWP::UserAgent忽略SSL\u验证\u对等,perl,ssl,https,Perl,Ssl,Https,我在RHEL 7上使用Perl 5.16.3,我有一个相当一般的请求: #!/usr/bin/env perl use strict; use warnings; use LWP::UserAgent() ; use URI::Escape ; use IO::Socket::SSL ; my $PhoneNo = "<Some phone number>" ; my $SomeMsg = "Some message" ; my $BaseURL = 'https://api.c

我在RHEL 7上使用Perl 5.16.3,我有一个相当一般的请求:

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

use LWP::UserAgent() ;
use URI::Escape ;
use IO::Socket::SSL ;

my $PhoneNo = "<Some phone number>" ;
my $SomeMsg = "Some message" ;
my $BaseURL = 'https://api.clickatell.com/http/sendmsg?user=someuser&password=somepassword' ;
my $EncSomeMsg = uri_escape($SomeMsg) ;

my $SendURL = sprintf("%s&to=%s&text=%s",$BaseURL,$PhoneNo,$EncSomeMsg) ;

my $ua = LWP::UserAgent->new(
timeout => 10,
ssl_opts => {
    verify_hostname => 1,
    SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_PEER,
},
) ;

#$ua->ssl_opts(SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_PEER) ; # Causes error 'Can't locate object method "ssl_opts" via package "LWP::UserAgent"'

my $contents = $ua->get($SendURL) ;

printf("Returned: %s\n",$contents) ;
#/usr/bin/env perl
严格使用;
使用警告;
使用LWP::UserAgent();
使用URI::Escape;
使用IO::Socket::SSL;
我的$PhoneNo=“”;
my$SomeMsg=“Some message”;
我的$BaseURLhttps://api.clickatell.com/http/sendmsg?user=someuser&password=somepassword' ;
我的$EncSomeMsg=uri\u escape($SomeMsg);
我的$SendURL=sprintf(“%s&to=%s&text=%s”、$BaseURL、$PhoneNo、$EncSomeMsg);
my$ua=LWP::UserAgent->new(
超时=>10,
ssl_opts=>{
验证_hostname=>1,
SSL\u验证\u模式=>IO::Socket::SSL::SSL\u验证\u对等,
},
) ;
#$ua->ssl_选项(ssl_验证_模式=>IO::Socket::ssl::ssl_验证_对等);#导致错误“无法通过包“LWP::UserAgent”找到对象方法“ssl_opts”
my$contents=$ua->get($SendURL);
printf(“返回:%s\n”,$contents);
但它仍然返回:

不推荐在客户端使用默认的SSL\u verify\u模式SSL\u verify\u NONE!请将SSL_verify_模式设置为SSL_verify_对等,可能需要使用SSL_ca_文件| SSL_ca_路径进行验证。如果您确实不想验证证书并保持连接对中间人攻击开放,请在应用程序中将SSL\u verify\u模式显式设置为SSL\u verify\u NONE

以下是模块的版本:

  • LWP::UserAgent:2.033
  • LWP::Protocol::https:
    (未返回版本)
  • IO::Socket::SSL:1.94
为什么它会忽略我验证对等方的请求?

根据
ssl\u opts
已在
6.00版中添加。您使用较旧/较低版本的
2.*

6.00 2011-03-08
-[…]LWP::UserAgent获得了要控制的新ssl_opts方法 这也是


根据@AnFi的建议,我运行了
yum安装“perl(LWP::UserAgent)”
(CPAN不能通过我们的防火墙获得),它说相关的包
perl-libwww-perl-6.05-2.el7.noarch
已经安装并且是最新的。查看软件包的内容时,我发现它不在系统
@INC
中,因此我在脚本中添加了以下内容:

use lib '/usr/share/perl5';

我还切换到使用
$ua->ssl\u opts
@Steffen Ulrich关于获取相关组件版本的建议还表明,没有安装
LWP::Protocol::https
,一旦安装,脚本就可以毫无怨言地正常工作。

5.16.3现在已经很旧了,可能其他模块也很旧了。请提供LWP::UserAgent、LWP::Protocol::https和IO::Socket::SSL的实际版本-请参阅如何执行此操作。@SteffenUllrich:已添加版本,返回的位置。这些版本信息很奇怪。我很确定您没有使用RHEL附带的LWP版本(应该是6.05而不是2.033),但是您的机器上的某个地方还存在其他一些旧的、已损坏的安装—另请参阅一些旧的VMWare SDK导致问题的地方。谢谢。这是有道理的。从你和@SteffenUllrich的评论来看,我似乎有一些家务事要做。