標籤:資料包 csdn version 百度 警告 輸入關鍵詞 接下來 形式 cli
基於wireshark抓包的分析
首先使用wireshark並且開啟瀏覽器,開啟百度(百度使用的是HTTPS加密),隨意輸入關鍵詞瀏覽。
我這裡將抓到的包進行過濾。過濾規則如下
ip.addr == 115.239.210.27 && ssl
下面用圖來描述一下上面抓包所看到的流程。
1. Client Hello
開啟抓包的詳細,如下。
不難看出,這一握手過程,用戶端以明文形式傳輸了如下資訊:
- 版本資訊(TLS 1.2)
- 隨機數
- Session ID(用於加快握手過程,可參考TLS會話複用)
- 加密套
- 壓縮演算法
- 其它一些擴充的(Extension),比如簽名演算法,伺服器名稱(本例為sp1.baidu.com);
Server hello
這一階段,服務端返回所選擇的協議版本(Version),加密套,壓縮演算法,隨機數,Session ID等;
from: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 隧道,讓Proxy 伺服器盲傳 HTTPS 資料,就得通過 CONNECT 方法告訴Proxy 伺服器要連哪台主機,哪個連接埠號碼,要不然Proxy 伺服器也是一臉懵逼。
所以 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路徑,這樣就可以解密了。
https wireshark抓包——要解密出未經處理資料光有ssl 認證還不行,還要有瀏覽器內的pre-master-secret(記憶體裡)