18

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)
...

問題を少し掘り下げた後、私はそれを学びました

  • すべてがwifiで正常に動作します
  • 例外は、デバイスがモバイル データ接続にある場合にのみスローされます
  • 最初に Wi-Fi 経由で HTTPS を作成した後、モバイル データ経由の接続はしばらくの間正常に機能する傾向があります。
  • この問題は、少数の特定の携帯電話会社で発生しているようです

何が起こっている可能性がありますか?一部のモバイル キャリアは HTTPS トラフィックに干渉していますか?

4

1 に答える 1

23

短い答え:

一部のモバイル キャリアは、存在しないものとして失敗するはずだった DNS ルックアップの IP アドレスを返すことが判明しました。アプリが接続しているサーバーが解決できない場合があり、通信事業者は同様のサイトのページを提供して支援しようとしました。


より長い答え:

アプリが接続していたサーバーのホスト名が解決できないことがありました。これは通常UnknownHostException、DNS の失敗を示すために をスローします。これは時折発生することを期待しており、アプリがそれを処理します。SSLException異常でした。

失敗した DNS ルックアップをインターセプトする通信事業者では、Web ブラウザを存在しないホストに移動すると、探しているものを見つけるのに役立つ「検索結果」のページが表示されます。(一部の DLS/ケーブル ISP もこれを行っています。)ただし、HTTPS 要求を行うアプリの場合、リモート ホストがアプリが期待するものと異なるため、SSL ハンドシェイクが中断されます。

根本的な原因は、アプリが使用していたサーバーの 1 つに対して、存在しないホスト エラーを返す DNS サーバーの誤動作でした。Wi-Fi 経由での接続は、より信頼性が高いように見えました (同じ DNS サーバーの別の癖のため)。wifi経由で接続すると、DNSエントリがキャッシュされるため、後でモバイルデータ接続経由で接続するときに問題が一時的に隠されます. ただし、ほとんどの場合、モバイル キャリアは失敗した DNS ルックアップを傍受し、予期しないホスト名にリダイレクトして、SSL ハンドシェイクに失敗しました。

于 2012-10-14T18:33:10.463 に答える