【发布时间】:2016-05-25 21:31:37
【问题描述】:
我根本不是 Perl 人。但在某些情况下,我必须在新的 gentoo 服务器上部署 perl 脚本。脚本在其他几个由另一个人配置的服务器上运行良好。因此,我自己安装了一台新服务器,并且某些软件包具有不同的版本。作为给定 perl 脚本的结果,我有一个问题:
来自 Crypt-SSLeay 的 Net::SSL 无法验证主机名;安装 IO::Socket::SSL 或通过将 PERL_LWP_SSL_VERIFY_HOSTNAME 环境变量设置为 0 来关闭验证
其实已经安装好了。
perl -MIO::Socket::SSL -e 'print "$IO::Socket::SSL::VERSION\n"' 2.024
为什么它没有看到已安装的模块。在没有修改脚本的情况下,我可以在新服务器上做什么来解决问题?版本差异有那么重要吗? 新服务器 Perl 版本:5.24.0 旧服务器 Perl 版本:5.22.1
新服务器:
perl -v
这是为 x86_64-linux 构建的 perl 5,版本 24,subversion 0 (v5.24.0)
perl -MCrypt::SSLeay -e 'print "$Crypt::SSLeay::VERSION\n"'
0.72
perl -MIO::Socket::SSL -e 'print "$IO::Socket::SSL::VERSION\n"'
2.024
环境 | grep PERL_LWP_SSL_VERIFY_HOSTNAME
旧服务器: perl -v
这是为 x86_64-linux 构建的 perl 5,版本 22,subversion 1 (v5.22.1)
network6 ~ # perl -MCrypt::SSLeay -e 'print "$Crypt::SSLeay::VERSION\n"'
0.72
network6 ~ # perl -MIO::Socket::SSL -e 'print "$IO::Socket::SSL::VERSION\n"'
2.012
环境 | grep PERL_LWP_SSL_VERIFY_HOSTNAME
【问题讨论】:
-
版本可能很重要。自 LWP v6.00 起,已验证连接是默认连接。如果你只是slap an
$ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;at the beginning of the script,它可以工作吗? -
@mob,如果您禁用安全检查以使其运行,它真的有效吗...
-
我不知道。在没有进行安全检查之前它是否有效?
-
如果是关于版本:服务器之间的确切差异对此有何影响?它看起来不是主要版本差异,我想知道次要版本是否会严重破坏 BC。实际上,我仍然认为这与版本无关,但不幸的是调试选项非常有限,导致缺少 Perl 的包。
-
似乎用法 $ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;为我工作。我遇到了另一个错误,目前还可以。在这个错误中我看到提到 Net::SSL 很重要。在其他有关闭错误的服务器上,我看到提到 IO::Socket::SSL。所以我会尝试显式使用定义而不是常量:但仍然想知道正确的库加载到底有什么影响?顺便说一句:除了 Net:DNS 之外,代码中没有对 Net:: 包的明确使用定义。