轉:http://www.cnblogs.com/afarmer/archive/2009/11/25/1610884.html
SSL消息按如下順序發送:
1.Client Hello
客戶發送服務器信息,包括它所支持的密碼組。密碼組中有密碼算法和鑰匙大小;
2.Server Hello
服務器選擇客戶和服務器都支持的密碼組到客戶。
3.Certificate
服務器發送一個證書或一個證書鏈到客戶端,一個證書鏈開始於服務器公共鑰匙證書並結束於證明權威的根證書。這個消息是可選的,但服務器證書需要時,必須使用它。
4.Certificate request
當服務器需要鑑別客戶時,它發送一個證書請求到客戶端。在網絡程序中,這個消息很少發送。
5.Server key exchange
服務器當發送來的公共鑰匙對鑰匙交換不是很充分時,發送一個服務器鑰匙交換消息。
6.Server hello done
服務器告訴客戶完成它的初始化流通消息。
7.Certificate
假如服務器需要一個客戶證書時,客戶端發送一個證書鏈。(只有在服務器需要客戶證書時)
8.Client key exchange
客戶產生用於對稱算法的一個鑰匙。對RSA客戶用服務器公共鑰匙加密這個鑰匙信息並把它送到服務器。
9.Certificate verify
在網絡程序中,這個消息很少發送,它主要是用來允許服務器結束對客戶的鑑別處理。當用這個消息時,客戶發送用密碼函數的數字簽名的信息到服務端,當服務端用公共鑰匙解密這個消息時,服務器能夠鑑別客戶。
10.Change cipher spec
客戶發送一個消息告訴服務器改變加密模式。
11.Finished
客戶告訴服務器它已準備安全數據通信。
12.Change cipher spec
服務器發送一個消息到客戶端並告訴客戶修改加密模式。
13.Finished
服務器告訴客戶端它已準備好安全數據通信。這是client-server握手協議最後一步。
14.Encrypted data
客戶同服務器用對稱加密算法和密碼函數,並用客戶發送到服務器的祕密鑰匙加密通信。
形象的可以用下面這幅圖來說明。
具體過程通過wireshark抓取ie6跟gmail的通信過程可以看出一二。
這是Client Hello內容:
這是Server Hello內容:
這是服務器傳輸的證書:
這樣就對SSL通信過程有了一個大致的瞭解。