Charles的妙用在于能夠偽裝成中間人干預(yù)https通信。它使用了中間人代理的方法(man-in-the-middle,也常作為一個(gè)黑客攻擊手段),代替你的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包給抓到和解碼出來。
一、真機(jī)安裝根證書
總體步驟是:safari安裝根證書 ---> 添加需要檢測的域名列表 ---> 抓包分析
1、首先要安裝Charles的根證書,用iOS設(shè)備的safari打開http://www.charlesproxy.com/getssl,會(huì)彈出一個(gè)提示框讓你安裝證書,確認(rèn)安裝即可。然后到設(shè)置->關(guān)于本機(jī)->證書信任設(shè)置中信任Charles根證書
2、打開菜單Proxy -> SSL Proxying Settings...,在彈出的設(shè)置框中,勾選Enable SSL Proxying,同時(shí)添加需要代理的域名,端口號(hào)統(tǒng)一為443(這里直接設(shè)置成了*來代理全部https域名)
3、可以通過breakpoint修改請(qǐng)求或者返回?cái)?shù)據(jù)
二、模擬器安裝根證書
模擬器安裝根證書比較簡單:

坑:安裝后需要重啟模擬器才能正常抓HTTPS包
三、MAC安裝根證書
直接在Charles的Help菜單中安裝;安裝完成后去系統(tǒng)的鑰匙串訪問中右鍵證書信任它。
四、可能踩到的坑
1、沒有安裝Charles的證書,卻開啟了Enable SSL Proxying,那么會(huì)造成所有的https訪問都會(huì)失敗,同時(shí)Charles會(huì)在每個(gè)https請(qǐng)求的overview那里友好的提示你需要信任Charles的根證書:“You may need to configure your browser or application to trust the Charles Root Certificate”,意思是根證書安裝失敗。這時(shí)重走第1步就行。

2、通過斷點(diǎn)的方式修改請(qǐng)求時(shí),客戶端的請(qǐng)求超時(shí)計(jì)時(shí)器一直在走,因此可能導(dǎo)致超時(shí),這點(diǎn)要注意下。