前言
面試官:面試官問我iOS開發過程中使用了那些抓包工具?
回覆:Charles,Wireshark(可以抓取長連接包)等工具
面試官:然後緊接着面試官問我,有沒有抓過https的包?
回覆:使用Charles 工具抓過,
面試官:那你說說Charles抓https的抓包原理?
回覆:如果直接問https的原理(可查看http與https的愛恨情仇),還可以直接回復,問了個這個就懵逼了;之前確實沒有仔細考慮過這個問題
Charles抓包原理
經過自己的考慮和網上搜索查詢之後得出下面結論,
圖片爲挪用別人博客,感覺很完美,就直接使用了附上博客鏈接:https://blog.csdn.net/fox64194167/article/details/80387696
- 客戶端向服務器發起HTTPS請求
- Charles攔截客戶端的請求,僞裝成客戶端向服務器進行請求
- 服務器向“客戶端”(實際上是Charles)返回服務器的CA證書
- Charles攔截服務器的響應,獲取服務器證書公鑰,然後自己製作一張證書,將服務器證書替換後發送給客戶端。
- 客戶端接收到“服務器”(實際上是Charles)的證書後,生成一個對稱密鑰,用Charles的公鑰加密,發送給“服務器”(Charles)
- Charles攔截客戶端的響應,用自己的私鑰解密對稱密鑰(Charles拿到了對稱密鑰),然後用服務器證書公鑰加密,發送給服務器。
- 服務器用自己的私鑰解密對稱密鑰,向“客戶端”(Charles)發送響應
- Charles攔截服務器的響應,替換成自己的證書後發送給客戶端
- 至此,連接建立,Charles拿到了 服務器證書的公鑰 和 客戶端與服務器協商的對稱密鑰,之後就可以解密或者修改加密的報文了。
還有個問題就是問抓取長連接:可以使用工具Wireshark,
使用過程程需要連接usb,並且在終端授權:rvictl -s 手機UUID(可以使用xcode,iTools 等工具查看)
總結:
HTTPS抓包的原理還是挺簡單的,簡單來說,就是Charles作爲“中間人代理”,拿到了 服務器證書公鑰 和 HTTPS連接的對稱密鑰,前提是客戶端選擇信任並安裝Charles的CA證書,否則客戶端就會“報警”並中止連接。這樣看來,HTTPS還是很安全的。