SSL / TLS 介紹

SSL/TLS 協議的介紹

SSL/TLS 協議(RFC2246 RFC4346)處於 TCP/IP 協議與各種應用層協議之間,爲數據通訊提供安全支持。

從協議內部的功能層面上來看,SSL/TLS 協議可分爲兩層:

1. SSL/TLS 記錄協議(SSL/TLS Record Protocol),它建立在可靠的傳輸層協議(如 TCP)之上,爲上層協議提供數據封裝、壓縮、加密等基本功能。

2. SSL/TLS 握手協議(SSL/TLS Handshake Protocol),它建立在 SSL/TLS 記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等初始化協商功能。

從協議使用方式來看,又可以分成兩種類型:

1. SSL/TLS 單向認證,就是用戶到服務器之間只存在單方面的認證,即客戶端會認證服務器端身份,而服務器端不會去對客戶端身份進行驗證。首先,客戶端發起握手請求,服務器收到握手請求後,會選擇適合雙方的協議版本和加密方式。然後,再將協商的結果和服務器端的公鑰一起發送給客戶端。客戶端利用服務器端的公鑰,對要發送的數據進行加密,併發送給服務器端。服務器端收到後,會用本地私鑰對收到的客戶端加密數據進行解密。然後,通訊雙方都會使用這些數據來產生雙方之間通訊的加密密鑰。接下來,雙方就可以開始安全通訊過程了。

2.SSL/TLS 雙向認證,就是雙方都會互相認證,也就是兩者之間將會交換證書。基本的過程和單向認證完全一樣,只是在協商階段多了幾個步驟。在服務器端將協商的結果和服務器端的公鑰一起發送給客戶端後,會請求客戶端的證書,客戶端則會將證書發送給服務器端。然後,在客戶端給服務器端發送加密數據後,客戶端會將私鑰生成的數字簽名發送給服務器端。而服務器端則會用客戶端證書中的公鑰來驗證數字簽名的合法性。建立握手之後過程則和單向通訊完全保持一致。

SSL/TLS 協議建立通訊的基本流程如圖 1 所示,

圖 1. SSL/TLS 基本流程圖
圖 1. SSL/TLS 基本流程圖

步驟 1. ClientHello – 客戶端發送所支持的 SSL/TLS 最高協議版本號和所支持的加密算法集合及壓縮方法集合等信息給服務器端。

步驟 2. ServerHello – 服務器端收到客戶端信息後,選定雙方都能夠支持的 SSL/TLS 協議版本和加密方法及壓縮方法,返回給客戶端。

(可選)步驟 3. SendCertificate – 服務器端發送服務端證書給客戶端。

(可選)步驟 4. RequestCertificate – 如果選擇雙向驗證,服務器端向客戶端請求客戶端證書。

步驟 5. ServerHelloDone – 服務器端通知客戶端初始協商結束。

(可選)步驟 6. ResponseCertificate – 如果選擇雙向驗證,客戶端向服務器端發送客戶端證書。

步驟 7. ClientKeyExchange – 客戶端使用服務器端的公鑰,對客戶端公鑰和密鑰種子進行加密,再發送給服務器端。

(可選)步驟 8. CertificateVerify – 如果選擇雙向驗證,客戶端用本地私鑰生成數字簽名,併發送給服務器端,讓其通過收到的客戶端公鑰進行身份驗證。

步驟 9. CreateSecretKey – 通訊雙方基於密鑰種子等信息生成通訊密鑰。

步驟 10. ChangeCipherSpec – 客戶端通知服務器端已將通訊方式切換到加密模式。

步驟 11. Finished – 客戶端做好加密通訊的準備。

步驟 12. ChangeCipherSpec – 服務器端通知客戶端已將通訊方式切換到加密模式。

步驟 13. Finished – 服務器做好加密通訊的準備。

步驟 14. Encrypted/DecryptedData – 雙方使用客戶端密鑰,通過對稱加密算法對通訊內容進行加密。

步驟 15. ClosedConnection – 通訊結束後,任何一方發出斷開 SSL 連接的消息。

除了以上的基本流程,SSL/TLS 協議本身還有一些概念需要在此解釋說明一下。

Key:Key 是一個比特(bit)字符串,用來加密解密數據的,就像是一把開鎖的鑰匙。

對稱算法(symmetric cryptography):就是需要雙方使用一樣的 key 來加密解密消息算法,常用密鑰算法有 Data Encryption Standard(DES)、triple-strength DES(3DES)、Rivest Cipher 2 (RC2)和 Rivest Cipher 4(RC4)。因爲對稱算法效率相對較高,因此 SSL 會話中的敏感數據都用通過密鑰算法加密。

非對稱算法(asymmetric cryptography):就是 key 的組成是公鑰私鑰對 (key-pair),公鑰傳遞給對方私鑰自己保留。公鑰私鑰算法是互逆的,一個用來加密,另一個可以解密。常用的算法有 Rivest Shamir Adleman(RSA)、Diffie-Hellman(DH)。非對稱算法計算量大比較慢,因此僅適用於少量數據加密,如對密鑰加密,而不適合大量數據的通訊加密。

公鑰證書(public key certificate):公鑰證書類似數字護照,由受信機構頒發。受信組織的公鑰證書就是 certificate authority(CA)。多證書可以連接成證書串,第一個是發送人,下一個是給其頒發證書實體,往上到根證書是世界範圍受信組織,包括 VeriSign, Entrust, 和 GTE CyberTrust。公鑰證書讓非對稱算法的公鑰傳遞更安全,可以避免身份僞造,比如 C 創建了公鑰私鑰,對並冒充 A 將公鑰傳遞給 B,這樣 C 與 B 之間進行的通訊會讓 B 誤認是 A 與 B 之間通訊。

加密哈希功能(Cryptographic Hash Functions): 加密哈希功能與 checksum 功能相似。不同之處在於,checksum 用來偵測意外的數據變化而前者用來偵測故意的數據篡改。數據被哈希後產生一小串比特字符串,微小的數據改變將導致哈希串的變化。發送加密數據時,SSL 會使用加密哈希功能來確保數據一致性,用來阻止第三方破壞通訊數據完整性。SSL 常用的哈希算法有 Message Digest 5(MD5)和 Secure Hash Algorithm(SHA)。

消息認證碼(Message Authentication Code): 消息認證碼與加密哈希功能相似,除了它需要基於密鑰。密鑰信息與加密哈希功能產生的數據結合就是哈希消息認證碼(HMAC)。如果 A 要確保給 B 發的消息不被 C 篡改,他要按如下步驟做 --A 首先要計算出一個 HMAC 值,將其添加到原始消息後面。用 A 與 B 之間通訊的密鑰加密消息體,然後發送給 B。B 收到消息後用密鑰解密,然後重新計算出一個 HMAC,來判斷消息是否在傳輸中被篡改。SSL 用 HMAC 來保證數據傳輸的安全。

數字簽名(Digital Signature):一個消息的加密哈希被創建後,哈希值用發送者的私鑰加密,加密的結果就是叫做數字簽名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章