傳輸層安全協定及其前身安全套接層(Secure Sockets Layer,縮寫作SSL)是一種安全協定,目的是為網際網路通信,提供安全及數據完整性保障。網景公司(Netscape)在1994年推出首版網頁瀏覽器,網景導航者時,推出HTTPS協定,以SSL進行加密,這是SSL的起源。IETF將SSL進行標準化,1999年公布第一版TLS標準檔案。隨後又公布RFC 5246 (2008年8月)與 RFC 6176 (2011年3月)。在瀏覽器、電子郵件、即時通信、VoIP、網路傳真等應用程式中,廣泛支持這個協定。主要的網站,如Google、Facebook等也以這個協定來創建安全連線,傳送數據。當前已成為網際網路上保密通信的工業標準。
SSL包含記錄層(Record Layer)和傳輸層,記錄層協定確定傳輸層數據的封裝格式。傳輸層安全協定使用X.509認證,之後利用非對稱加密演算來對通信方做身份認證,之後交換對稱密鑰作為會談密鑰(Session key)。這個會談密鑰是用來將通信兩方交換的數據做加密,保證兩個套用間通信的保密性和可靠性,使客戶與伺服器套用之間的通信不被攻擊者竊聽。
基本介紹
- 中文名:傳輸層安全協定
- 外文名:Transport Layer Security
- 前身:安全套接層(SSL)
- 類別:網路安全
- 縮寫:TLS
簡介
- 當客戶端連線到支持TLS協定的伺服器要求創建安全連線並列出了受支持的密碼組合(加密密碼算法和加密哈希函式),握手開始。
- 伺服器從該列表中決定加密和散列函式,並通知客戶端。
- 伺服器發回其數字證書,此證書通常包含伺服器的名稱、受信任的證書頒發機構(CA)和伺服器的公鑰。
- 客戶端確認其頒發的證書的有效性。
- 為了生成會話密鑰用於安全連線,客戶端使用伺服器的公鑰加密隨機生成的密鑰,並將其傳送到伺服器,只有伺服器才能使用自己的私鑰解密。
- 利用隨機數,雙方生成用於加密和解密的對稱密鑰。這就是TLS協定的握手,握手完畢後的連線是安全的,直到連線(被)關閉。如果上述任何一個步驟失敗,TLS握手過程就會失敗,並且斷開所有的連線。
發展歷史
安全網路編程
SSL 1.0、2.0和3.0
- 1.0版本從未公開過,因為存在嚴重的安全漏洞。
- 2.0版本在1995年2月發布,但因為存在數個嚴重的安全漏洞而被3.0版本替代。
- 3.0版本在1996年發布,是由網景工程師Paul Kocher、Phil Karlton和Alan Freier完全重新設計的。較新版本的SSL/TLS基於SSL 3.0。SSL 3.0作為歷史文獻IETF通過RFC 6101發表。
TLS 1.0
TLS 1.1
- 添加對CBC攻擊的保護:
- 更改分組密碼模式中的填充錯誤。
TLS 1.2
TLS 1.3
- 將密鑰協商和認證算法從密碼包中分離出來。
- 移除脆弱和較少使用的命名橢圓曲線支持(參見橢圓曲線密碼學)
- 移除MD5和SHA-224密碼散列函式的支持
- 請求數字簽名,即便使用之前的配置
- 集成HKDF和半短暫DH提議
- 替換使用PSK和票據的恢復
- 支持1-RTT握手並初步支持0-RTT
- 通過在(EC)DH密鑰協定期間使用臨時密鑰來保證完善的前向安全性。
- 禁止用於向後兼容性的SSL和RC4協商
- 集成會話散列的使用
- 棄用記錄層版本號和凍結數以改進向後兼容性
- 將一些安全相關的算法細節從附錄移動到標準,並將ClientKeyShare降級到附錄
- 添加帶有Poly1305訊息驗證碼的ChaCha20流加密
- 添加Ed25519和Ed448數字簽名算法
- 添加x25519和x448密鑰交換協定
算法
密鑰交換和密鑰協商
數據完整性
過程
- 傳送一個“ClientHello”訊息,內容包括:支持的協定版本,比如TLS1.0版,一個客戶端生成的隨機數(稍後用於生成“會話密鑰”),支持的加密算法(如RSA公鑰加密)和支持的壓縮算法。
- 然後收到一個“ServerHello”訊息,內容包括:確認使用的加密通信協定版本,比如TLS 1.0版本(如果瀏覽器與伺服器支持的版本不一致,伺服器關閉加密通信),一個伺服器生成的隨機數(稍後用於生成“對話密鑰”),確認使用的加密方法(如RSA公鑰加密),伺服器證書。
- 當雙方知道了連線參數,客戶端與伺服器交換證書(依靠被選擇的公鑰系統)。這些證書通常基於X.509,不過已有草案支持以OpenPGP為基礎的證書。
- 伺服器請求客戶端公鑰。客戶端有證書即雙向身份認證,沒證書時隨機生成公鑰。
- 客戶端與伺服器通過公鑰保密協商共同的主私鑰(雙方隨機協商),這通過精心謹慎設計的偽隨機數功能實現。結果可能使用Diffie-Hellman交換,或簡化的公鑰加密,雙方各自用私鑰解密。所有其他關鍵數據的加密均使用這個“主密鑰”。數據傳輸中記錄層(Record layer)用於封裝更高層的HTTP等協定。記錄層數據可以被隨意壓縮、加密,與訊息驗證碼壓縮在一起。每個記錄層包都有一個Content-Type段用以記錄更上層用的協定。
TLS
- 對等協商支持的密鑰算法
- 基於對稱密鑰的數據傳輸保密
- 所有的記錄層數據均被編號,用於訊息驗證碼校驗。