抓取HTTPS請(qǐng)求包,對(duì)數(shù)據(jù)進(jìn)行排查檢驗(yàn)
1.安裝Charles
2.電腦安裝Charles證書(shū)


3.手機(jī)安裝證書(shū)

4.手機(jī)網(wǎng)頁(yè)輸入網(wǎng)址 下載證書(shū)并信任


注意:在iOS 10.3之前,當(dāng)你將安裝一個(gè)自定義證書(shū),iOS會(huì)默認(rèn)信任,不需要進(jìn)一步的設(shè)置。而iOS 10.3之后,安裝新的自定義證書(shū)默認(rèn)是不受信任的。如果要信任已安裝的自定義證書(shū),需要手動(dòng)打開(kāi)開(kāi)關(guān)以信任證書(shū)。
iOS11下需要手動(dòng)信任已下載好的證書(shū),方法如下:
設(shè)置->通用->關(guān)于本機(jī)->證書(shū)信任設(shè)置-> 找到charles proxy custom root certificate然后信任該證書(shū)即可.
iOS11下手動(dòng)信任證書(shū)
5.開(kāi)始抓包
Charles設(shè)置Proxy
Proxy -> SSL Proxying Settings...,如下圖所示:

選擇Proxy | Recording Settings,彈出Recording Settings設(shè)置選項(xiàng)卡,勾選include

6.原理簡(jiǎn)析
如果是HTTP請(qǐng)求,因?yàn)閿?shù)據(jù)本身并沒(méi)加密所以請(qǐng)求內(nèi)容和返回結(jié)果是直接展現(xiàn)出來(lái)的。
但HTTPS是對(duì)數(shù)據(jù)進(jìn)行了加密處理的,如果不做任何應(yīng)對(duì)是無(wú)法獲取其中內(nèi)容。所以Charles做的就是對(duì)客戶端把自己偽裝成服務(wù)器,對(duì)服務(wù)器把自己偽裝成客戶端:
- Charles攔截客戶端的請(qǐng)求,偽裝成客戶端向服務(wù)器進(jìn)行請(qǐng)求
- 服務(wù)器向“客戶端”(實(shí)際上是Charles)返回服務(wù)器的CA證書(shū)
- Charles攔截服務(wù)器的響應(yīng),獲取服務(wù)器證書(shū)公鑰,然后自己制作一張證書(shū),將服務(wù)器證書(shū)替換后發(fā)送給客戶端。(這一步,Charles拿到了服務(wù)器證書(shū)的公鑰)
- 客戶端接收到“服務(wù)器”(實(shí)際上是Charles)的證書(shū)后,生成一個(gè)對(duì)稱(chēng)密鑰,用Charles的公鑰加密,發(fā)送給“服務(wù)器”(Charles)
- Charles攔截客戶端的響應(yīng),用自己的私鑰解密對(duì)稱(chēng)密鑰,然后用服務(wù)器證書(shū)公鑰加密,發(fā)送給服務(wù)器。(這一步,Charles拿到了對(duì)稱(chēng)密鑰)
- 服務(wù)器用自己的私鑰解密對(duì)稱(chēng)密鑰,向“客戶端”(Charles)發(fā)送響應(yīng)
- Charles攔截服務(wù)器的響應(yīng),替換成自己的證書(shū)后發(fā)送給客戶端
當(dāng)然,如果用戶不選擇信任安裝Charles的CA證書(shū),Charles也無(wú)法獲取請(qǐng)求內(nèi)容。還有一種,如果客戶端內(nèi)置了本身的CA證書(shū),這時(shí)如果Charles把自己的證書(shū)發(fā)送給客戶端,客戶端會(huì)發(fā)現(xiàn)與程序內(nèi)的證書(shū)不一致,不予通過(guò),此時(shí)Charles也是無(wú)法獲取信息的。
參考
mac環(huán)境下使用Charles抓包Https請(qǐng)求
淺談Charles抓包
Charles 抓包IOS中https亂碼解決
寫(xiě)在最后
本文僅做個(gè)人學(xué)習(xí)記錄,不做他用,有則改之無(wú)則加勉!
