背景
隨著apple對(duì)https協(xié)議的強(qiáng)推(貌似2017年開始ios應(yīng)用上架就得全部用https協(xié)議了),作為iOS開發(fā)來說谷异,會(huì)越來越多的接觸到這個(gè)協(xié)議,并不可避免的需要抓包來進(jìn)行問題的定位解決浮声。好在我們常用的Charles也支持https協(xié)議抓包礁叔,這就極大方便了我們。
原理
Charles能進(jìn)行https協(xié)議抓包分析泼菌,是使用了中間人代理的方法(man-in-the-middle谍肤,也常作為一個(gè)黑客攻擊手段)。Charles代替你的app接受server的證書哗伯,然后使用這個(gè)證書通過SSL和server通信荒揣;同時(shí),Charles會(huì)動(dòng)態(tài)的生成一個(gè)對(duì)應(yīng)的證書(用Charles的CA證書簽名)焊刹,然后使用這個(gè)證書和你的app通信系任,這樣就完成了一個(gè)中間人代理,從而可以把a(bǔ)pp和server的https包給抓到和解碼出來虐块。
使用
- 首先要安裝Charles的證書俩滥,用iOS設(shè)備的safari打開http://www.charlesproxy.com/getssl,會(huì)彈出一個(gè)提示框讓你安裝證書贺奠,確認(rèn)安裝即可(只適用于真機(jī)霜旧,不適用于模擬器)
-
打開菜單Proxy -> SSL Proxying Settings...,在彈出的設(shè)置框中儡率,勾選Enable SSL Proxying挂据,同時(shí)添加需要代理的域名(這里偷懶,直接設(shè)置成了*來代理全部https域名)
-
開始愉快的抓包分析吧
注意事項(xiàng)
- 沒有安裝Charles的證書儿普,卻開啟了Enable SSL Proxying崎逃,那么會(huì)造成所有的https訪問都會(huì)失敗,同時(shí)Charles會(huì)在每個(gè)https請(qǐng)求的overview那里友好的提示你需要信任Charles的根證書箕肃,即是我們上述的步驟1婚脱,以訪問https://www.baidu.com為例
-
如果不開啟Enable SSL Proxying,那么Charles只是簡(jiǎn)單把所有SSL通信轉(zhuǎn)發(fā)給server而不做任何處理勺像,此時(shí)我們抓包會(huì)看到這個(gè)https請(qǐng)求障贸,但是看不到請(qǐng)求的內(nèi)容;另外這個(gè)請(qǐng)求會(huì)以CONNECT而非GET的形式出現(xiàn)吟宦,同時(shí)請(qǐng)求耗時(shí)還會(huì)異常的長(zhǎng)(甚至有的請(qǐng)求會(huì)一直不結(jié)束)篮洁,實(shí)際上這個(gè)請(qǐng)求早就返回了,知道這點(diǎn)就好殃姓,以免發(fā)生疑惑(Charles在每個(gè)請(qǐng)求的overview里還會(huì)有溫馨提示)
- 系統(tǒng)設(shè)置的通用->描述文件這里可以看到我們安裝并信任的Charles的根證書袁波,如果不需要了可以自行刪除