整體架構(gòu)
- 何為Charles ?
- 有什么用處Charles。
- 如何安裝Charles侮叮。
- Charles 抓包的原理。對(duì)應(yīng)http和https的原理區(qū)別歹嘹。
- Charles 對(duì)應(yīng)的證書配置材蛛,如何配卑吭?
正篇
-
何為Charles
Charles官網(wǎng):https://www.charlesproxy.com/豆赏。 Charles又名青花瓷掷邦,小花瓶抚岗。是用于網(wǎng)絡(luò)抓包的工具向抢,對(duì)應(yīng)的還有一款不錯(cuò)的軟件,比如Wireshark也是分析網(wǎng)絡(luò)的不錯(cuò)的一個(gè)工具。我們可以看到我們的request枢冤,response 的 請(qǐng)求行,請(qǐng)求頭核蘸,請(qǐng)求體,響應(yīng)行,響應(yīng)頭针姿,響應(yīng)體的工具绞绒。
注意:https 固然傳輸是安全的,但是頂不住用戶自己作安裝一些信任證書狰晚,所以我們除了app在application 和 transport 層之間的tls/ssl ,我們還要做適當(dāng)?shù)恼?qǐng)求加密家肯。這樣即使我們的請(qǐng)求被抓包了换棚,我們也可以保證app數(shù)據(jù)的安全。
-
有什么用處?
我們可以用來(lái)觀察數(shù)據(jù)是否正確。測(cè)試的時(shí)候我們頁(yè)面顯示不正確的時(shí)候我們可以觀察是不是數(shù)據(jù)返回有誤導(dǎo)致的尸昧。快速定位問(wèn)題的所在兔仰。是開發(fā)的問(wèn)題,還是后臺(tái)數(shù)據(jù)接口的問(wèn)題无虚。 我們還可以修改數(shù)據(jù)的返回值嗤堰,通過(guò)設(shè)置Breakpoints。
-
如何安裝Charles
- 到官網(wǎng)安裝 : https://www.charlesproxy.com/download/
- 通過(guò)homebrew 安裝: brew cask install Charles
注意: 下載安裝完成Charles ,基本上就可以對(duì) http進(jìn)行抓包了戚哎。不過(guò)要做響應(yīng)的配置丈冬。如下:
step 1.jpeg
我們就可以監(jiān)聽http了。
-
http 抓包原理
http里面涉及三次握手匀们,抓包還是比較容易的,Charles作為中間人比較好監(jiān)聽。比如相對(duì)于客戶端他可以偽裝成服務(wù)端。相對(duì)于服務(wù)端叁扫,他可以偽裝成客戶端畴蒲,在中間起到一個(gè)轉(zhuǎn)承的作用。
-
https 的抓包原理
問(wèn)題:
我們經(jīng)常會(huì)碰到用Charles抓包的時(shí)候https總是一堆亂碼牺汤。前提:
我們需要了解https的原理 固该,傳送門:簡(jiǎn)要概述:
https 即為 http + s。我們需要關(guān)注的就是SSL/TLS之間是怎么通信的桦沉。1. 客戶度發(fā)送隨機(jī)數(shù),加密算法列表,TLS/SSL版本好給服務(wù)器 2. 服務(wù)器下派證書钞速,隨機(jī)數(shù),加密算法 給客戶端 3. 用CA的公鑰解開證書簽名驾凶,如果能夠解開則是服務(wù)器發(fā)給我們的。然后生成隨機(jī)數(shù),用server 的public key 進(jìn)行加密得到加密隨機(jī)數(shù)。再然后將上面發(fā)送的內(nèi)容進(jìn)行hash黄绩,得到一段hash后再用隨機(jī)數(shù)進(jìn)行加密筑煮,得到加密hash。然后將加密隨機(jī)數(shù)虑凛,加密hash 祸挪,傳給服務(wù)器,并且告訴服務(wù)端以商量好的方式生成一個(gè)對(duì)稱加密密鑰盅粪,通過(guò)這個(gè)密鑰進(jìn)行內(nèi)容加密。至此客戶端的握手完成奠骄。 4. 服務(wù)端用公鑰解開拿到隨機(jī)數(shù),再用隨機(jī)數(shù)解開hash得到解開hash值。對(duì)內(nèi)容進(jìn)行hash熔吗,然后對(duì)比hash相等則沒(méi)有被篡改。就告訴客戶端用上面的方式加密。加密hash 提供客戶端驗(yàn)證一喘。
-
Charles抓https的包的原理就明朗了灼伤。
- 客戶端向服務(wù)端"實(shí)際上是Charles端",say hello 鸟雏,即 發(fā)送隨機(jī)數(shù),加密算法列表,以及SSL/TLS版本號(hào)。
- Charles 監(jiān)聽這個(gè)請(qǐng)求參數(shù),當(dāng)服務(wù)器返回證書曲初,隨機(jī)數(shù)械媒,加密算法,Charles攔截這個(gè)請(qǐng)求奖唯,拿到服務(wù)器的公鑰寂汇。然后發(fā)送自己的證書給客戶端停巷,隨機(jī)數(shù)庆揪,加密方式。
- 客戶端進(jìn)行證書驗(yàn)證内颗,需要手機(jī)或者瀏覽器信任Charles的證書。然后客戶端拿到Charles的公鑰加密pre-master-key 负懦,得到加密隨機(jī)數(shù)纸厉。將加密隨機(jī)數(shù)颗品,還有按照約定的方式進(jìn)行加密通信则吟。再用隨機(jī)數(shù)加密hash內(nèi)容后的hash氓仲。發(fā)送給服務(wù)器(實(shí)際上是Charles)∩都客戶端握手完成急侥。
- Charles 拿到后缆巧,用自己的私鑰解開加密的premaster - key,得到后捉超,再用真正服務(wù)器的公鑰進(jìn)行加密隨機(jī)數(shù)拼岳,雙方按照約定的方式得到加密key進(jìn)行通信惜纸。然后再用隨機(jī)數(shù)加密hash內(nèi)容后的hash耐版。發(fā)送給服務(wù)器落君。
- 服務(wù)器拿到后用私鑰解開Charles的加密信息朝氓,得到隨機(jī)數(shù)。用隨機(jī)數(shù)解開得到hash 较坛,驗(yàn)證hash。然后發(fā)送消息按照雙方的約定進(jìn)行通信薛躬。
這就是Charles 作為中間人的一個(gè)原理
https 一般如果沒(méi)有配置證書會(huì)出現(xiàn)亂碼的情況
解決之道: