Play Framework WS主机名验证证书问题

时间:2018-10-01 03:30:33

标签: playframework playframework-2.3 zendesk-api

我正在使用Play Framework 2.3.8,但无法向某些主机发出HTTPS请求。在这种情况下,我似乎无法使用WS client连接到Zendesk API主机(xxxxx.zendesk.com)。

我最初遇到的错误是:

  

无法调用该操作,最终出现错误:java.net.ConnectException:HostnameVerifier异常。

这很奇怪,因为如果我在浏览器中或通过ssl s_client查看证书,该证书将查找文件。 CN条目与域匹配。

如果我disable hostname verification,我从Cloudflare收到一条错误消息,消息为“禁止”。它是HTML格式,而不是我所期望的JSON。

然后,我尝试使用Postmancurl发布相同的请求。请求成功,并且我以JSON返回了响应。

然后,我使用Charles Web Debugging Proxy拦截了来自Play框架的HTTPS请求,并将其与Postman发送的请求进行了比较。奇怪的是,如果Charles拦截了请求,则请求成功!查尔斯对证书问题没有透露任何信息。

我已经看到其他人抱怨Cloudflare的类似问题,事实证明,他们的客户端不支持TLS 1.2。我检查了一下,然后运行了支持TLS 1.2默认值的JVM 1.8版,甚至尝试使用config变量强制TLS 1.2,以防万一,但这无济于事。

我认为在我使用的Play Framework版本中SSL出现了一些问题。

1 个答案:

答案 0 :(得分:1)

最后,我尝试使用Wireshark来尝试确定其他客户端(curl / Postman)和Play Framework WS客户端发送的请求之间的差异。

我注意到工作中的客户发送了域名,作为握手的一部分。然后单击它可能是SNI问题。

果然Play Framework 2.3.x does not support SNI

仅有的两个实际选择是使用单独的HTTP客户端(如play-ws或将我的Pl​​ay Framework版本更新为2.4.x。

我选择了后者,现在可以使用了。

主机名验证问题实际上是一个麻烦,与缺乏对SNI的支持有关。我能够毫无问题地重新启用它。

我希望这对遇到同样问题的人有所帮助!