【问题标题】:Play Framework WS Hostname Verification Certificate IssuesPlay Framework WS 主机名验证证书问题
【发布时间】:2018-10-01 03:30:33
【问题描述】:

我使用的是 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 Framework 的 HTTPS 请求,并将其与 Postman 发送的请求进行比较。奇怪的是,如果查尔斯拦截了请求,请求就会成功! Charles 没有说明证书问题。

我看到其他人抱怨 Cloudflare 的类似问题,在他们的案例中,结果证明他们的客户端不支持 TLS 1.2。我检查了一下,我正在运行 JVM 的 1.8 版,它默认支持 TLS 1.2,甚至尝试使用配置变量强制 TLS 1.2 以防万一,但没有帮助。

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

【问题讨论】:

    标签: playframework playframework-2.3 zendesk-api


    【解决方案1】:

    最后我尝试Wireshark 作为最后的手段,试图确定从我的其他客户端(curl/Postman)和 Play Framework WS 客户端发送的请求之间的差异。

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

    果然Play Framework 2.3.x does not support SNI

    仅有的两个真正的选择是使用单独的 HTTP 客户端,例如 play-ws,或者将我的 Play Framework 版本更新到 2.4.x。

    我选择了后者,现在它正在工作。

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

    我希望这可以帮助遇到同样问题的人!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2016-12-27
      • 2020-02-12
      • 2020-10-08
      相关资源
      最近更新 更多