天天看點

Wireshark對HTTPS資料的解密

本文來自網易雲社群

之前有介紹《wireshark抓包分析——TCP/IP協定》,然後某天有人問我,示例裡是HTTP的,如果是HTTPS,你可以抓包分析嗎?基于好奇,我查閱了下相關資料,把一些淺見分享給大家。在講HTTPS的解密之前先來看下HTTPS與HTTP的不同之處,HTTPS是在TCP/IP與HTTP之間,增加一個安全傳輸層協定,而這個安全傳輸層協定一般用SSL或TLS,類似于下圖。即HTTPS=HTTP+SSL/TLS。

Wireshark對HTTPS資料的解密

SSL協定分為SSL記錄協定層和SSL握手協定層。SSL握手協定建立在SSL記錄協定之上,用于在實際的資料傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。SSL記錄協定将資料塊進行拆分壓縮,計算消息驗證碼,加密,封裝記錄頭然後進行傳輸。如下圖顯示,這裡不展開,有興趣的童鞋可以繼續深入了解。

應用層協定
SSL握手協定
SSL記錄協定
TCP
IP

先回顧下Wireshark對HTTP請求分析,一般是通過標明資料右鍵滑鼠,檢視Follow TCP Stream。

Wireshark對HTTPS資料的解密

即可以看到請求的詳細内容了。

Wireshark對HTTPS資料的解密

下面來看看Wireshark對HTTPS請求資料是如何分析的。先抓包看下,以通路CSDN首頁為例,可以看到抓取的資料包如下:

Wireshark對HTTPS資料的解密

根據截圖會發現2個略“神奇”的東東,(1)雖然過濾條件設定了SSL,但過濾結果滿屏都是TLS的身影,随機找了其他一些網站進行抓包也都是TLS。查閱了下資料,發現TLS是以建立在SSL V3.0的基礎上,兩者的加密算法和MAC算法都不一樣,而協定本身差異性不大。TLS協定也是由兩層組成: TLS 記錄協定(TLS Record)和 TLS 握手協定(TLS Handshake)。較低的層為 TLS 記錄協定。忽略協定的差異性,後面就拿TLS來解密分析。現在來看另外1個滿屏滿眼的東東。(2)好多hello呀,Client Hello和Server Hello好多,這是什麼呢?這是TLS的握手。整個握手階段如下,可分為5步。

第一步,浏覽器給出協定版本号、一個用戶端生成的随機數,以及用戶端支援的加密方法。

第二步,伺服器确認雙方使用的加密方法,使用的tls版本号和一個随機數。

第三部,并給出數字證書、以及一個伺服器運作Diffie-Hellman算法生成的參數,比如pubkey。

第四部,浏覽器擷取伺服器發來的pubkey,計算出另一個pubkey,發給伺服器。

第五部,伺服器發給浏覽器一個session ticket。

Wireshark對HTTPS資料的解密

具體握手過程可以通過Wireshark的抓包一步步驗證,這裡不再詳述,還是專心來看看如何使用Wireshark來進行資料解密。我們現在擷取到的Wireshark抓包資料在握手完成之後,還是各種TLSv1.2的東東,都是加密後的資料。

Wireshark對HTTPS資料的解密

解密方式介紹我覺得最簡單的,通過浏覽器儲存的TLS 會話中使用的對稱密鑰來進行資料解密。在浏覽器接收到資料之後,會使用秘鑰對資料進行解密,部分浏覽器會在某個地方會存儲這個密鑰,我們隻要擷取浏覽器中的會話密鑰就能解密資料。以windows系統+Chrome浏覽器為例,首先要導出浏覽器存儲的密鑰,通過 計算機屬性——進階系統設定——環境變量,建立一個變量名“SSLKEYLOGFILE”的變量,變量值是導出的密鑰具體檔案位址。

Wireshark對HTTPS資料的解密

設定後可以通過Chrome浏覽器打開任意一個HTTPS網址,此時檢視變量值對應路徑,已經生成sslkey.log。

Wireshark對HTTPS資料的解密

密鑰成功導出到本地啦。現在可以将密鑰應用到Wireshark了。具體路徑如下:菜單欄Edit——Preferences——Protocols——SSL(注意,不論是SSL還是TLS這裡都是SSL,沒有單獨的TLS選項),在(Pre)-Master-Secret log filename中選擇剛才設定的變量值。

Wireshark對HTTPS資料的解密

配置完成,看下效果:

Wireshark對HTTPS資料的解密

看到有HTTP了,之前都是TLSv1.2。同時,WireShark下面會有一個“Decrypted SSL data”即已解密的SSL Data的标簽,點選之後你就可以如上圖所示的看到已經解密的TLS資料包的資訊了。

覺得這樣太難看了?OK,也可以像HTTP一樣,通過滑鼠右鍵在菜單欄中選擇“Follow SSL Stream”,檢視完整的HTTPS解密之後的請求資料哦。

Wireshark對HTTPS資料的解密
Wireshark對HTTPS資料的解密

除此之外,上面還有很多TLSv1.2的東東,比如:client_key_exchange、Session Ticket,這是最初提到過的TLS握手過程的第四步和第五步,并不是請求資料包的内容,是以看到其中像是沒有解密的内容也不要奇怪哦。

Wireshark對HTTPS資料的解密

網易雲新使用者大禮包:https://www.163yun.com/gift

本文來自網易實踐者社群,經作者李莉授權釋出。

相關文章:

【推薦】 3分鐘掌握一個有數小技能:收入貢獻分析

上一篇: Mac 安裝hadoop
下一篇: PSE選擇