如何使用负载均衡器调试 TLS 协商失败?

Mat*_*xon 5 ssl android

我有一个 Android 应用程序,它通过 HTTP POST 请求与后端服务器进行通信。我想将其升级到 HTTPS。我使用的 API 是 HttpLib.postRequest。

我发现直接连接到我的 Apache 服务器工作正常。但通过负载均衡器的连接不起作用。我的负载均衡器是阿里云的。我尝试过两种不同的负载均衡器,两者都以同样的方式失败。直接症状是我在电话上收到“unknown_err”。

我可以使用 tcpdump 捕获流量,这证明它正在连接到正确的位置并尝试进行协商。会话结束时客户端发送 HTTPS 错误“证书未知 (46)”。

通常这是由错误的证书或配置引起的。但我知道我的证书都是有效的。其他浏览器可以正常连接到同一服务器来加载正常网页。同一应用程序的 iOS 版本也运行良好。即使应用程序无法连接,在 Android 手机上浏览网站也能正常工作。该网站是https://zaomengshe.com,因此您可以在那里查看证书。我还有一个不同的设置,包括负载均衡器和 Let's Encrypt 的证书。

我猜想阿里云的负载均衡器和 Android 的某些特殊性阻碍了成功的协商。也许我需要启用对某些算法或密钥大小或其他内容的支持。我确实读到,直到 API 版本 20 才支持 TLS 1.2,因此我将最低支持版本更新为 20。但这没有帮助。

Ste*_*ich 5

SSLLabs针对该域名的报告明确指出:

该服务器的证书链不完整。等级上限为 B。

此问题的原因可能是负载均衡器的配置混乱:TLS 握手中仅提供叶证书,而不提供构建信任链所需的中间证书。桌面浏览器通常会尝试解决此类损坏的配置,但其他应用程序通常不会。

这意味着这很可能是您的应用程序失败的原因。并且还需要通过配置中间证书来解决负载均衡器上的问题。