我有很多脚本,其中大多数是基于WWW :: Mechanize,从数据可以通过HTTP访问的杂项硬件。升级大部分的perl安装及其模块后,使用HTTPS://的所有脚本都因“证书验证失败”而破裂
这是因为较新版本的LWP对证书进行了适当的检查,并且如果某些不匹配,则会死亡。
在我的情况下,由于情况,预期失败的证书认证,所以我需要找到一个干净地绕过这个检查的方法。
解决方法
说我想告诉你一些东西,我不想让别人知道。我们会安排一个密码,我会用它来加密邮件,然后我会给你发信息。
如果我没有确定给我密码和加密消息的人是你吗?那么任何数量的人都可以简单地模仿你,加密将是无效的。这是直到最近的LWP的HTTPS支持的状态。
现在,LWP实际上检查谁在说话,除非你要求LWP像以前一样行事。你可以使用:
my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 },);
如果要影响脚本中的所有LWP :: UserAgent实例,而不指定该选项,则可以将以下内容添加到脚本中
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
或者您可以按如下方式启动脚本:
PERL_LWP_SSL_VERIFY_HOSTNAME=0 script.pl
最后,如果您希望LWP始终不安全,可以将以下内容添加到您的登录脚本中:
export PERL_LWP_SSL_VERIFY_HOSTNAME=0
但是,我建议上述没有。更好的选择是为您正在通信的主机提供证书。 (这相当于在Firefox中添加异常,如果你知道我的意思)。请参见documentation for $ ua-> ssl_opts。