my $ua = LWP::UserAgent->new();
my $res = $ua->get("https://url");
print $res->content;导致响应证书无效(如果我禁用了主机名验证,服务器会说我需要加密),直到我开始使用Net::SSL:
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';在执行我的请求之前,ofc。
目前的模块版本:
Crypt::SSLeay 0.58
IO::Socket::SSL 1.955
Net::SSLeay 1.55
LWP 6.05
LWP::Protocol::https 6.04我也尝试了最新的Crypt::SSLeay,但仍然失败(在测试环境中尝试)。
这是否仅仅是Crypt::SSLeay库中客户端和服务器之间的一个限制--它们可能无法就加密方法达成一致?
我还使用OpenSSL手动连接到有问题的服务器,没有出现任何问题,没有证书失败之类的问题。
我的问题已经解决了,但不是以一种感觉非常优雅的方式,但我很好奇错误在哪里,因为我花了很长时间试图找到解决方案,以及问题的根源。我向成百上千的其他服务器发送SSL请求而没有这个问题,但这一台服务器只会响应一条消息,告诉我需要加密我的请求。
LWP和Net:SSL是否更受支持?
您将如何尝试追查问题的根源?
编辑:有趣的是,这在旧版本的模块中没有发生(它最近起作用了)。我强烈怀疑是LWP或其他什么东西更新了。奇怪的是,在一次更新中,行为会发生这样的变化。
发布于 2013-12-09 07:02:28
如果它说证书无效,它可能无法验证它,因为它是自签名的,CA不知道或类似的问题。如果我理解正确的话,它只在这个特定的服务器上失败,所以它的证书可能有问题。如果你在浏览器上也收到错误信息,请检查一下。如果我知道确切的url并访问它,可能会提供更多的帮助。
至于Net::SSL与IO::Socket::SSL:最近的LWP版本默认使用IO::Socket::SSL (基于Net::SSLeay),而不是旧版本的Net::SSL/Crypt::SSLeay,因为IO::Socket::SSL有更多的功能,更正确的证书验证,并且正在积极开发中。
Steffen (IO::Socket::SSL的当前维护者/开发者)
发布于 2013-12-01 05:10:36
部分服务器不支持TLSv1.2。默认情况下,LWP会连接到一些服务器,但不会连接到那些需要较低TLS版本的服务器。我在https和LWP6.0x上有一个非常普通的500错误,并且将LWP::UserAgent设置为SSL_version => 'TLSv1‘对我不起作用。尝试强制LWP仅使用IO::Socket::SSL并强制TLS版本进行额外测试。
https://stackoverflow.com/questions/19729459
复制相似问题