標籤:
Android 關於 https SSL handshake aborted 問題尋找
記錄這個問題的定位過程和問題定位的方法
1、問題描述:
項目改為使用 https 協議,訪問時發現返回錯誤碼:
網域名稱:https://sandbox.api.xxx.com
錯誤:SSL handshake aborted: ssl=0x5ef8e720: I/O error during system call, Connection reset by peer
錯誤描述:https 在使用 ssl 時候 handshake aborted(握手失敗),導致tcp串連被reset了。那麼發生這個原因有哪些呢?
2、搜尋問題關鍵字尋找解決辦法:
stackoverflow.com 上的原因解釋:點選連結 stackoverflow
3、可能存在的問題分析及排除SSL 的協議問題?
如: Android 系統版本不一樣對使用SSL 時候支援使用的協議版本(TLS1.1 TLS1.2等)是不一樣的
點擊查看SSLSocket 說明
Protocols Client socket
Protocol |
Supported (API Levels) |
Enabled by default (API Levels) |
SSLv3 |
1+ |
1+ |
TLSv1 |
1+ |
1+ |
TLSv1.1 |
16+ |
20+ |
TLSv1.2 |
16+ |
20+ |
Server socket:
Protocol |
Supported (API Levels) |
Enabled by default (API Levels) |
SSLv3 |
1+ |
1–22 |
TLSv1 |
1+ |
1+ |
TLSv1.1 |
16+ |
16+ |
TLSv1.2 |
16+ |
16+ |
* 連接埠問題?
4、輔助定位方法:
通過抓包協助服務端分析最後發現是服務端 Nagix
(1)抓包分析過程
Android tcp dump 抓包分析
命令備忘:
/data/local/tcpdump -p -vv -s 0 -w /sdcard/ThinkDrive.pcap
pull ThinkDrive.pcap 檔案到電腦使用 Wireshark 分析,(我這個問題分析發現,戶端發送 Client Hello 服務端沒有返回 Clinet Hello 和 public key 所以是服務端處理有問題
(2)如何修改host等檔案資訊輔助服務端(營運)調試
Unable to chmod ***: Read-only file system
問題的解決方案
- 1.ROOT你的手機
- 2.用adb shell登入後,用su root切換到root使用者,切換後顯示 # 號,表示切換成功
- 3.用mount命令重新負載檔案系統:mount -o rw,remount yaffs2 /system
注意:
hosts檔案格式的問題 ,如果編碼格式不對可能導致hosts失效,推薦在Android 上直接用 echo "ip domain" >> /system/ects/hosts
的方式。
LAST: 發現是營運配置nginx 中在協商SSL對稱式加密演算法時出了問題。
Android關於 https SSL handshake aborted 問題尋找