https抓包分析——wireshark抓包分析TLSv2(詳細)

一、https建立連接流程

握手階段如上圖所示,可分爲5步(使用Diffie – Hellman算法):

第一步,瀏覽器給出協議版本號、一個客戶端生成的隨機數(Client random),以及客戶端支持的加密方法。

第二步,服務器確認雙方使用的加密方法,使用的tls版本號和一個隨機數。

第三部,並給出數字證書、以及一個服務器運行Diffie-Hellman算法生成的參數,比如pubkey。

第四部,瀏覽器獲取服務器發來的pubkey,計算出另一個pubkey,發給服務器。

第五部,服務器發給瀏覽器一個session ticket。

下面,我們使用wireshark抓包驗證上面的握手過程。

 

在瀏覽器中訪問https://baidu.com, 使用ip.addr==119.75.217.109&& ssl來過濾TLS包。結果如下圖所示。

 

圖一

 

我的Chrome瀏覽器一開始就連續給服務器發送三個相同的“Client Hello”包,這三個包除了源端口和隨機數不一樣外,其他的部分都相同。(圖三四五所示)爲什麼?後面我們會看到,最總這個connection只用了第一個“ClientHello”所建立的連接,也就是端口號爲4188。所以,之所以這樣做,很可能是爲了避免超時重傳從而影響用戶體驗。如下圖所示:

 

圖二

 

圖三

 

圖四

 

圖五

 

瀏覽器發送一個“ClientHello”消息,內容包括:支持的協議版本,比如TLS1.0版,一個客戶端生成的隨機數(稍後用於生成“會話密鑰”),支持的加密算法(如RSA公鑰加密)和支持的壓縮算法。

 

2.Server Hello:服務器將其SSL版本號、加密設置參數以及其它一些必要信息發送給客戶端,一個服務器生成的隨機數(稍後用於生成“對話密鑰”),確認使用的加密方法(如RSA公鑰加密),如下圖所示:

 

 

 

 

3.Certificate:服務器發一個證書給客戶端,該證書用於向客戶端確認服務器的身份。如果配置服務器的SSL需要驗證服務器的身份,會發送該消息(多數電子商務應用都需要服務器端身份驗證。服務器如果需要驗證客戶端的身份,那麼服務器會發一個“Certificate Request”給瀏覽器,而在很多實現中,服務器一般不需要驗證客戶端的身份)。在這個Certificate包中,還告訴我們服務器和瀏覽器是通過Diffie-Hellman算法來生成最終的密鑰(也就是Sessionkey),這個算法的具體介紹可以參考https://zh.wikipedia.org/wiki/%E8%BF%AA%E8%8F%B2-%E8%B5%AB%E7%88%BE%E6%9B%BC%E5%AF%86%E9%91%B0%E4%BA%A4%E6%8F%9B。其中下圖所示的pubkey是Diffie-Hellman算法中的一個參數,這個參數需要通過網絡傳給瀏覽器,即使它被截取也沒有影響安全性。

 

 

瀏覽器收到服務器發來的Certificate包來之後,運行Diffie-Hellman算法生成一個pubkey,然後發送給服務器。通過這一步和上面Certificate兩個步驟,服務器和瀏覽器分別交換了pubkey,這樣他們就可以分別生成了一個一樣的sessionkey(具體的實現過程可以參考Diffie-Hellman算法的實現),如果你還不是很理解這個算法,那麼這裏你只需要知道服務器和瀏覽器向對方發送了pubkey之後,雙方就可以計算出相同的密鑰了,並且這個過程沒有安全問題。

 

完成上面的步驟,可以說TLS的握手階段已經完成了,但是,服務器還會發送一個Session Ticket給瀏覽器。如下圖所示,這個sessionticket包含了這個ticket的生命週期是兩個小時(7200s)、它的id等等信息。這個sessionticket包有什麼做用呢?握手階段用來建立TLS連接。如果出於某種原因,對話中斷,就需要重新握手。客戶端只需發送一個服務器在上一次對話中發送過來的sessionticket。這個sessionticket是加密的,只有服務器才能解密,其中包括本次對話的主要信息,比如對話密鑰和加密方法。當服務器收到sessionticket以後,解密後就不必重新生成對話密鑰了。就可以繼續使用上一次的連接了。

 

 

通過上面的步驟,服務器和瀏覽器建立了安全的連接,下面便開始傳數據了。如下圖所示。我們可以看到,它使用的是http協議,數據被加密了。前面我們也提到,一開始瀏覽器直接發送了三個“ClientHello”包給服務器,而最終只使用了第一個成功建立起來的TLS(端口號爲4188)傳輸數據。


————————————————
版權聲明:本文爲CSDN博主「蝸牛愛上星星」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/liangyihuai/java/article/details/53098482

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