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

时间:2017-12-28 16:41:27

标签: android ssl

我有一个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.这没有帮助。

1 个答案:

答案 0 :(得分:2)

此域名的report by SSLLabs明确说明:

  

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

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

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

相关问题