Perl LWP GET或POST到SNI SSL URL

时间:2014-08-27 17:18:12

标签: perl ssl lwp

我有一个使用perl LWP向客户发送数据的系统。他们可以选择他们的URL以及是POST还是GET。

一位新客户最近抱怨该服务不起作用,他们怀疑这是因为他们的终端使用SNI SSL。

查看日志,我看到的只是错误消息“(证书验证失败)(500读取超时)”。

有没有办法判断这个问题是因为他们的SNI SSL,还是其他什么?我想我可以通过关闭verify_hostname解决问题,但这是最后的手段,我宁愿让它正常工作。

我应该采取哪些其他步骤?

1 个答案:

答案 0 :(得分:8)

如果SNI可能出问题取决于您使用的模块及其版本:

  • LWP使用IO :: Socket :: SSL,因为6.0版作为后端SSL库。在此之前,它使用Crypt :: SSLeay,它不支持SNI,你仍然可以强制使用Crypt :: SSLeay。但是,虽然这可能导致服务器返回错误的数据,但在大多数情况下应该不会导致验证问题,因为Crypt :: SSLeay不会验证证书中的名称是否与请求的主机名匹配(因此不会检测到 - 中间攻击)。
  • IO :: Socket :: SSL自版本1.56(02/2012)起在客户端执行SNI,但您至少需要1.0版本的OpenSSL。由于与某些服务器交互时OpenSSL中存在错误,因此禁用对旧版本的支持。

您可以尝试在运行代码时设置$IO::Socket::SSL::DEBUG=4来调试此问题。