背景
隨著apple對https協議的強推(貌似2017年開始ios應用上架就得全部用https協議了),作為iOS開發來說,會越來越多的接觸到這個協議,并不可避免的需要抓包來進行問題的定位解決。好在我們常用的Charles也支持https協議抓包,這就極大方便了我們。
原理
Charles能進行https協議抓包分析,是使用了中間人代理的方法(man-in-the-middle,也常作為一個黑客攻擊手段)。Charles代替你的app接受server的證書,然后使用這個證書通過SSL和server通信;同時,Charles會動態的生成一個對應的證書(用Charles的CA證書簽名),然后使用這個證書和你的app通信,這樣就完成了一個中間人代理,從而可以把app和server的https包給抓到和解碼出來。
使用
- 首先要安裝Charles的證書,用iOS設備的safari打開http://www.charlesproxy.com/getssl,會彈出一個提示框讓你安裝證書,確認安裝即可(只適用于真機,不適用于模擬器)
-
打開菜單Proxy -> SSL Proxying Settings...,在彈出的設置框中,勾選Enable SSL Proxying,同時添加需要代理的域名(這里偷懶,直接設置成了*來代理全部https域名)
SSL Proxying設置 -
開始愉快的抓包分析吧
?百度首頁抓包
注意事項
- 沒有安裝Charles的證書,卻開啟了Enable SSL Proxying,那么會造成所有的https訪問都會失敗,同時Charles會在每個https請求的overview那里友好的提示你需要信任Charles的根證書,即是我們上述的步驟1,以訪問https://www.baidu.com為例
?沒有安裝Charles根證書 -
如果不開啟Enable SSL Proxying,那么Charles只是簡單把所有SSL通信轉發給server而不做任何處理,此時我們抓包會看到這個https請求,但是看不到請求的內容;另外這個請求會以CONNECT而非GET的形式出現,同時請求耗時還會異常的長(甚至有的請求會一直不結束),實際上這個請求早就返回了,知道這點就好,以免發生疑惑(Charles在每個請求的overview里還會有溫馨提示)
?正常的https請求 - 系統設置的通用->描述文件這里可以看到我們安裝并信任的Charles的根證書,如果不需要了可以自行刪除