在开发和测试环境中,我们为 XMLRPC 网络服务使用自签名 SSL 证书。生产使用了一个很好的第 3 方证书,并且证书验证工作得很好,没有问题。
在调用应用程序的代码中,这是一个 CGI::Application web 应用程序,我们只在开发和测试环境中跳过 SSL 证书的验证,知道它会并且应该失败......或者尝试跳过它。尽管将 $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} 设置为 0,调用仍然失败:
Error executing run mode 'myRunMode': 500 Can't connect to mydomain.com:443 (certificate verify failed)
已经尝试了一堆其他(现在可能已弃用?)env 变量,但我们似乎无法在网络应用程序中解决此错误。在命令行中,我们可以使用所有相同的代码进行一次忽略证书验证的成功调用,并且我们比较了所有正在运行的 Perl 模块的版本(两种情况下的 LWP 均为 6.15实例)。
根据使用的 SSL 后端,在线讨论指向不同的场景,因此我们尝试安装 LWP::Protocol::https,至少得到了不同的行为。我们在模块安装后就开始失败:
Error executing run mode 'myRunMode': 404 Not Found
404 似乎是一个转移注意力的问题,但遗憾的是,删除 LWP::Protocal::https 让我们回到“证书验证失败”错误,所以看起来我们可能正在做某事。
有没有人知道如何在此 CGI::Application 环境中跳过证书验证?
最佳答案
这是一个旧线程,但我仍然想分享我的解决方案。 只需在进行前沿调用之前添加以下内容:
$ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;
无需更改任何边界代码或其他内容......
关于perl - 如何让 Frontier::Client/LWP 停止验证 CGI::Application Web 应用程序中的 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264884/