1.使用場(chǎng)景
(1).排查線上前端問(wèn)題
(2).抓包查看APP中webview渲染頁(yè)面請(qǐng)求,單獨(dú)h5鏈接有鑒權(quán)不能單獨(dú)情況
(3).構(gòu)建模擬測(cè)試場(chǎng)景(mock)
(4).APP弱網(wǎng)模擬測(cè)試
(5).前端性能分析及優(yōu)化
2.什么是抓包
抓包就是將網(wǎng)絡(luò)傳輸發(fā)送與接收的數(shù)據(jù)包進(jìn)行截獲环壤、重發(fā)晒来、編輯、轉(zhuǎn)存等操作郑现,通過(guò)抓包可以:
分析網(wǎng)絡(luò)問(wèn)
思路就是設(shè)置一個(gè)中間人進(jìn)程負(fù)責(zé)抓包湃崩,每次目標(biāo)進(jìn)程之間的會(huì)話都先與中間人進(jìn)程通信,再進(jìn)行轉(zhuǎn)發(fā)接箫。
業(yè)務(wù)分析
分析網(wǎng)絡(luò)信息流通量
數(shù)據(jù)在網(wǎng)絡(luò)上是以很小的幀的單位傳輸?shù)脑芏粒瑤ㄟ^(guò)特定的稱為網(wǎng)絡(luò)驅(qū)動(dòng)程序的程序進(jìn)行成型,然后通過(guò)網(wǎng)卡發(fā)送到網(wǎng)線上辛友,通過(guò)網(wǎng)線到達(dá)目的機(jī)器薄扁,在目的機(jī)器的一端執(zhí)行相反的過(guò)程。
接收端機(jī)器的以太網(wǎng)捕獲到這些幀废累,并告訴操作系統(tǒng)幀已到達(dá)邓梅,然后對(duì)其進(jìn)行存儲(chǔ)。在這個(gè)傳輸和接收的過(guò)程邑滨,就可以使用抓包工具進(jìn)行抓包日缨,作為前端開(kāi)發(fā)者,通常是抓取應(yīng)用層的 HTTP/HTTPS 的包掖看。
2.2 HTTP/HTTPS 抓包原理
HTTP/HTTPS 是應(yīng)用層使用的通信協(xié)議匣距,常見(jiàn)的應(yīng)用層體系結(jié)構(gòu)是客戶端-服務(wù)器體系。
對(duì)運(yùn)行在不同端系統(tǒng)上的客戶端程序和服務(wù)端程序是如何互相通信的么哎壳?實(shí)際上毅待,在操作系統(tǒng)上的術(shù)語(yǔ)中,進(jìn)行通信的實(shí)際上是進(jìn)程而不是程序耳峦,一個(gè)進(jìn)程可以被認(rèn)為是運(yùn)行在端系統(tǒng)中的一個(gè)程序。
在 web 應(yīng)用程序中焕毫,一個(gè)客戶瀏覽器進(jìn)程與一臺(tái)服務(wù)器進(jìn)程進(jìn)行會(huì)話交換報(bào)文蹲坷。
瀏覽器進(jìn)程需要知道接收進(jìn)程的主機(jī)地址驶乾,以及定義在目的主機(jī)中的接收進(jìn)程的標(biāo)識(shí)符,也就是目的端口循签。
思路就是設(shè)置一個(gè)中間人進(jìn)程負(fù)責(zé)抓包级乐,每次目標(biāo)進(jìn)程之間的會(huì)話都先與中間人進(jìn)程通信,再進(jìn)行轉(zhuǎn)發(fā)县匠。
2.2.1 HTTP 抓包原理
在 http 標(biāo)準(zhǔn)中风科,沒(méi)有對(duì)通信端身份驗(yàn)證的標(biāo)準(zhǔn)。對(duì)于服務(wù)器來(lái)說(shuō)乞旦,它接收的 HTTP 請(qǐng)求報(bào)文只要格式符合規(guī)范贼穆,就發(fā)送響應(yīng)報(bào)文。
對(duì)于客戶端來(lái)說(shuō)也是如此兰粉,它無(wú)法校驗(yàn)服務(wù)器的身份 因此故痊,對(duì)于 HTTP 抓包,無(wú)需做過(guò)多的處理玖姑,只需要讓中間人負(fù)責(zé)轉(zhuǎn)發(fā)客戶端和服務(wù)端的數(shù)據(jù)包愕秫。
2.2.2 HTTPS 抓包原理
HTTP 是明文傳輸,容易受到中間人攻擊焰络,不安全戴甩。
HTTPS 語(yǔ)義仍然是 HTTP,只不過(guò)是在 HTTP 協(xié)議棧中 http 與 tcp 之間插入安全層 SSL/TSL闪彼。
安全層采用對(duì)稱加密的方式加密傳輸數(shù)據(jù)和非對(duì)稱加密的方式來(lái)傳輸對(duì)稱密鑰甜孤,解決 http 數(shù)據(jù)沒(méi)有加密、無(wú)法驗(yàn)證身份备蚓、數(shù)據(jù)容易纂改三個(gè)核心問(wèn)題课蔬。
HTTP + SSL(加密 + 認(rèn)證 + 完整性保護(hù)) = HTTPS
對(duì)稱加密:傳統(tǒng)的加密算法,就是加密和解密用的都是一個(gè)密碼郊尝。
非對(duì)稱加密: 通過(guò)算法可以隨機(jī)生成這樣的兩個(gè)字符串二跋,稱為一對(duì)公鑰和私鑰,知道算法流昏,并且擁有其中任意的一把鑰匙扎即,你能解開(kāi)用另一把鑰匙加密過(guò)的密文。 但你幾乎不可能通過(guò)手頭的這把鑰匙逆推出另一把鑰匙况凉,這保證了鑰匙的安全谚鄙。 為了能快速加解密,一般公鑰比較短刁绒,私鑰比較長(zhǎng)闷营。 私鑰不傳播不公開(kāi),所以稱為私鑰, 公鑰公開(kāi)發(fā)布出去傻盟。也就是公鑰加密速蕊,通過(guò)私鑰解密。
我們知道用https://www.baidu.com方式瀏覽網(wǎng)頁(yè)的時(shí) 瀏覽器首先要做的就是從對(duì)方的服務(wù)器上下載該網(wǎng)站的證書(shū)娘赴,并驗(yàn)證證書(shū)有效后规哲,才會(huì)開(kāi)始建立https連接。
1.客戶端向服務(wù)器請(qǐng)求時(shí)诽表,服務(wù)器先返回包含其公鑰的證書(shū)唉锌。
2.客戶端根據(jù)CA證書(shū)自簽根證書(shū)解密并校驗(yàn)證書(shū)鏈(為了防止證書(shū)被篡改,證書(shū)的正文信息后面竿奏,附加了一段CA機(jī)構(gòu)的簽名信息(密文))
證書(shū)的真?zhèn)悟?yàn)證是一個(gè)鏈條式的逐級(jí)驗(yàn)證的過(guò)程袄简,這被稱為信任鏈:
CA用私鑰自簽生成根證書(shū)(內(nèi)含CA公鑰),預(yù)裝到你的操作系統(tǒng)或?yàn)g覽器议双,
CA用私鑰給二級(jí)機(jī)構(gòu)簽發(fā)二級(jí)證書(shū)(內(nèi)含二級(jí)機(jī)構(gòu)公鑰)痘番,或許也已經(jīng)出現(xiàn)在你的系統(tǒng)中,你能用根證書(shū)驗(yàn)證它
二級(jí)機(jī)構(gòu)給各企業(yè)或網(wǎng)站或用戶簽發(fā)證書(shū)(內(nèi)含用戶公鑰)平痰,用戶使用證書(shū)來(lái)安全的分發(fā)公鑰
最終用戶獲取到某個(gè)證書(shū)后汞舱,可以通過(guò)預(yù)裝在自己系統(tǒng)中的上級(jí)證書(shū),來(lái)驗(yàn)證該證書(shū)是否有效
3.客戶端驗(yàn)證服務(wù)器證書(shū)的合法性后宗雇,生成一個(gè)隨機(jī)數(shù)通過(guò)該公鑰加密發(fā)給服務(wù)器昂芜,服務(wù)器通過(guò)自己的私鑰解密得到這個(gè)隨機(jī)數(shù),完成密碼交換赔蒲。
4.出于性能效率考慮泌神,后續(xù)客戶端與服務(wù)器通過(guò)交換的隨機(jī)數(shù)對(duì)數(shù)據(jù)進(jìn)行對(duì)稱加解密。
中間人想要抓包舞虱,需在 HTTPS 加密通信之前欢际,關(guān)鍵就是獲得這個(gè)密碼,方法是:
1.需要抓包的目標(biāo)上先安裝抓包軟件的證書(shū)
2.把這個(gè)抓包軟件自我簽發(fā)的證書(shū)設(shè)置為信任或放到根證書(shū)區(qū)域完全信任
3.在目標(biāo)上配置代理,把它所有的流量導(dǎo)向抓包軟件矾兜,抓包軟件截獲目標(biāo)發(fā)往服務(wù)器的通訊請(qǐng)求后蝌戒,就能偽裝成服務(wù)器趾撵,偽造一張證書(shū)發(fā)給客戶端另萤,因?yàn)槟阒芭渲貌⑿湃瘟宋业母C書(shū)兢哭,所以我現(xiàn)在偽造的證書(shū)被你驗(yàn)證通過(guò),讓客戶端以為就是真正的服務(wù)器給的證書(shū)和目標(biāo)通信(密碼自然就獲取到了)
4.同時(shí)也偽裝成目標(biāo)與真正的服務(wù)器通信返帕。
以Fiddler為例,F(xiàn)iddler抓取HTTPS過(guò)程
- Fiddler截獲客戶端發(fā)送給服務(wù)器的HTTPS請(qǐng)求荆萤,F(xiàn)iddler偽裝成客戶端向服務(wù)器發(fā)送請(qǐng)求進(jìn)行握手 。
- 服務(wù)器發(fā)回相應(yīng),F(xiàn)iddler獲取到服務(wù)器的CA證書(shū)偏竟, 用根證書(shū)(這里的根證書(shū)是CA認(rèn)證中心給自己頒發(fā)的證書(shū))公鑰進(jìn)行解密, 驗(yàn)證服務(wù)器數(shù)據(jù)簽名苫耸, 獲取到服務(wù)器CA證書(shū)公鑰儡陨。然后Fiddler偽造自己的CA證書(shū)(這里的CA證書(shū),也是根證書(shū)骗村,只不過(guò)是Fiddler偽造的根證書(shū)), 冒充服務(wù)器證書(shū)傳遞給客戶端瀏覽器胚股。
- 與普通過(guò)程中客戶端的操作相同笼痛,客戶端根據(jù)返回的數(shù)據(jù)進(jìn)行證書(shū)校驗(yàn)琅拌、生成密碼缨伊、用Fiddler偽造的證書(shū)公鑰加密,并生成HTTPS通信用的對(duì)稱密鑰enc_key进宝。
- 客戶端將重要信息傳遞給服務(wù)器刻坊, 又被Fiddler截獲。Fiddler將截獲的密文用自己偽造證書(shū)的私鑰解開(kāi)党晋, 獲得并計(jì)算得到HTTPS通信用的對(duì)稱密鑰enc_key谭胚。Fiddler將對(duì)稱密鑰用服務(wù)器證書(shū)公鑰加密傳遞給服務(wù)器。
- 與普通過(guò)程中服務(wù)器端的操作相同未玻,服務(wù)器用私鑰解開(kāi)后建立信任灾而,然后再發(fā)送加密的握手消息給客戶端。
- Fiddler截獲服務(wù)器發(fā)送的密文扳剿, 用對(duì)稱密鑰解開(kāi)旁趟, 再用自己偽造證書(shū)的私鑰加密傳給客戶端。
- 客戶端拿到加密信息后舞终,用公鑰解開(kāi)轻庆,驗(yàn)證HASH。握手過(guò)程正式完成敛劝,客戶端與服務(wù)器端就這樣建立了”信任“余爆。
- 在之后的正常加密通信過(guò)程中,F(xiàn)iddler如何在服務(wù)器與客戶端之間充當(dāng)?shù)谌吣兀?br>
服務(wù)器—>客戶端:Fiddler接收到服務(wù)器發(fā)送的密文夸盟, 用對(duì)稱密鑰解開(kāi)蛾方, 獲得服務(wù)器發(fā)送的明文。再次加密, 發(fā)送給客戶端桩砰。
10.客戶端—>服務(wù)端:客戶端用對(duì)稱密鑰加密拓春,被Fiddler截獲后,解密獲得明文亚隅。再次加密硼莽,發(fā)送給服務(wù)器端。由于Fiddler一直擁有通信用對(duì)稱密鑰enc_key煮纵, 所以在整個(gè)HTTPS通信過(guò)程中信息對(duì)其透明懂鸵。
3.常用抓包工具操作
參考鏈接:
https詳解
1.https://www.cnblogs.com/gugu33/p/14258329.html
2.https://blog.csdn.net/zxy5663/article/details/126254589
3.https://blog.csdn.net/yang12345
抓包工具教程
Fiddler抓包的詳細(xì)教學(xué)
https://blog.csdn.net/m0_73409141/article/details/126998267
Charles 抓包工具詳解
https://blog.csdn.net/eyishion/article/details/54177916
Fiddler Classic 替換本地JS并遠(yuǎn)程調(diào)試