当使用Android的HttpUrlConnection库发出HTTPS请求时,我有时会看到以下异常被抛出:
javax.net.ssl.SSLException: SSL handshake aborted: ssl=0x5c1b18a0: I/O error during system call, Connection reset by peer
at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:395)
...在深入研究这个问题之后,我了解到
会发生什么事?是否有移动运营商干扰HTTPS流量?
发布于 2012-10-14 18:33:10
短答案
事实证明,一些移动运营商将返回一个IP地址,用于DNS查找,而这个IP地址本应以不存在的方式失败。应用程序连接到的服务器有时无法解决问题,运营商将试图通过提供一个类似站点的页面来提供帮助。
更长的答案
我的应用程序连接到的服务器的主机名有时无法解析。这通常会抛出一个UnknownHostException以指示DNS失败。我希望这种情况会偶尔发生,而应用程序会处理这个问题。SSLException是一个异常现象。
在拦截失败的DNS查找的运营商上,将网络浏览器导航到一个不存在的主机上,将显示一页“搜索结果”,其目的是帮助您找到您正在寻找的内容。(一些DLS/有线ISP也这样做。)不过,对于发出HTTPS请求的应用程序来说,这会破坏SSL握手,因为远程主机与应用程序期望的不同。
根本原因是一个错误的DNS服务器,它将返回一个不存在的主机错误的一个服务器,我的应用程序使用。通过wifi连接似乎更可靠(由于同一DNS服务器的另一个怪癖)。连接wifi将允许缓存DNS条目,因此,当我们随后通过移动数据连接连接时,会暂时掩盖问题。然而,大多数情况下,移动运营商会拦截失败的DNS查找,并将我们重定向到意外的主机名,从而导致SSL握手失败。
https://stackoverflow.com/questions/12885247
复制相似问题