首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么HttpUrlConnection在移动数据连接时抛出一个SSLException?

为什么HttpUrlConnection在移动数据连接时抛出一个SSLException?
EN

Stack Overflow用户
提问于 2012-10-14 18:33:10
回答 1查看 18K关注 0票数 18

当使用Android的HttpUrlConnection库发出HTTPS请求时,我有时会看到以下异常被抛出:

代码语言:javascript
复制
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)
...

在深入研究这个问题之后,我了解到

  • 在wifi上一切正常。
  • 只有当设备处于移动数据连接上时,才会引发异常。
  • 在首先在wifi上制作HTTPS之后,移动数据连接通常会在一段时间内正常工作。
  • 这个问题似乎发生在少数几家特定的移动运营商身上。

会发生什么事?是否有移动运营商干扰HTTPS流量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-14 18:33:10

短答案

事实证明,一些移动运营商将返回一个IP地址,用于DNS查找,而这个IP地址本应以不存在的方式失败。应用程序连接到的服务器有时无法解决问题,运营商将试图通过提供一个类似站点的页面来提供帮助。

更长的答案

我的应用程序连接到的服务器的主机名有时无法解析。这通常会抛出一个UnknownHostException以指示DNS失败。我希望这种情况会偶尔发生,而应用程序会处理这个问题。SSLException是一个异常现象。

在拦截失败的DNS查找的运营商上,将网络浏览器导航到一个不存在的主机上,将显示一页“搜索结果”,其目的是帮助您找到您正在寻找的内容。(一些DLS/有线ISP也这样做。)不过,对于发出HTTPS请求的应用程序来说,这会破坏SSL握手,因为远程主机与应用程序期望的不同。

根本原因是一个错误的DNS服务器,它将返回一个不存在的主机错误的一个服务器,我的应用程序使用。通过wifi连接似乎更可靠(由于同一DNS服务器的另一个怪癖)。连接wifi将允许缓存DNS条目,因此,当我们随后通过移动数据连接连接时,会暂时掩盖问题。然而,大多数情况下,移动运营商会拦截失败的DNS查找,并将我们重定向到意外的主机名,从而导致SSL握手失败。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12885247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档