Charles的妙用在于能夠偽裝成中間人干預https通信。它使用了中間人代理的方法(man-in-the-middle,也常作為一個黑客攻擊手段),代替你的app接受server的證書,然后使用這個證書通過SSL和server通信;同時,Charles會動態的生成一個對應的證書(用Charles的CA證書簽名),然后使用這個證書和你的app通信,這樣就完成了一個中間人代理,從而可以把app和server的https包給抓到和解碼出來。
一、真機安裝根證書
總體步驟是:safari安裝根證書 ---> 添加需要檢測的域名列表 ---> 抓包分析
1、首先要安裝Charles的根證書,用iOS設備的safari打開http://www.charlesproxy.com/getssl,會彈出一個提示框讓你安裝證書,確認安裝即可。然后到設置->關于本機->證書信任設置中信任Charles根證書
2、打開菜單Proxy -> SSL Proxying Settings...,在彈出的設置框中,勾選Enable SSL Proxying,同時添加需要代理的域名,端口號統一為443(這里直接設置成了*來代理全部https域名)
3、可以通過breakpoint修改請求或者返回數據
二、模擬器安裝根證書
模擬器安裝根證書比較簡單:
坑:安裝后需要重啟模擬器才能正常抓HTTPS包
三、MAC安裝根證書
直接在Charles的Help菜單中安裝;安裝完成后去系統的鑰匙串訪問中右鍵證書信任它。
四、可能踩到的坑
1、沒有安裝Charles的證書,卻開啟了Enable SSL Proxying,那么會造成所有的https訪問都會失敗,同時Charles會在每個https請求的overview那里友好的提示你需要信任Charles的根證書:“You may need to configure your browser or application to trust the Charles Root Certificate”,意思是根證書安裝失敗。這時重走第1步就行。
2、通過斷點的方式修改請求時,客戶端的請求超時計時器一直在走,因此可能導致超時,這點要注意下。