測試或者開發調試的過程當中,常常會進行抓包分析,而且裝上抓包工具的證書就能抓取 HTTPS
的數據包並顯示。由此就產生了一個疑問,爲何抓包工具裝上證書後就能抓到 HTTPS
的包並顯示呢?不是說 HTTPS
是加密傳輸的嗎?web
今天這篇文章就來探究下上面這個問題,要解釋清楚這個問題,我會經過解答如下兩個問題來說述:瀏覽器
HTTP
做爲一種被普遍使用的傳輸協議,也存在一些的缺點:安全
爲了解決 「明文」 和 「不安全」 兩個問題,就產生了 HTTPS
。HTTPS
不是一種單獨的協議,它是由 HTTP
+ SSL/TLS
組成。服務器
因此要理解 HTTPS
就只需在 HTTP
的基礎上理解 SSL/TLS
(TLS 是 SSL 的後續版本,如今通常使用 TLS),下面就來了解下 TLS
是什麼。編輯器
❝「傳輸層安全性協議」(英語:「T」ransport 「L」ayer 「S」ecurity,縮寫:「TLS」)及其前身「安全套接層」(英語:「S」ecure 「S」ockets 「L」ayer,縮寫:「SSL」)是一種「安全協議」,目的是爲互聯網通訊提供安全及「數據完整性」保障。工具
❞
TLS
由記錄協議、握手協議、警報協議、變動密碼規範協議、擴展協議等幾個子協議組成,綜合使用了對稱加密、非對稱加密、身份認證等許多密碼學前沿技術。測試
TLS
收發數據的基本單位爲:記錄。相似
TCP
裏的
segment
,全部其它子協議都須要經過記錄協議發出。
HTTP
裏的狀態碼。
TLS
裏最複雜的子協議,瀏覽器和服務器在握手過程當中會協商
TLS
版本號、隨機數、密碼套件等信息,而後交換證書和密鑰參數,最終雙方協商獲得會話密鑰,用於後續的混合加密系統。
TLS
的握手過程:加密
握手過程抓包顯示:url
交換密鑰的過程爲:spa
pubkey
)和私鑰(
privatekey
),而後把公鑰附加到一個
CA數字證書
上返回給客戶端;
pubkey
);
key
),而後使用公鑰(
pubkey
)對這個隨機數進行加密後發送給服務器;
privatekey
)對收到的隨機數密文進行解密獲得
key
;
key
進行加密後再傳輸;
先來看看抓 HTTP
包的原理
HTTP
請求時,會通過抓包工具的代理,抓包工具將請求的原文進行展現;
抓包工具就至關於個透明的中間人,數據通過的時候它一隻手接到數據,而後另外一隻手把數據傳出去。
再來看看 HTTPS
的抓包
這個時候抓包工具對客戶端來講至關於服務器,對服務器來講至關於客戶端。在這個傳輸過程當中,客戶端會覺得它就是目標服務器,服務器也會覺得它就是請求發起的客戶端。
HTTPS
請求,抓包工具模擬服務器與客戶端進行
TLS
握手交換密鑰等流程;
HTTPS
請求給客戶端請求的目標服務器,並與目標服務器進行
TLS
握手交換密鑰等流程;
HTTPS
不是單獨的一個協議,它是
HTTP
+
SSL/TLS
的組合;
TLS
是傳輸層安全性協議,它會對傳輸的
HTTP
數據進行加密,使用非對稱加密和對稱加密的混合方式;
HTTPS
包必需要將抓包工具的證書安裝到客戶端本地,並設置信任;
HTTPS
數據只是在傳輸時進行了加密,而抓包工具是接收到數據後再從新加密轉發,因此抓包工具抓到的
HTTPS
包能夠直接看到明文;