PERL_LWP_SSL_VERIFY_HOSTNAME 设置为 0 不起作用

use*_*110 7 perl vmware ssl cpan lwp

我在 Ubuntu 机器上连接时遇到问题,而我的另一台机器工作正常。两者之间的区别是 Ubuntu 版本和 SSLeay 版本,但我无法缩小问题的范围。

我已经执行了以下操作:a) 添加环境变量:PERL_LWP_SSL_VERIFY_HOSTNAME,值为 0 b) 添加 $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; 到 VICommon.pm 文件

以上两个都没用。我不明白为什么它在我的第二台机器上不起作用。

Ubuntu 12.10(作品)

$perl /usr/lib/vmware-vcli/apps/general/connect.pl --url https:///sdk/webService --username --password

连接成功

服务器时间:2013-07-19T22:11:31.681181Z

$ perl -v

这是为 x86_64-linux-gnu-thread-multi 构建的 perl 5, version 14, subversion 2 (v5.14.2)

$ perl -MLWP -e '打印“LWP 版本:$LWP::VERSION\n”'

LWP 版本:6.04

$ perl -MCrypt::SSLeay -e '打印“Crypt::SSLeay 版本:$Crypt::SSLeay::VERSION\n”'

Crypt::SSLeay 版本:0.58

Ubuntu 13.04(不起作用)

$perl /usr/lib/vmware-vcli/apps/general/connect.pl --url https:///sdk/webService --username --password

服务器版本在 /usr/share/perl/5.14/VMware/VICommon.pm 第 548 行的“https:///sdk/vimService.wsdl”中不可用。

$ perl -v

这是为 x86_64-linux-gnu-thread-multi 构建的 perl 5, version 14, subversion 2 (v5.14.2)

$ perl -MLWP -e '打印“LWP 版本:$LWP::VERSION\n”'

LWP 版本:6.04

$ perl -MCrypt::SSLeay -e '打印“Crypt::SSLeay 版本:$Crypt::SSLeay::VERSION\n”'

Crypt::SSLeay 版本:0.64

证书错误(两台机器相同)

lwp-request https:///sdk/webService 无法连接到:443(证书验证失败)

LWP::Protocol::https::Socket:SSL 连接尝试失败,出现未知错误错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证在 /usr/share/perl5/LWP/Protocol/http.pm 第 51 行失败。

更新 1

看起来这个问题与 Ubuntu 版本无关,但是我在 12.10 机器上执行“apt-get upgrade”时得到的新软件包我没有这样做,它正在工作。但是在 13.04 我最终完成了所有更新。现在,因为我在更新时收到了 80 多个更新,所以我仍然没有缩小到将它搞砸的库的范围。当我安装新的 13.04 映像时,它工作正常。

** 更新 2 **

看起来基本的 Ubuntu 12.10 或 13.04 工作正常。如果您获得最新更新,则它停止工作。所以还不确定是哪个库导致了这个问题。

Mic*_*eli 6

您可以通过以下方式实现更可预测的行为,而不是use Net::SSL;在代码中使用 Soon:

$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';
Run Code Online (Sandbox Code Playgroud)

现在PERL_LWP_SSL_VERIFY_HOSTNAME设置为零将按预期工作。但改变底层实现模块不应该被视为解决方案,而应该被视为一种黑客行为。


小智 5

我遇到了同样的问题 - 我通过输入“use Net::SSL;”解决了它 在请求之前。

还试图找出导致问题的库,因为它肯定是导致它的升级模块。尽管大多数站点都可以,但是一个站点的证书无法验证。


run*_*rig 2

它还可能取决于 Net::HTTPS 的版本以及是否安装 IO::Socket::SSL。Net::HTTPS 会优先选择 IO::Socket::SSL(使用 Net::SSLeay)而不是 Net::SSL(使用 Crypt::SSL)。Net::HTTPS 的最新版本改进了它与 IO::Socket::SSL 的配合方式。