概述
SSL(Secure Socket Layer)安全套接字協(xié)議是運(yùn)行在應(yīng)用層和TCP層之間的安全機(jī)制。保證上層應(yīng)用數(shù)據(jù)傳輸?shù)谋C苄浴⑼暾砸约皞鬏旊p發(fā)身份的合法性。
- 傳輸加密性:握手協(xié)議定義會(huì)話密鑰后,所有傳輸?shù)膱?bào)文被會(huì)話密鑰加密。
- 消息的完整性:傳輸?shù)膱?bào)文中增加mac(消息認(rèn)證碼),用于檢測(cè)完整性。
- 身份驗(yàn)證:客戶端認(rèn)證(可選),服務(wù)端認(rèn)證(強(qiáng)制)
SSL協(xié)議包括:握手協(xié)議(Handshake protocol)、SSLpassword變化協(xié)議(SSL change cipher spec protocol)、警報(bào)協(xié)議(Alert protocol)、記錄協(xié)議(Record protocol)。
握手協(xié)議是SSL連接通信的第一個(gè)子協(xié)議也是最復(fù)雜的協(xié)議。

SSL分層結(jié)構(gòu)
SSL握手協(xié)議
通過(guò)握手過(guò)程,客戶端與服務(wù)端之間協(xié)商會(huì)話參數(shù)(包括相互驗(yàn)證、協(xié)商加密和MAC算法、生成會(huì)話密鑰等)。

SSL握手協(xié)議過(guò)程
第一階段:建立安全能力
客戶端-client_hello:
- 客戶端可以支持的SSL最高版本號(hào);
- 客戶端生成的32字節(jié)的隨機(jī)數(shù);
- 會(huì)話標(biāo)識(shí)符ID;
- 客戶端可以支持的密碼套件列表;
- 客戶端可以支持的壓縮方法列表。
服務(wù)端-server_hello:
- SSL版本號(hào),取收到的客戶端SSL版本和服務(wù)端支持的最高版本中的較低者;
- 服務(wù)端生成的32字節(jié)的隨機(jī)數(shù);
- 會(huì)話標(biāo)識(shí)符ID;
- 從收到的客戶端密碼套件列表中選擇一個(gè)密碼套件(包含密鑰交換算法、對(duì)稱(chēng)加密算法、摘要算法);
- 從收到的客戶端壓縮方法列表中選擇一種壓縮方法。
第二階段:服務(wù)端驗(yàn)證和密鑰交換
服務(wù)端-certificate:
- 含有公鑰信息的服務(wù)端數(shù)字證書(shū)或到CA的完整證書(shū)鏈。
服務(wù)端-server_key_exchange:
- 可選,根據(jù)密鑰協(xié)商算法而定,如果傳送給客戶端的服務(wù)端證書(shū)數(shù)據(jù)不足以按照第一階段選定的密鑰交換算法協(xié)商密鑰,該步驟不足密鑰協(xié)商元素。
服務(wù)端-certificate_request:
- 可選,請(qǐng)求驗(yàn)證客戶端證書(shū)信息,單向數(shù)據(jù)認(rèn)證(只認(rèn)證服務(wù)端)無(wú)此步驟。
服務(wù)端-server_hello_done:
- 通知客戶端版本號(hào)和加密套件協(xié)商結(jié)束。
第三階段:客戶端驗(yàn)證和密鑰交換
客戶端-certificate:
- 可選,客戶端數(shù)字證書(shū),雙向數(shù)據(jù)認(rèn)證中服務(wù)端要求驗(yàn)證客戶端身份合法性。
客戶端-client_key_exchange:
- 客戶端交換密鑰,視密鑰交換算法而定,密鑰協(xié)商參數(shù)或pre-master key(服務(wù)端公鑰加密)。
客戶端-certificate_verify:
- 可選,客戶端將已交互的握手消息、會(huì)話密鑰的摘要值用客戶端私鑰加密發(fā)送給服務(wù)端。
第四階段:完成
客戶端-change_cipher_spec:
- 改變密碼格式信息,告訴服務(wù)端之后的報(bào)文消息用會(huì)話密鑰加密。
客戶端-finished:
- 向服務(wù)端宣布握手協(xié)議完成。
服務(wù)端-change_cipher_spec:
- 改變密碼格式信息,告訴客戶端之后的報(bào)文消息用會(huì)話密鑰加密。
服務(wù)端-finished:
- 向客戶端宣布握手協(xié)議完成。