SSL 縮寫(xiě) Secure Socket Layer ,是幾十年前網(wǎng)景公司制定的保證服務(wù)器和客戶(hù)端安全通信的一種協(xié)議,大量使用在http的安全通信中,這里的安全通信有兩層含義:
簡(jiǎn)單說(shuō)就是首先要對通信兩端的身份進(jìn)行認證確保是真實(shí)的,接下來(lái)就是確保通信雙方交換的數據進(jìn)行加密確保只有真實(shí)的對手方才能看到,任何其他的人即便拿到數據也無(wú)法獲得有效信息。這里要注意, SSL 并不包含或實(shí)現身份認證的方法和數據加密方法, SSL 只是制定了一套可靠的 C-S 之間的協(xié)商辦法,來(lái)確定通信雙方如何身份認證和加密?,F在 SSL 里頭基本使用 PKI 數字證書(shū)方式認證,加密的算法很多,對稱(chēng)非對稱(chēng),這些網(wǎng)上資料很多自己 google 之。
SSL 是如何工作的呢?基本上 SSL 的工作分為兩個(gè)階段:握手階段和數據傳輸階段,若通信期間檢測到不安全因素,比如握手時(shí)候發(fā)現另一端無(wú)法支持選擇的協(xié)議或加密算法,或者發(fā)現數據被篡改,這時(shí)通信一方會(huì )發(fā)送警告消息,不安全因素影響比較大兩端之間的通信就會(huì )終止,必須重新協(xié)商建立連接。
SSL 協(xié)議結構如下:

通過(guò) SSL 分成三個(gè)子協(xié)議, HandShake( 握手) ChangeCipherSpec( 更改密鑰規格 ), Alert( 告警 ) 。
SSL 的告警協(xié)議是用來(lái)為通信對方發(fā)送一條告警消息,告警分為兩個(gè)層次: fatal 和 warning, 如果是 fatal 級別的如 MAC 計算出錯或協(xié)商密鑰算法失敗則馬上斷開(kāi)連接,要建立連接的話(huà)需要重新握手; warning 類(lèi)型的消息一般只會(huì )記錄日志,并不會(huì )斷開(kāi)連接。
SSL 更換密鑰規格 (change cipher spec) 協(xié)議獨立于握手協(xié)議,單獨屬于一類(lèi),也是其中最簡(jiǎn)單的一個(gè)。協(xié)議由單個(gè)消息組成 , 該消息只包含一個(gè)值為 1 的單個(gè)字節。該消息由客戶(hù)端和服務(wù)器端各自發(fā)出用來(lái)通知對方,從這個(gè)消息以后要開(kāi)始使用之前協(xié)商好的密鑰套件了,這個(gè)消息一般是在握手到發(fā)出 Finish 消息之前發(fā)出。
SSL 握手協(xié)議主要負責如下工作:
―― 算法協(xié)商:首次通信時(shí),雙方通過(guò)握手協(xié)議協(xié)商密鑰加密算法,數據加密算法和文摘算法。
―― 身份驗證:在密鑰協(xié)商完成后,客戶(hù)端與服務(wù)器端通過(guò)證書(shū)互相驗證對方的身份。
―― 確定密鑰:最后使用協(xié)商好的密鑰交換算法產(chǎn)生一個(gè)只有雙方知道的秘密信息,客戶(hù)端和服務(wù)器各自根據這個(gè)秘密信息計算出加密密鑰,在接下來(lái)的記錄協(xié)議中用來(lái)對應用數據進(jìn)行加密;
如果說(shuō)握手協(xié)議是 C/S 雙方的協(xié)商的話(huà)記錄協(xié)議就是利用協(xié)商結果對上層應用提供兩種服務(wù):
―― 機密性:使用協(xié)商好的通信密鑰對業(yè)務(wù)數據加解密;
―― 數據完整性:利用協(xié)商好的 MAC 算法計算消息 HASH ,防止消息被篡改;
協(xié)議規定每個(gè)記錄層的協(xié)議數據包長(cháng)度不能超過(guò) 2^14(16K) ,因此記錄協(xié)議接收到層應用業(yè)務(wù)數據若超長(cháng)會(huì )將業(yè)務(wù)數據分塊,壓縮 ( 可選 ) ,計算 MAC ,加密,按上記錄層協(xié)議頭發(fā)出去。
疑問(wèn):
1.SSL協(xié)議中為什么change cipher spec消息要單獨屬于一類(lèi)而不歸類(lèi)到握手消息中?
2.若將change cipher spec消息去掉,服務(wù)器端和客戶(hù)端可以直接根據收到或發(fā)送Finished消息來(lái)讓通信雙方切換到使用協(xié)商好的密鑰通信的狀態(tài)中去好像也沒(méi)什么影響,為什么一定要整出這么個(gè)change cipher spec協(xié)議來(lái)?聯(lián)系客服