1. 程式人生 > >https(ssl)協議以及wireshark抓包分析與解密

https(ssl)協議以及wireshark抓包分析與解密

根據之前一篇安全協議的分析中分析了ssl協議,先回顧下ssl協議的內容然後用wireshark來抓包看具體流量包內容。

         SSL協議棧位置介於TCP和應用層之間,分為SSL記錄協議層和SSL握手協議層。其中SSL握手協議層又分為SSL握手協議、SSL金鑰更改協議和SSL警告協議。SSL握手協議作用是在通訊雙方之間協商出金鑰,SSL記錄層的作用是定義如何對上層的協議進行封裝。SSL記錄協議將資料塊進行拆分壓縮,計算訊息驗證碼,加密,封裝記錄頭然後進行傳輸。

 

SSL握手:

1、  初始化階段。客戶端建立隨機數,傳送ClientHello 將隨機數連同自己支援的協議版本、加密演算法和壓縮演算法傳送給伺服器。伺服器回覆ServerHello將自己生成的隨機數連同選擇的協議版本、加密演算法和壓縮演算法給客戶端。

2、  認證階段。伺服器傳送ServerHello的同時可能將包含自己公鑰的證書傳送給客戶端(Certificate),並請求客戶端的證書(Certificate Request)。

3、  金鑰協商階段。客戶端驗證證書,如果收到Certificate Request則傳送包含自己公鑰的證書,同時對此前所有握手訊息進行雜湊運算,並使用加密演算法進行加密傳送給伺服器。同時,建立隨機數pre-master-secret並使用伺服器公鑰進行加密傳送。伺服器收到這個ClientKeyExchange之後解密得到pre-master-secret。伺服器和客戶端利用1階段的隨機數,能夠計算得出master-secret。

4、  握手終止。伺服器和客戶端分別通過ChangeCipherSpec訊息告知伺候使用master-secret對連線進行加密和解密,並向對方傳送終止訊息(Finished)。


HTTPS(Hypertext TransferProtocol over Secure Socket Layer,基於SSL的HTTP協議),埠443,需要向CA申請證書,通過SSL握手建立安全通道,利用協商金鑰對資料進行對稱加密通訊。

使用wireshark過濾ssl流量,可以看到有幾個明顯的ssl會話建立包,例如client hello,server hello等;

首先發送ClientHello 將隨機數連同自己支援的協議版本、加密演算法和壓縮演算法傳送給伺服器,流量包裡也能看到客戶端傳送支援的加密演算法

server hello包裡能看到服務端選擇的加密演算法;

伺服器傳送ServerHello的同時可能將包含自己公鑰的證書傳送給客戶端(Certificate);

客戶端驗證證書,如果收到Certificate Request則傳送包含自己公鑰的證書,同時對此前所有握手訊息進行雜湊運算,並使用加密演算法進行加密傳送給伺服器;

wireshark抓到的https流量包經過了ssl加密,那麼我們如何才能檢視解密的資料呢?Firefox和Chrome瀏覽器都支援用日記檔案的方式記錄下用來加密TLS資料包對稱會話祕鑰的,可以通過配置sslkeyfile的連結,將wireshark的中ssl解密指向該檔案即可。環境變數中新建使用者變數SSLKEYLOGFILE=/sslkey.log檔案,之後再wireshark中ssl配置中制定該檔案位置即可,具體配置請參考:

配置解密ssl參考連結--http://www.2cto.com/article/201502/377678.html

配置完成,重啟瀏覽器之後,就會發現wireshark中多了一個Decrypted SSL data選項,點選即可檢視解密明文資訊;