Problem shooting:為什麼有時在Android平台上通過代理網關訪問HTTPS網站會出現串連失敗__Android

來源:互聯網
上載者:User

環境

 

在Android手機上通過代理網關(例如移動的cmwap)訪問一些HTTPS網站,例如Gmail等,有時會出現以下錯誤:“無法建立安全連線”- A secure connecction could not be established。

 

原因

 

這是一個隱藏得比較深的問題,原因是系統協議棧在建立SSL Socket時,預設會調用SecurityManager去解析對端網站的host網域名稱來做一些額外驗證(似乎驗證結果並不影響後續操作,這點還需進一步研究),這時候就會調用到系統的DNS服務。但在通過cmwap網關訪問互連網時,一切請求都是通過Proxy 伺服器10.0.0.172完成,用戶端是沒有相應的DNS列表的。如果你的手機碰巧在這之前通過WiFi或是其它方式(如不需要代理的cmnet網關)訪問過互連網,Linux協議棧裡就會留有它們對應的DNS伺服器列表,於是系統就傻乎乎的向這些DNS發起請求,其結果自然是逾時失敗了。尤其DNS還有重試機制,所以需要等幾十秒之後才向HTTP層返回DNS失敗。

 

這時候的HTTP層本來已經完成了 SSL 協議層的 Client Hello/Server Hello握手,已經可以繼續往下進行HTTP資料互動了,但是由於以上原因,DNS的逾時時間過長,很多伺服器為了安全起見,如果發現用戶端在SSL握手之後10秒甚至更短時間內沒有資料互動的話,就將該SSL串連斷開。

 

解決辦法

 

簡單的解決辦法是:如果通過代理網關訪問互連網,則不做DNS解析驗證——這一步不是必須的。

 

問題很偏門,但解決的過程收益匪淺,趕緊記下來以防忘掉。相關檔案:

 

HttpsConnection.java

OpenSSLSocketImpl.java

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.