我正在使用 Play Framework 2.3.8,但在向某些主机发出 HTTPS 请求时遇到问题。在这种情况下,我似乎无法使用WS 客户端连接到 Zendesk API 主机 (xxxxx.zendesk.com) 。
我最初得到的错误是:
无法调用动作,最终报错:java.net.ConnectException: HostnameVerifier 异常。
这很奇怪,因为如果我在浏览器中或通过ssl s_client查看证书,它看起来像是文件。CN 条目与域匹配。
如果我禁用主机名验证,我会从 Cloudflare 收到一条错误消息,其中包含“禁止”消息。它是 HTML,而不是我所期望的 JSON。
然后我尝试使用Postman和curl发布相同的请求。请求成功,我得到了 JSON 格式的响应。
然后我使用Charles Web Debugging Proxy拦截来自 Play Framework 的 HTTPS 请求,并将其与 Postman 发送的请求进行比较。奇怪的是,如果查尔斯拦截了请求,请求就会成功!查尔斯没有对证书问题做出任何解释。
我看到其他人抱怨 Cloudflare 的类似问题,在他们的案例中,结果证明他们的客户端不支持 TLS 1.2。我检查了一下,我正在运行 JVM 的 1.8 版,它支持 TLS 1.2 默认值,甚至尝试使用配置变量强制 TLS 1.2 以防万一,但这并没有帮助。
我认为我正在使用的 Play Framework 版本中的 SSL 存在一些问题。