我有很多脚本,其中大多数都是基于WWW::Mechanize
的,这些脚本从可以通过HTTPs访问的杂项硬件中抓取数据。在升级了我的大部分perl安装及其模块之后,由于"certificate verify failed"
,所有脚本都使用了HTTPS:// broke
这是因为较新版本的LWP会对证书和dies
进行适当的检查,如果某些内容不匹配。
在我的例子中,由于环境的原因,失败的证书身份验证是意料之中的,所以我需要找到一种干净的方法来绕过这个检查。
发布于 2012-11-15 03:24:29
我在代码前面加上了:
$ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;
这导致脚本以一种干净而简单的方式绕过检查。
发布于 2015-01-10 04:48:24
@ikegami很好地解释了为什么你不想禁用SSL主机名验证,但没有直接提到如何避免它。
如果您正在与具有CA签名证书的公共系统对话,则需要将LWP指向您的发行版的根证书集合。在基于Debian的系统(Ubuntu,等等)下,它被保存在/etc/ssl/certs/
下。
BEGIN {
$ENV{HTTPS_CA_DIR} = '/etc/ssl/certs'
}
如果您使用自签名证书与自己的服务器通信,则可以在客户端上保存该证书的副本,并将脚本指向该特定文件。
BEGIN {
$ENV{HTTPS_CA_FILE} = '/path/to/my/server-certificate.crt'
}
相反,您可以在运行脚本之前在环境中设置这些设置(例如,从shell中导出它们),或者可以将这些设置直接应用于UserAgent对象。有关更多详细信息,请参阅LWP::UserAgent documentation;搜索ssl_opts
(大约在页面的一半位置)。
https://stackoverflow.com/questions/13385846
复制相似问题