該文章主要提供一個詳細(xì)的解釋關(guān)于SSL/TLS協(xié)議,特別是握手協(xié)議,它關(guān)聯(lián)到信息,警告以及記錄協(xié)議。 1.握手協(xié)議(The handshake protocol) 初始化發(fā)給服務(wù)器的客戶端消息 client Hello: 客戶端通過發(fā)送hello消息給服務(wù)器來初始化一個會話(簡單的說就是客戶端想要連上服務(wù)器,就必須經(jīng)歷這個會話過程),hello消息包括:
client hello消息實例 ClientVersion 3,1 ClientRandom[32] SessionID: None (new session) Suggested Cipher Suites: TLS_RSA_WITH_3DES_EDE_CBC_SHA TLS_RSA_WITH_DES_CBC_SHA Suggested Compression Algorithm: NONE 服務(wù)器回應(yīng)客戶端 Server Hello.包括:
server hello實例: Version 3,1 ServerRandom[32] SessionID: bd608869f0c629767ea7e3ebf7a63bdcffb0ef58b1b941e6b0c044acb6820a77 Use Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA Compression Algorithm: NONE Server Certificate.服務(wù)器發(fā)送它自己的證書給客戶端,這個證書包含了服務(wù)器的公鑰,客戶端將使用這個公鑰來認(rèn)證服務(wù)器以及加密premaster secret(預(yù)置密碼)。 客戶端也會檢查服務(wù)器證書中包含的名字,檢查是否和client連接的一樣,如果用戶在瀏覽器中輸入www.test.com,那么服務(wù)器證書應(yīng)該也包含一個結(jié)構(gòu)名為www.test.com 或者*.test.com.如果不匹配,瀏覽器將會發(fā)出警告。 Server Key Exchange.這是可選的一步(服務(wù)器創(chuàng)建一個臨時的key發(fā)給客戶端),這個key被客戶端用于加密client key exchange message,這一步當(dāng)且僅當(dāng)公鑰算法無法提供關(guān)鍵的必要材料時被執(zhí)行,例如服務(wù)器證書不包含公鑰。 Client Certificate Request:這也是可選的一步,當(dāng)服務(wù)器需要認(rèn)證客戶端的時候。像銀行的網(wǎng)站之類的需要用到這個,只有認(rèn)證成功后才會提供敏感信息。 Server Hello Done:表示服務(wù)器消息結(jié)束并且等待客戶端的回復(fù)。 客戶端回應(yīng)服務(wù)器 Client certificate:如果服務(wù)器發(fā)送了client certificate request,客戶端將發(fā)送它的的證書給服務(wù)器,用于讓服務(wù)器認(rèn)證客戶端,該證書包含了客戶端的公鑰。 Client Key Exchange:客戶端用雙方的28字節(jié)隨機數(shù)來生成一個premaster secret(預(yù)置密碼),然后用客戶端發(fā)送過來的服務(wù)器公鑰來加密這個premaster secret,最后發(fā)送給server。 只有擁有與服務(wù)器公鑰匹配的密鑰來能解密這個premaster secret.解密成功后來才能繼續(xù)協(xié)商. 這個消息也包含協(xié)議版本,服務(wù)器將驗證該版本與client hello message中包含的版本是否吻合,該措施用于防止rollback attacks(通過操縱消息來降低雙方使用協(xié)議的安全性,早期版本的協(xié)議)。 Certificate Verify:只有當(dāng)client發(fā)送了client certificate message后才會發(fā)送這個消息.客戶端用自己的私鑰來加密消息的做法到此為止(后面將使用雙發(fā)協(xié)商的算法和密碼來加密消息,不在使用客戶端的私鑰),服務(wù)器通過client的公鑰來驗證簽名,從而確保了該消息是由客戶端私鑰簽名過的。 Change Cipher Spec:該消息告訴服務(wù)器在client Finished message之后的所有信息將用雙方協(xié)商的密碼和算法來加密。 Client Finished:該消息是整個會談的哈希,用于提供對client的進一步認(rèn)證,它是第一個記錄層加密和散列(之前的消息都在在協(xié)商). 服務(wù)器回復(fù)給客戶端的最終消息Change Cipher Spec Message:服務(wù)器告訴客戶端,將開始使用雙方協(xié)商的key來加密數(shù)據(jù)了 Server Finished Messge:該消息是真?zhèn)€信息交換的哈希值(這個信息交換過程使用session key和MAC secret)。如果客戶端能夠解密這個消息并且驗證哈希值的有效性,那么SSL/TLS協(xié)商過程才算成功。 2.告警協(xié)議(The alert Sub-protocol) 告警協(xié)議是握手協(xié)議的組成部分,它包含一些事件驅(qū)動消息,可以被雙發(fā)發(fā)送。根據(jù)警告消息,雙發(fā)可以決定是否結(jié)束該會話或者繼續(xù),TLS specification in RFC 2246定義了這些警告,如下表: Table 1. Event-Driven Alert Messages from the Alert Sub-Protocol
3.數(shù)據(jù)層協(xié)議(the record protocol) the record protocol 從應(yīng)用層收到消息,包括:
一旦在數(shù)據(jù)上完成了它的操作后,數(shù)據(jù)發(fā)送個tcp/ip傳輸層。如果數(shù)據(jù)是進來的,它將被發(fā)送給相應(yīng)的進程進行處理。 |
|