使用Wireshark查看HTTPS中TLS握手過程


通過使用Wireshark抓包分析TLS握手的過程,可以更容易理解和驗證TLS協議,本文將先介紹Wireshark解密HTTPS流量的方法,然后分別驗證TLS握手過程和TLS會話恢復的過程。

一、使用Wireshark解密HTTPS流量的方法

TLS對傳輸數據進行了加密,直接使用Wireshark查看,TLS協議之上的協議細節(應用層 HTTP)完全看不到,因此需要解密后,才能查看。解密方法如下:

1.在Wireshark官網下載系統對應的Wireshark安裝包,進行安裝

2.增加系統環境變量設置(計算機 -- 右鍵 -- 屬性--高級系統設置--高級--環境變量--系統變量--新建)

變量名:SSLKEYLOGFILE

變量值:%USERPROFILE%\sslkeysENV.pms

3.在CMD使用命令行啟動chrome瀏覽器

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --ssl-key-log-file=%USERPROFILE%\sslkeysARG.pms

4.設置Wireshark

(1)打開Wireshark--編輯--首選項--Protocols--SSL

(2)設置(Pre)-Master-Secret log filename

C:\Users\用戶名\sslkeysARG.pms  (路徑 就是 %USERPROFILE%的值)

(3)設置SSL debug file (此步驟可選,用來記錄解密的日志)

C:\Users\用戶名\ssl.log (路徑 就是 %USERPROFILE%的值)

5.此時便可以在Wireshark中查看HTTPS的流量了

下面是解密前后對比圖:

二、完整的TLS握手過程

上圖是完整的TLS握手的過程,TLS運行在傳輸層協議之上,藍色的部分是TCP握手階段。假設服務器與客戶端的傳輸時間是28ms。我們通過Wireshark的抓包來逐條分析:

1. 在0ms,客戶端發送SYN分組開始TCP握手;

2. 在28ms,服務器響應SYN-ACK分組;

3.在56ms,客戶端確認SYN-ACK;

 同時,立即發送Client Hello,也是TLS握手的第一步,將TLS的版本、所支持的加密套件列表、支持或希望的使用的TLS擴展選項發送給服務器。

其中server_name 為SNI(Server Name Indication,服務器名稱指示)擴展,與HTTP中Host首部相似,在握手之初就指定要連接的主機名。對於相同IP服務不同域名的情況,就可以使用SNI區分不同的域名。

其中Application Layer Protocol Negotiation 為ALPN應用層協議協商擴展,在TLS握手的同時協商應用協議,節省HTTP Upgrade機制帶來的額外的往返時間。

4. 在84ms,服務器發送Server Hello,Certificate,(Server Key Exchange),Server Hello Done

服務器取得TLS協議版本用於之后的通信,從客戶端提供的加密套件里選擇一個,選擇HTTP協議版本,附上自己的證書,發送給客戶端。作為可選項,服務器也可以發送一個請求,要求客戶端提供證書及其他TLS擴展參數。

5. 在112ms,客戶端發送Client Key Exchange,Change Cipher Spec,Finished

客戶端生成一個新的對稱密鑰,用服務器的公鑰加密,發送給服務器,告知服務器可以開始加密通信了。

6. 在140ms,服務器端發送(New Session Ticket),Change Cipher Spec,Finished

服務器解密出客戶端發來的對稱密鑰,通過驗證消息的MAC檢查消息的完整性,再返回給客戶端一個加密的“Finished”消息。因為是第一次建立會話,還發送了New Session Ticket。

7. 在168ms,開始傳輸應用層數據。

三、簡短的TLS握手過程

為了節省握手往返次數,TLS提供了恢復功能,通過服務器端的會話標識符或客戶端的會話記錄單機制,也被稱為會話緩存或無狀態恢復機制,減少協商次數。

1. 在0ms,客戶端發送SYN分組開始TCP握手;

2. 在28ms,服務器響應SYN-ACK分組;

3.在56ms,客戶端確認SYN-ACK;

 同時,立即發送Client Hello,也是TLS握手的第一步,將TLS的版本、Session ID、所支持的加密套件列表、支持或希望的使用的TLS擴展選項發送給服務器。

4. 在84ms,服務器發送Server Hello,Change Cipher Spec,Server Hello Done

5. 在112ms,客戶端發送Change Cipher Spec,Finished

同時,立即可以傳輸應用層數據。

 

參考資料:

1.https://hpbn.co/

2.https://stackoverflow.com/questions/42332792/chrome-not-firefox-are-not-dumping-to-sslkeylogfile-variable

3.https://imququ.com/post/http2-traffic-in-wireshark.html


免責聲明!

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



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