測試或者開發調試的過程中,經常會進行抓包分析,并且裝上抓包工具的證書就能抓取 HTTPS 的數據包并顯示。由此就產生了一個疑問,為什么抓包工具裝上證書后就能抓到 HTTPS 的包并顯示呢?不是說 HTTPS 是加密傳輸的嗎?
今天這篇文章就來探究下上面這個問題,要解釋清楚這個問題,我會通過解答以下兩個問題來講述:
- HTTPS 到底是什么?
- 抓包工具抓包的原理?
HTTPS 到底是什么
HTTP 作為一種被廣泛使用的傳輸協議,也存在一些的缺點:
- 無狀態(可以通過 Cookie 或 Session 解決);
- 明文傳輸;
- 不安全;
為了解決 “明文” 和 “不安全” 兩個問題,就產生了 HTTPS。HTTPS 不是一種單獨的協議,它是由 HTTP + SSL/TLS 組成。
HTTP與HTTPS
所以要理解 HTTPS 就只需在 HTTP 的基礎上理解 SSL/TLS (TLS 是 SSL 的后續版本,現在一般使用 TLS),下面就來了解下 TLS 是什么。
TLS
?
「傳輸層安全性協議」(英語:「T」ransport 「L」ayer 「S」ecurity,縮寫:「TLS」)及其前身「安全套接層」(英語:「S」ecure 「S」ockets 「L」ayer,縮寫:「SSL」)是一種「安全協議」,目的是為互聯網通信提供安全及「數據完整性」保障。
?
TLS 由記錄協議、握手協議、警報協議、變更密碼規范協議、擴展協議等幾個子協議組成,綜合使用了對稱加密、非對稱加密、身份認證等許多密碼學前沿技術。
- 「記錄協議」 規定 TLS 收發數據的基本單位為:記錄。類似 TCP 里的 segment,所有其它子協議都需要通過記錄協議發出。
- 「警報協議」 的職責是向對方發出警報信息,類似于 HTTP 里的狀態碼。
- 「握手協議」 是 TLS 里最復雜的子協議,瀏覽器和服務器在握手過程中會協商 TLS 版本號、隨機數、密碼套件等信息,然后交換證書和密鑰參數,最終雙方協商得到會話密鑰,用于后續的混合加密系統。
- 「變更密碼規范協議」 用于告知對方,后續的數據都將使用加密傳輸。
TLS 的握手過程:
TLS握手過程
握手過程抓包顯示:
TLS抓包
TLS所傳輸的數據
交換密鑰的過程為:
- 客戶端發起一個請求給服務器;
- 服務器生成一對非對稱的公鑰(pubkey)和私鑰(privatekey),然后把公鑰附加到一個 CA數字證書 上返回給客戶端;
- 客戶端校驗該證書是否合法(通過瀏覽器內置的廠商根證書等手段校驗),然后從證書中提取出公鑰(pubkey);
- 客戶端生成一個隨機數(key),然后使用公鑰(pubkey)對這個隨機數進行加密后發送給服務器;
- 服務器利用私鑰(privatekey)對收到的隨機數密文進行解密得到 key ;
- 后續客戶端和服務器傳輸數據使用該 key 進行加密后再傳輸;
抓包工具抓包的原理
先來看看抓 HTTP 包的原理
HTTP抓包過程
- 首先抓包工具會提供出代理服務,客戶端需要連接該代理;
- 客戶端發出 HTTP 請求時,會經過抓包工具的代理,抓包工具將請求的原文進行展示;
- 抓包工具使用該原文將請求發送給服務器;
- 服務器返回結果給抓包工具,抓包工具將返回結果進行展示;
- 抓包工具將服務器返回的結果原樣返回給客戶端;
抓包工具就相當于個透明的中間人,數據經過的時候它一只手接到數據,然后另一只手把數據傳出去。
再來看看 HTTPS 的抓包
HTTPS抓包過程
這個時候抓包工具對客戶端來說相當于服務器,對服務器來說相當于客戶端。在這個傳輸過程中,客戶端會以為它就是目標服務器,服務器也會以為它就是請求發起的客戶端。
- 客戶端連接抓包工具提供的代理服務;
- 客戶端需要安裝抓包工具的根證書;
- 客戶端發出 HTTPS 請求,抓包工具模擬服務器與客戶端進行 TLS 握手交換密鑰等流程;
- 抓包工具發送一個 HTTPS 請求給客戶端請求的目標服務器,并與目標服務器進行 TLS 握手交換密鑰等流程;
- 客戶端使用與抓包工具協定好的密鑰加密數據后發送給抓包工具;
- 抓包工具使用與客戶端協定好的密鑰解密數據,并將結果進行展示;
- 抓包工具將解密后的客戶端數據,使用與服務器協定好的密鑰進行加密后發送給目標服務器;
- 服務器解密數據后,做對應的邏輯處理,然后將返回結果使用與抓包工具協定好的密鑰進行加密發送給抓包工具;
- 抓包工具將服務器返回的結果,用與服務器協定好的密鑰解密,并將結果進行展示;
- 抓包工具將解密后的服務器返回數據,使用與客戶端協定好的密鑰進行加密后發送給客戶端;
- 客戶端解密數據;
總結
- HTTPS 不是單獨的一個協議,它是 HTTP + SSL/TLS 的組合;
- TLS 是傳輸層安全性協議,它會對傳輸的 HTTP 數據進行加密,使用非對稱加密和對稱加密的混合方式;
- 抓包工具的原理就是“偽裝“,對客戶端偽裝成服務器,對服務器偽裝成客戶端;
- 使用抓包工具抓 HTTPS 包必須要將抓包工具的證書安裝到客戶端本地,并設置信任;
- HTTPS 數據只是在傳輸時進行了加密,而抓包工具是接收到數據后再重新加密轉發,所以抓包工具抓到的 HTTPS 包可以直接看到明文;
作者:tester_小天
來源:https://www.cnblogs.com/tester-xt/p/13174279.html