來源:www-01.ibm.com/support/docview.wss?uid=swg27050151&aid=1
一、總覽

注:(1)*表示可選或情境相關(guān)的消息
?????? (2)[Change Cipher Spec]不是TLS握手消息但是是獨立的,是一種TLS協(xié)議內(nèi)容類型,用于幫助第三方避免流程停頓。
1、TLS Client Hello
(1)可能是SSL3.0,TLS1.0,TLS1.1,TLS1.2
(2)包含能夠使用的密碼套件列表
(3)包含擴(kuò)展
(4)可能包含SSL會話ID(如果恢復(fù))
2、TLS Server Hello
(1)包含證書公共密鑰
(2)包含期望的密鑰套件
(3)包含密鑰交換
(4)可能請求證書(相互的SSL)
TLS客戶端和服務(wù)器根據(jù)客戶端呈現(xiàn)的密碼套件列表和服務(wù)器端的密碼套件偏好協(xié)商密碼套件。
客戶端和服務(wù)器將協(xié)商加密密鑰,并且客戶端將接受一個SSL會話。
二、完整的TLS握手

1)套接字使用TCP握手進(jìn)行初始化
2)客戶端發(fā)送"client hello"消息
3)服務(wù)器使用"server hello"消息進(jìn)行響應(yīng),并附帶"certificate"和"server hello done"消息
4)客戶端使用"client key exchange",“change cipher spec”和"Encrypted message"消息進(jìn)行響應(yīng)
5)服務(wù)器端使用“change cipher spec”和“encrypted handshakemessage”進(jìn)行響應(yīng)
6)TLS握手完成,并且服務(wù)使用加密數(shù)據(jù)發(fā)送“應(yīng)用層數(shù)據(jù)”
三、TLS客戶端Hello消息-版本信息

TLS Client Hello包含兩個版本信息:
1、記錄層自己的版本信息
2、客戶端 hello自己的版本信息(handshake type中版本信息)
版本信息的不匹配通常不會引起問題(NIST/FIPS服務(wù)器會引起問題)。請記住有效的版本信息是handshake type中版本信息
四、TLS客戶端Hello-密碼套件

以上是客戶端發(fā)送給服務(wù)器端的部分密碼套件列表。在RFC5246的7.4.1.2節(jié)中描述:這是一個由客戶端支持的加密選項,客戶端的首要偏好優(yōu)先(排在第一位)。
五、TLS客戶端HELLO-擴(kuò)展

最后,Client Hello能夠發(fā)送擴(kuò)展。
下面有一些擴(kuò)展將影響服務(wù)器如何進(jìn)行響應(yīng):
1、簽名算法(signature algorithms):將幫助確定客戶端可以接受的證書類型;
2、服務(wù)器名稱指示(server name indiction):如果存在多個可用的證書,用于確定那個證書可用
六、TLS服務(wù)器端Hello-握手協(xié)議

TLS服務(wù)器Hello常常是一個包含多個handshake消息的記錄層,通常被表示為“TLSv1.2 Record layer”
TLS服務(wù)器Hello握手協(xié)議"server hello "通常包含:
1)期望的SSL會話ID
2)期望的密碼套件
3)允許的簽名算法(如果使用客戶端證書認(rèn)證)
七、TLS服務(wù)器Hello消息-證書

TLS服務(wù)器Hello消息將包含一個用于加密的證書公共密鑰
證書記錄包含了客戶端進(jìn)行驗證所需要的所有數(shù)據(jù)