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選項,點擊即可查看解密明文信息;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章