雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!
SSL/TLS是一種密碼通信架構,他是世界上使用最廣泛的密碼通信方法。SSL/TLS綜合運用了密碼學中的對稱密碼,消息認證碼,公鑰密碼,數字簽名,僞随機數生成器等,可以說是密碼學中的集大成者。
SSL(Secure Socket Layer)安全套接層,是1994年由Netscape公司設計的一套協定,并與1995年釋出了3.0版本。
TLS(Transport Layer Security)傳輸層安全是IETF在SSL3.0基礎上設計的協定,實際上相當于SSL的後續版本。
SSL/TLS的應用

SSL/TLS是一個安全通信架構,上面可以承載HTTP協定或者SMTP/POP3協定等。
TLS協定的架構
TLS主要分為兩層,底層的是TLS記錄協定,主要負責使用對稱密碼對消息進行加密。
上層的是TLS握手協定,主要分為握手協定,密碼規格變更協定和應用資料協定4個部分。
- 握手協定負責在用戶端和伺服器端商定密碼算法和共享密鑰,包括證書認證,是4個協定中最最複雜的部分。
- 密碼規格變更協定負責向通信對象傳達變更密碼方式的信号
- 警告協定負責在發生錯誤的時候将錯誤傳達給對方
- 應用資料協定負責将TLS承載的應用資料傳達給通信對象的協定。
握手協定
握手協定是TLS協定中非常重要的協定,通過用戶端和伺服器端的互動,和共享一些必要資訊,進而生成共享密鑰和互動證書。
不說話,先上圖:
接下來我們一步步的介紹每一步的含義:
1.client hello
用戶端向伺服器端發送一個client hello的消息,包含下面内容:
- 可用版本号
- 目前時間
- 用戶端随機數
- 會話ID
- 可用的密碼套件清單
- 可用的壓縮方式清單
我們之前提到了TLS其實是一套加密架構,其中的有些元件其實是可以替換的,這裡可用版本号,可用的密碼套件清單,可用的壓縮方式清單就是向伺服器詢問對方支援哪些服務。
用戶端随機數是一個由用戶端生成的随機數,用來生成對稱密鑰。
2.server hello
伺服器端收到client hello消息後,會向用戶端傳回一個server hello消息,包含如下内容:
- 使用的版本号
- 伺服器随機數
- 使用的密碼套件
- 使用的壓縮方式
使用的版本号,使用的密碼套件,使用的壓縮方式是對步驟1的回答。
伺服器随機數是一個由伺服器端生成的随機數,用來生成對稱密鑰。
3.可選步驟:certificate
伺服器端發送自己的證書清單,因為證書可能是層級結構的,是以處理伺服器自己的證書之外,還需要發送為伺服器簽名的證書。
用戶端将會對伺服器端的證書進行驗證。如果是以匿名的方式通信則不需要證書。
4.可選步驟:ServerKeyExchange
如果第三步的證書資訊不足,則可以發送ServerKeyExchange用來建構加密通道。
ServerKeyExchange的内容可能包含兩種形式:
如果選擇的是RSA協定,那麼傳遞的就是RSA建構公鑰密碼的參數(E,N)。我們回想一下RSA中建構公鑰的公式:, 隻要知道了E和N,那麼就知道了RSA的公鑰,這裡傳遞的就是E,N兩個數字。
如果選擇的是Diff-Hellman密鑰交換協定,那麼傳遞的就是密鑰交換的參數,具體内容可以參考更加安全的密鑰生成方法Diffie-Hellman
5.可選步驟:CertificateRequest
如果是在一個受限通路的環境,比如fabric中,伺服器端也需要向用戶端索要證書。
如果并不需要用戶端認證,則不需要此步驟。
6.server hello done
伺服器端發送server hello done的消息告訴用戶端自己的消息結束了。
7.可選步驟:Certificate
對步驟5的回應,用戶端發送用戶端證書給伺服器
8.ClientKeyExchange
還是分兩種情況:
如果是公鑰或者RSA模式情況下,用戶端将根據用戶端生成的随機數和伺服器端生成的随機數,生成預備主密碼,通過該公鑰進行加密,返送給伺服器端。
如果使用的是Diff-Hellman密鑰交換協定,則用戶端會發送自己這一方要生成Diff-Hellman密鑰而需要公開的值。具體内容可以參考更加安全的密鑰生成方法Diffie-Hellman,這樣伺服器端可以根據這個公開值計算出預備主密碼。
9.可選步驟:CertificateVerify
用戶端向伺服器端證明自己是用戶端證書的持有者。
10.ChangeCipherSpec(準備切換密碼)
ChangeCipherSpec是密碼規格變更協定的消息,表示後面的消息将會以前面協商過的密鑰進行加密。
11.finished(握手協定結束)
用戶端告訴伺服器端握手協定結束了。
12.ChangeCipherSpec(準備切換密碼)
伺服器端告訴用戶端自己要切換密碼了。
13.finished(握手協定結束)
伺服器端告訴用戶端,握手協定結束了。
14.切換到應用資料協定
這之後伺服器和用戶端就是以加密的方式進行溝通了。
主密碼和預備主密碼
上面的步驟8生成了預備主密碼,主密碼是根據密碼套件中定義的單向散列函數實作的僞随機數生成器+預備主密碼+用戶端随機數+伺服器端随機數生成的。
主密碼主要用來生成稱密碼的密鑰,消息認證碼的密鑰和對稱密碼的CBC模式所使用的初始化向量。
TLS記錄協定
TLS記錄協定主要負責消息的壓縮,加密及資料的認證:
先上圖。
消息首先将會被分段,然後壓縮,再計算其消息驗證碼,然後使用對稱密碼進行加密,加密使用的是CBC模式,CBC模式的初始向量是通過主密碼來生成的。
得到密文之後會附加類型,版本和長度等其他資訊,最終組成最後的封包資料。
【雲栖号線上課堂】每天都有産品技術專家分享!
課程位址:
https://yqh.aliyun.com/live立即加入社群,與專家面對面,及時了解課程最新動态!
【雲栖号線上課堂 社群】
https://c.tb.cn/F3.Z8gvnK
原文釋出時間:2020-04-19
本文作者:flydean
本文來自:“
掘金”,了解相關資訊可以關注“掘金”