SSL/TLS協議一般有兩種握手過程,一種是SSL握手,一種是會話恢復。前些時候在寫HTTP和HTTPS協議區別的時候介紹了SSL協議的相關理論知識,但多少還是有點抽象,今天我們可以通過wireshark抓包來分析下SSL握手的過程。
一、正常的握手過程
(一)過程如下
(二)wireshark抓到的對應的包如下
(三)具體的包分析
-
Client Hello
包中包含了Version(版本信息)、session ID Length(是否有保存會話),Cipher Suites(加密套件)
-
Server Hello
包中包含了TLS的version(版本)、Cipher suite(服務器選擇的加密組件)
-
Server發送Certificate
-
Server發送Server Key Exchange
這裏用的是DH協議來交換對稱加密的密鑰。
-
Server 發送Server Hello Done
只是簡單地告知客戶端,服務器的Hello信息已經發完了
-
Client發送Client Key Exchange
這裏也是用DH協議來交換對稱加密的密鑰
-
Client發送Change Cipher Spec
用來告知服務器,我接下來發的消息要用咱之前協商好的加密套件進行加密了。
-
Client發送Encrypted HandShake Message
包中包含一段加密信息,也就是流程圖中的finished消息。
-
Server發送New Session Ticket
分配給客戶端一個新的Session Ticket,和Session ID 類似。客戶端接收到後保存到本地,今後再和服務器通信時,只要發送這個Session Ticket就行了。
-
Server發送Change Cipher Spec
用來告知客戶端,我接下來發送的消息要用咱之前協商好的加密組件進行加密,你需要對其進行解密。
-
Server發送Encrypted HandShake Message
包中帶有一段加密的信息,即握手過程圖中的finished消息。
-
Client和Server進行正常通信
Client解密出信息後便知道已經和服務器建立好連接了,之後便開始發送Application Data。Server返回給它對應的加密信息。
二、會話恢復過程
會話恢復是指只要客戶端和服務器已經通信過一次,它們就可以通過會話恢復的方式來跳過整個握手階段二直接進行數據傳輸。
(一)恢復過程
(二)wireshark抓到的對應的包
(三)
-
客戶端發送Client Hello包
包中攜帶了上一次建立的session ID,並且session_ticket擴展字段爲0。說明我們這裏使用的是session ID機制。
-
服務器返回Server Hello信息
包中包含了當前服務器所使用的TLS版本,以及它支持的最高版本。
-
服務器發送Change Cipher Spec信息
告知客戶端,我接下來發送的消息要用咱之前協商好的密鑰和加密組件進行加密了。用於驗證之保存的session會話是有效的。
-
服務器發送finished信息
-
Client發送change_cipher_spec信息
告知服務器我將用咱之前協商好的密鑰套件和密鑰加密信息。
-
Client發送finished信息
會話恢復完成,建立SSL連接