PERL_LWP_SSL_VERIFY_HOSTNAME设置为0无效

时间:2013-07-19 22:59:22

标签: perl ssl vmware 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,版本14,subversion 2(v5.14.2)

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

LWP版本:6.04

$ perl -MCrypt :: SSLeay -e'print“Crypt :: SSLeay Version:$ Crypt :: SSLeay :: VERSION \ n”'

地穴:: 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,版本14,subversion 2(v5.14.2)

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

LWP版本:6.04

$ perl -MCrypt :: SSLeay -e'print“Crypt :: SSLeay Version:$ Crypt :: SSLeay :: VERSION \ n”'

地穴:: SSLeay版本:0.64

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

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

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

更新1

看起来这个问题与Ubuntu版本无关,但是当我做'apt-get upgrade'时我得到的新软件包,在12.10框上我没有这样做,而且它正在运行。然而在13.04我最终做了所有的更新。现在,因为我得到超过80次更新,我仍然没有缩小到图书馆,这是搞乱它。当我安装一个新的13.04图像时,它工作正常。

**更新2 **

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

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

它还可以取决于Net :: HTTPS的版本,以及是否安装了IO :: Socket :: SSL。 Net :: HTTPS将优先于Net :: SSL(使用Crypt :: SSL)的IO :: Socket :: SSL(使用Net :: SSLeay)。更新版本的Net :: HTTPS改进了它与IO :: Socket :: SSL的协同工作方式。

答案 2 :(得分:2)

您可以尝试添加Global ENV变量或通过Apache配置设置(如果您正在使用Apache)

SetEnv PERL_LWP_SSL_VERIFY_HOSTNAME 0

$ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;

答案 3 :(得分:1)

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

$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';

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

答案 4 :(得分:-1)

PERL_LWP_SSL_VERIFY_HOSTNAME env var设置为0将禁用重要的安全检查

将相关模块升级到最新版本(截至2014年11月)为我解决了这个问题。

(在我的情况下,我更新了这些发行版:Crypt-SSLeay-0.72,Net-HTTP-6.07,libwww-perl-6.08 LWP-Protocol-https-6.06。)