在我的其他机器工作正常时遇到连接Ubuntu机器的问题。两者之间的区别是Ubuntu版本和SSLeay版本,但我无法缩小问题范围。
我已经做了以下事情: a)添加环境变量:PERL_LWP_SSL_VERIFY_HOSTNAME,其值为0 b)添加$ ENV {PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;到VICommon.pm文件
以上两种都不起作用。我无法弄清楚为什么它在我的第二台机器上不起作用。
$ 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
$ 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行失败
看起来这个问题与Ubuntu版本无关,但是当我做'apt-get upgrade'时我得到的新软件包,在12.10框上我没有这样做,而且它正在运行。然而在13.04我最终做了所有的更新。现在,因为我得到超过80次更新,我仍然没有缩小到图书馆,这是搞乱它。当我安装一个新的13.04图像时,它工作正常。
看起来基础Ubuntu 12.10或13.04工作正常。如果您获得最新的更新,那么它将停止工作。所以不确定哪个库导致了这个问题。
答案 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。)