爲何用抓包工具看HTTPS包是明文的

測試或者開發調試的過程當中,常常會進行抓包分析,而且裝上抓包工具的證書就能抓取 HTTPS 的數據包並顯示。由此就產生了一個疑問,爲何抓包工具裝上證書後就能抓到 HTTPS 的包並顯示呢?不是說 HTTPS 是加密傳輸的嗎?web

今天這篇文章就來探究下上面這個問題,要解釋清楚這個問題,我會經過解答如下兩個問題來說述:瀏覽器

  1. HTTPS 究竟是什麼?
  2. 抓包工具抓包的原理?

HTTPS 究竟是什麼

HTTP 做爲一種被普遍使用的傳輸協議,也存在一些的缺點:安全

  1. 無狀態(能夠經過 Cookie 或 Session 解決);
  2. 明文傳輸;
  3. 不安全;

爲了解決 「明文」 和 「不安全」 兩個問題,就產生了 HTTPSHTTPS 不是一種單獨的協議,它是由 HTTP + SSL/TLS 組成。服務器

HTTP與HTTPS
HTTP與HTTPS

因此要理解 HTTPS 就只需在 HTTP 的基礎上理解 SSL/TLS (TLS 是 SSL 的後續版本,如今通常使用 TLS),下面就來了解下 TLS 是什麼。編輯器

TLS

傳輸層安全性協議(英語:Transport Layer Security,縮寫:TLS)及其前身安全套接層(英語:Secure Sockets Layer,縮寫:SSL)是一種安全協議,目的是爲互聯網通訊提供安全及數據完整性保障。工具

TLS 由記錄協議、握手協議、警報協議、變動密碼規範協議、擴展協議等幾個子協議組成,綜合使用了對稱加密、非對稱加密、身份認證等許多密碼學前沿技術。測試

  • 記錄協議 規定 TLS 收發數據的基本單位爲:記錄。相似 TCP 裏的 segment,全部其它子協議都須要經過記錄協議發出。
  • 警報協議 的職責是向對方發出警報信息,相似於 HTTP 裏的狀態碼。
  • 握手協議TLS 裏最複雜的子協議,瀏覽器和服務器在握手過程當中會協商 TLS 版本號、隨機數、密碼套件等信息,而後交換證書和密鑰參數,最終雙方協商獲得會話密鑰,用於後續的混合加密系統。
  • 變動密碼規範協議 用於告知對方,後續的數據都將使用加密傳輸。

TLS 的握手過程:加密

TLS握手過程
TLS握手過程

握手過程抓包顯示:url

TLS抓包
TLS抓包
TLS所傳輸的數據
TLS所傳輸的數據

交換密鑰的過程爲:spa

  1. 客戶端發起一個請求給服務器;
  2. 服務器生成一對非對稱的公鑰( pubkey)和私鑰( privatekey),而後把公鑰附加到一個 CA數字證書 上返回給客戶端;
  3. 客戶端校驗該證書是否合法(經過瀏覽器內置的廠商根證書等手段校驗),而後從證書中提取出公鑰( pubkey);
  4. 客戶端生成一個隨機數( key),而後使用公鑰( pubkey)對這個隨機數進行加密後發送給服務器;
  5. 服務器利用私鑰( privatekey)對收到的隨機數密文進行解密獲得 key ;
  6. 後續客戶端和服務器傳輸數據使用該 key 進行加密後再傳輸;

抓包工具抓包的原理

先來看看抓 HTTP 包的原理

HTTP抓包過程
HTTP抓包過程
  1. 首先抓包工具會提供出代理服務,客戶端須要鏈接該代理;
  2. 客戶端發出 HTTP 請求時,會通過抓包工具的代理,抓包工具將請求的原文進行展現;
  3. 抓包工具使用該原文將請求發送給服務器;
  4. 服務器返回結果給抓包工具,抓包工具將返回結果進行展現;
  5. 抓包工具將服務器返回的結果原樣返回給客戶端;

抓包工具就至關於個透明的中間人,數據通過的時候它一隻手接到數據,而後另外一隻手把數據傳出去。

再來看看 HTTPS 的抓包

HTTPS抓包過程
HTTPS抓包過程

這個時候抓包工具對客戶端來講至關於服務器,對服務器來講至關於客戶端。在這個傳輸過程當中,客戶端會覺得它就是目標服務器,服務器也會覺得它就是請求發起的客戶端。

  1. 客戶端鏈接抓包工具提供的代理服務;
  2. 客戶端須要安裝抓包工具的根證書;
  3. 客戶端發出 HTTPS 請求,抓包工具模擬服務器與客戶端進行 TLS 握手交換密鑰等流程;
  4. 抓包工具發送一個 HTTPS 請求給客戶端請求的目標服務器,並與目標服務器進行 TLS 握手交換密鑰等流程;
  5. 客戶端使用與抓包工具協定好的密鑰加密數據後發送給抓包工具;
  6. 抓包工具使用與客戶端協定好的密鑰解密數據,並將結果進行展現;
  7. 抓包工具將解密後的客戶端數據,使用與服務器協定好的密鑰進行加密後發送給目標服務器;
  8. 服務器解密數據後,作對應的邏輯處理,而後將返回結果使用與抓包工具協定好的密鑰進行加密發送給抓包工具;
  9. 抓包工具將服務器返回的結果,用與服務器協定好的密鑰解密,並將結果進行展現;
  10. 抓包工具將解密後的服務器返回數據,使用與客戶端協定好的密鑰進行加密後發送給客戶端;
  11. 客戶端解密數據;

總結

  • HTTPS 不是單獨的一個協議,它是 HTTP + SSL/TLS 的組合;
  • TLS 是傳輸層安全性協議,它會對傳輸的 HTTP 數據進行加密,使用非對稱加密和對稱加密的混合方式;
  • 抓包工具的原理就是「假裝「,對客戶端假裝成服務器,對服務器假裝成客戶端;
  • 使用抓包工具抓 HTTPS 包必需要將抓包工具的證書安裝到客戶端本地,並設置信任;
  • HTTPS 數據只是在傳輸時進行了加密,而抓包工具是接收到數據後再從新加密轉發,因此抓包工具抓到的 HTTPS 包能夠直接看到明文;
相關文章
相關標籤/搜索