Wireshark对HTTPS数据的解密
之前有介紹《Wireshark抓包分析——TCP/IP協議》,那如果是HTTPS協議,可以抓包分析嗎?基于好奇,查閱了下相關資料分享給大家。在講解密之前先來看下HTTPS與HTTP的不同之處,HTTPS是在TCP/IP與HTTP之間,增加一個安全傳輸層協議,而這個安全傳輸層協議一般用SSL或TLS,類似于下圖。即我們所說的HTTPS=HTTP+SSL/TLS。
SSL協議分為SSL記錄協議層和SSL握手協議層。SSL握手協議建立在SSL記錄協議之上,用于在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。SSL記錄協議將數據塊進行拆分壓縮,計算消息驗證碼,加密,封裝記錄頭然后進行傳輸。如下圖顯示,這里不展開,有興趣的童鞋可以繼續自行深入了解。
應用層協議 |
SSL握手協議 |
SSL記錄協議 |
TCP |
IP |
Wireshark在對HTTP請求分析時,一般是通過選定數據右鍵鼠標,查看Follow TCP Stream。
即可以看到請求的詳細內容了。
Wireshark對HTTPS請求數據又是如何分析的呢,實際操作了下,以訪問CSDN首頁為例,可以看到抓取的數據包如下:
根據截圖會發現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的抓包一步步驗證,這里不再詳述,還是專心來看看如何使用Wireshark來數據解密。我們現在獲取到的Wireshark抓包數據在握手完成之后,還是各種TLSv1.2的東東,都是加密后的數據。
解密方式有好幾種,介紹我覺得最簡單的,通過瀏覽器保存的TLS 會話中使用的對稱密鑰來進行數據解密。在瀏覽器接收到數據之后,會使用秘鑰對數據進行解密,部分瀏覽器會在某個地方會存儲這個密鑰,我們只要獲取瀏覽器中的會話密鑰就能解密數據。以windows系統+Chrome瀏覽器為例,首先要導出瀏覽器存儲的密鑰,通過計算機屬性——高級系統設置——環境變量,新建一個變量名“SSLKEYLOGFILE”的變量,變量值是導出的密鑰具體文件地址。
設置后可以通過Chrome瀏覽器打開任意一個HTTPS網址,此時查看變量值對應路徑,已經生成sslkey.log。
密鑰成功導出到本地啦。現在可以將密鑰應用到Wireshark了。具體路徑如下:菜單欄Edit——Preferences——Protocols——SSL(注意,不論是SSL還是TLS這里都是SSL,沒有單獨的TLS選項),在(Pre)-Master-Secretlog filename中選擇剛才設置的變量值。
配置完成,看下效果:
看到有HTTP了,之前都是TLSv1.2。同時,WireShark下面會有一個“Decrypted SSL data”即已解密的SSL Data的標簽,點擊之后你就可以如上圖所示的看到已經解密的TLS數據包的相信信息了。
覺得這樣太難看了?OK,也可以像HTTP一樣,通過鼠標右鍵在菜單欄中選擇“Follow SSL Stream”,查看完整的HTTPS解密之后的請求數據哦。
除此之外,上面還有很多TLSv1.2的東東,比如:client_key_exchange、Session Ticket,這是最初提到過的TLS握手過程的第四步和第五步,并不是請求數據包的內容,因此看到其中像是沒有解密的內容也不要奇怪哦。
——推薦閱讀——
網易云信IM小程序上線?我們是這么做的!>>
全面復盤!深度剖析直播答題產品架構的難點與坑>>
如何快速設計短信驗證碼>>
如何做好Android 端音視頻測試>>
總結
以上是生活随笔為你收集整理的Wireshark对HTTPS数据的解密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【iOS篇】从容面对App崩溃
- 下一篇: React事件系统研究总结