https wireshark抓包——要解密出原始數據光有ssl 證書還不行,還要有瀏覽器內的pre-master-secret(內存里)


基於wireshark抓包的分析

首先使用wireshark並且打開瀏覽器,打開百度(百度使用的是HTTPS加密),隨意輸入關鍵詞瀏覽。

我這里將抓到的包進行過濾。過濾規則如下

ip.addr == 115.239.210.27 && ssl
  • 1

這里寫圖片描述

下面用圖來描述一下上面抓包所看到的流程。
這里寫圖片描述

1. Client Hello

打開抓包的詳細,如下。
這里寫圖片描述

不難看出,這一握手過程,客戶端以明文形式傳輸了如下信息:

  1. 版本信息(TLS 1.2)
  2. 隨機數
  3. Session ID(用於加快握手過程,可參考TLS會話復用)
  4. 加密套
  5. 壓縮算法
  6. 其它一些擴展的(Extension),比如簽名算法,服務器名稱(本例為sp1.baidu.com);

Server hello

這里寫圖片描述

這一階段,服務端返回所選擇的協議版本(Version),加密套,壓縮算法,隨機數,Session ID等;

from:https://blog.csdn.net/u010536377/article/details/78989931

 

數據傳輸

經過了 SSL 握手后,服務端的身份認證成功,協商出了加密算法為 AES,密鑰為 xxxxx(客戶端和服務端拿三個隨機值用相同算法計算出來的,並沒有明文傳輸)。一切准備就緒。

SSL 握手成功,已經可以對接下來的數據加密了,接下來各種應用層協議都可以加密傳輸。

Application Data

應用數據傳輸消息。因為這里是 HTTPS,所以可以對 HTTP 應用協議數據加密然后傳輸了。

Secure Sockets Layer TLSv1.2 Record Layer: Application Data Protocol: http Content Type: Application Data (23) Version: TLS 1.2 (0x0303) Length: 1072 Encrypted Application Data: 6d9b3c9089271630c33506fe28cd6a61fed1f4bd2808f537... 

從這里,不知道密鑰是無法知道這里傳輸的是什么數據,連傳輸的是什么協議的內容都不知道

所以之前創建 SSL 隧道,讓代理服務器盲傳 HTTPS 數據,就得通過 CONNECT 方法告訴代理服務器要連哪台主機,哪個端口號,要不然代理服務器也是一臉懵逼。

所以 SSL 協議是很獨立的,這里是對 HTTP 進行了加密,也可以對其他協議進行加密。它就像是 TCP 和應用層協議的中間層,為上層協議提供了加密的數據傳輸。

Encryted Alert

SSL 警告消息,因為是加密的內容,所以單從 Wireshark 看不出警報的內容。

Secure Sockets Layer TLSv1.2 Record Layer: Encrypted Alert Content Type: Alert (21) Version: TLS 1.2 (0x0303) Length: 48 Alert Message: Encrypted Alert 

但因為警報消息經常只是客戶端用來提示服務端 SSL 傳輸結束,對照抓包到的內容確實如此。所以這里只是 SSL 傳輸結束的一個信號。

發出了 Encryted Alert 后客戶端數據傳輸完畢,准備進入四次揮手斷開 TCP 連接。


from:https://www.jianshu.com/p/cf8c2f2cd18a

為什么Wireshark無法解密HTTPS數據

密鑰交換算法

密鑰交換算法目前常用的有RSA和Diffie-Hellman。
對於密鑰交換使用RSA算法,pre-master-secret由客戶端生成,並使用公鑰加密傳輸給服務器。
對於密鑰交換使用Diffie-Hellman算法,pre-master-secret則通過在Key Exchange階段交換的信息,由各自計算出pre-master-secret。所以pre-master-secret沒有存到硬盤,也沒有在網絡上傳輸,wireshark就無法獲取session key,也就無法解密應用數據。那我們是否可以反向計算出pre-master-secret呢?理論上可以,但是非常困難。
對Diffie-Hellman算法感興趣的可以參考https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

解決方法

說了這么多,究竟有什么辦法可以讓wireshark解密數據?我們可以通過下面幾種方法來使wireshark能解密https數據包。
1. 中間人攻擊;
2. 設置web服務器使用RSA作為交換密鑰算法;
3. 如果是用chrome,firefox,可以設置導出pre-master-secret log,然后wireshark設置pre-master-secret log路徑,這樣就可以解密了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM