傳輸層安全性協定 (英語:Transport Layer Security ,縮寫:TLS ),前身稱為安全套接层 (英語:Secure Sockets Layer ,縮寫:SSL )是一种安全协议 ,目的是為網際網路 通信提供安全及数据完整性 保障。
網景 公司(Netscape )在1994年推出首版網頁瀏覽器 -網景領航員 時,推出HTTPS 協定,以SSL進行加密,這是SSL的起源。
IETF 將SSL進行標準化,1999年公布TLS 1.0標準文件(RFC 2246 )。隨後又公布TLS 1.1(RFC 4346 ,2006年)、TLS 1.2(RFC 5246 ,2008年)和TLS 1.3(RFC 8446 ,2018年)。在瀏覽器 、電子郵件 、即時通訊 、VoIP 、網路傳真 等應用程式中,廣泛使用這個協定。許多網站,如Google 、Facebook 、Wikipedia 等也以這個協定來建立安全連線,傳送資料。目前已成为互联网 上保密通信的工业标准。
SSL包含记录层(Record Layer)和传输层 ,记录层协议确定传输层数据的封装格式。傳輸層安全協議使用X.509 認證,之後利用非對稱加密演算來對通訊方做身份認證,之後交換對稱密匙作為會话密匙(Session key )。這個會談密匙是用來將通訊兩方交換的資料做加密,保证两个应用间通信的保密性和可靠性,使客户與服务器应用之间的通信不被攻击者窃听。
概論
TLS協定採用主從式架構 模型,用于在兩個應用程式間透過網路建立起安全的連線,防止在交換資料时受到竊聽 及篡改。
TLS协议的优势是与高层的应用层 协议(如HTTP 、FTP 、Telnet 等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行建立加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。
TLS协议是可选的,必须配置客户端和服务器才能使用。主要有两种方式实现这一目标:一个是使用统一的TLS协议通訊埠 (例如:用于HTTPS 的端口443);另一个是客户端请求服务器连接到TLS时使用特定的协议机制(例如:電子郵件常用的STARTTLS )。一旦客户端和服务器都同意使用TLS协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据[ 1] 。通过握手,客户端和服务器协商各种参数用于建立安全连接:
当客户端连接到支持TLS协议的服务器要求建立安全连接并列出了受支持的密碼套件 (包括加密算法 、散列算法 等),握手开始。
服务器从该列表中决定密碼套件,并通知客户端。
服务器发回其数字证书 ,此证书通常包含服务器的名称、受信任的证书颁发机构 (CA)和服务器的公钥。
客户端确认其颁发的证书的有效性。
为了生成会话密钥用于安全连接,客户端使用服务器的公钥加密随机生成的密钥,并将其发送到服务器,只有服务器才能使用自己的私钥解密。
利用随机数,双方生成用于加密和解密的对称密钥。这就是TLS协议的握手,握手完毕后的连接是安全的,直到连接(被)关闭。如果上述任何一个步骤失败,TLS握手过程就会失败,并且断开所有的连接。
發展歷史
協議
發布時間
狀態
SSL 1.0
未公佈
未公佈
SSL 2.0
1995年
已於2011年棄用[ 2]
SSL 3.0
1996年
已於2015年棄用[ 3]
TLS 1.0
1999年
于2021年弃用[ 4]
TLS 1.1
2006年
于2021年弃用[ 4]
TLS 1.2
2008年
TLS 1.3
2018年
安全网络编程
早期的研究工作,为方便改造原有网络应用程序,在1993年已经有了相似的Berkeley套接字 安全传输层API方法[ 5] 。
SSL 1.0、2.0和3.0
SSL(Secure Sockets Layer )是网景 公司(Netscape)设计的主要用于Web的安全传输协议,这种协议在Web上获得了广泛的应用[ 6] 。
基础算法由作为网景公司的首席科学家塔希爾·蓋莫爾 (Taher Elgamal)编写,所以他被人称为“SSL之父”。[ 7] [ 8]
2014年10月,Google發布在SSL 3.0中發現設計缺陷,建議禁用此一協議。攻擊者可以向TLS發送虛假錯誤提示,然後將安全連接強行降級到过时且不安全的SSL 3.0,然後就可以利用其中的設計漏洞竊取敏感信息。Google在自己公司相關產品中陸續禁止回溯相容,強制使用TLS協議。Mozilla 也在11月25日發布的Firefox 34中徹底禁用了SSL 3.0。微軟 同樣發出了安全通告[ 9] 。
TLS 1.0
IETF 将SSL标准化,即 RFC 2246 ,并将其称为TLS(Transport Layer Security )。
TLS 1.1
TLS 1.1在 RFC 4346 中定义,于2006年4月发表[ 10] ,它是TLS 1.0的更新。在此版本中的差异包括:
添加对CBC攻击的保护:
隐式IV 被替换成一个显式的IV 。
更改分组密码模式中的填充错误。
支持IANA 登记的参数。[ 11] :2
微軟、Google、蘋果、Mozilla四家瀏覽器業者在2020年終止支援TLS 1.0及1.1版[ 12] 。2021年3月,RFC 8996 标准弃用了TLS 1.0和TLS 1.1[ 4] 。
TLS 1.2
TLS 1.2在 RFC 5246 中定义,于2008年8月发表。它基于更早的TLS 1.1规范。主要区别包括:
增加SHA-2 密碼雜湊函數。
增加AEAD 加密算法,如GCM模式。
添加TLS扩展定义和AES密码组合[ 11] :2 。所有TLS版本在2011年3月发布的RFC 6176中删除了对SSL的兼容,这样TLS会话将永远无法协商使用的SSL 2.0以避免安全问题。
TLS 1.3
TLS 1.3在 RFC 8446 中定义,于2018年8月发表。[ 13] 它与TLS 1.2的主要区别包括:
网络安全服务 (NSS)是由Mozilla开发并由其网络浏览器Firefox使用的加密库,自2017年2月起便默认启用TLS 1.3。[ 15] 随后TLS 1.3被添加到2017年3月发布的Firefox 52.0中,但它由于某些用户的兼容性问题,默认情况下禁用。[ 16] 直到Firefox 60.0才正式默认启用。[ 17]
Google Chrome 曾在2017年短时间将TLS 1.3设为默认,然而由于类似Blue Coat Systems 等不兼容组件而被取消。[ 18]
wolfSSL 在2017年5月发布的3.11.1版本中启用了TLS 1.3。[ 19] 作为第一款支持TLS 1.3部署,wolfSSL 3.11.1 支持 TLS 1.3 Draft 18(现已支持到Draft 28),[ 20] 同时官方也发布了一系列关于TLS 1.2和TLS 1.3性能差距的博客。[ 21]
算法
密钥交换和密钥协商
在客户端和服务器开始交换TLS所保护的加密信息之前,他们必须安全地交换或协定加密密钥和加密数据时要使用的密码。用于密钥交换的方法包括:使用RSA 算法生成公钥和私钥(在TLS 握手 协议中被称为TLS_RSA)、Diffie-Hellman (在TLS握手协议中被称为TLS_DH)、临时Diffie-Hellman(在TLS握手协议中被称为TLS_DHE)、橢圓曲線迪菲-赫爾曼 (在TLS握手协议中被称为TLS_ECDH)、临时椭圆曲线Diffie-Hellman(在TLS握手协议中被称为TLS_ECDHE)、匿名Diffie-Hellman(在TLS握手协议中被称为TLS_DH_anon)[ 22] 、预共享密钥(在TLS握手协议中被称为TLS_PSK)[ 23] 和安全远程密码(在TLS握手协议中被称为TLS_SRP)。[ 24]
TLS_DH_anon和TLS_ECDH_anon的密钥协商协议不能验证服务器或用户,因为易受中间人攻击 因此很少使用。只有TLS_DHE和TLS_ECDHE提供前向保密 能力。
在交换过程中使用的公钥/私钥 加密密钥 的长度和在交换协议过程中使用的公钥证书也各不相同,因而提供的強健性 的安全。2013年7月,Google 宣布向其用户提供的TLS加密将不再使用1024位公钥并切换到至少2048位,以提高安全性。[ 25]
加密密码
标注
^ 1.0 1.1 1.2 1.3 RFC 5746 must be implemented to fix a renegotiation flaw that would otherwise break this protocol.
^ If libraries implement fixes listed in RFC 5746 , this violates the SSL 3.0 specification, which the IETF cannot change unlike TLS. Fortunately, most current libraries implement the fix and disregard the violation that this causes.
^ 3.0 3.1 The BEAST attack breaks all block ciphers (CBC ciphers) used in SSL 3.0 and TLS 1.0 unless mitigated by the client and/or the server. See § Web browsers .
^ The POODLE attack breaks all block ciphers (CBC ciphers) used in SSL 3.0 unless mitigated by the client and/or the server. See § Web browsers .
^ 5.0 5.1 5.2 5.3 5.4 5.5 5.6 認證加密 (倒如GCM 和CCM ) 只適用於TLS 1.2或以上版本。
^ 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 如該加密系統並未移除所有計時旁路 ,幸运十三攻击 能破解CBC加密。
^ 7.0 7.1 7.2 7.3 7.4 7.5 7.6 Sweet32攻擊 能破解分組長度為64位元的區塊加密法。[ 36]
^ 儘各3DES的金鑰長度為168位元, 它的有效安全性僅為112位元,[ 37] 遠低於建議的最少128位元。[ 38]
^ 9.0 9.1 TLS 1.2已移除IDEA和DES。[ 39]
^ 10.0 10.1 10.2 此等密鑰長度只有40位元的密碼套件為降級版本,以符合(於2000年被大幅放寬)美國對某些高強度加密技術的出口管制 。自TLS 1.1起,它們均被禁用。
^ Use of RC4 in all versions of TLS is prohibited by RFC 7465 (because RC4 attacks weaken or break RC4 used in SSL/TLS).
^ Authentication only, no encryption.
数据完整性
訊息鑑別碼 (MAC)用于对数据完整性进行认证。HMAC 用于CBC模式的块密码 。AEAD 例如GCM模式和CCM模式使用AEAD內建的訊息鑒別碼 ,不使用HMAC [ 41] 。另外,在TLS握手過程中需要使用基於HMAC 的偽隨機函數(PRF),或HKDF 。
过程
TLS在互联网 上為HTTP等應用程式提供身份驗證 、加密 、完整性 ,其基础是公钥基础设施 。这是因为公鑰基礎設施 普遍商业运营。TLS协议的设计在某种程度上能够使主从架构 应用程序通讯预防窃听、干扰和消息伪造。
TLS包含幾個基本阶段:
对等协商支援的TLS版本,和支援的密碼套件 。
基于非对称密钥 的身份认证,通常是基于PKI 证书的身份认证 。伺服器 將其X.509 證書發送給客戶端 ,由客戶端驗證伺服器的身份。如果伺服器要驗證客戶端的證書,則客戶端可能會將客戶端證書發送給伺服器。通常僅驗證伺服器,不驗證客戶端。
基于对称密钥 的數據加密。客戶端生成隨機數 作為對談金鑰 ,並使用伺服器公鑰 (伺服器公鑰在伺服器證書中)加密對談金鑰,最後將已加密的對談金鑰發送給伺服器。由伺服器的私鑰 解密出對談金鑰。最後使用此對談金鑰加密數據。TLS也可以使用預共用金鑰(PSK)作為對稱密鑰。
在第一阶段,客户端与服务器协商所用密码算法。当前广泛实现的算法选择如下:
参考文献
^ "SSL/TLS in Detail (页面存档备份 ,存于互联网档案馆 )". Microsoft TechNet . Updated July 31, 2003.
^ RFC 6176 . [2020-05-22 ] . (原始内容存档 于2016-12-06).
^ RFC 7568 . [2020-05-22 ] . (原始内容存档 于2018-03-28).
^ 4.0 4.1 4.2 RFC 8996 . [2021-03-25 ] . (原始内容存档 于2021-03-24).
^ Thomas Y. C. Woo, Raghuram Bindignavle, Shaowen Su and Simon S. Lam , SNP: An interface for secure network programming (页面存档备份 ,存于互联网档案馆 ) Proceedings USENIX Summer Technical Conference, June 1994
^ THE SSL PROTOCOL . Netscape Corporation. 2007 [2014-12-02 ] . (原始内容存档 于1997-06-14).
^ Messmer, Ellen. Father of SSL, Dr. Taher Elgamal, Finds Fast-Moving IT Projects in the Middle East . Network World. [30 May 2014] . (原始内容 存档于2014年5月31日).
^ Greene, Tim. Father of SSL says despite attacks, the security linchpin has lots of life left . Network World. [30 May 2014] . (原始内容 存档于2014年5月31日).
^ POODLE: SSLv3 vulnerability (CVE-2014-3566) . [21 October 2014] . (原始内容存档 于2016-03-17).
^ Dierks, T. and E. Rescorla. The Transport Layer Security (TLS) Protocol Version 1.1, RFC 4346 . April 2006 [2014-12-02 ] . (原始内容存档 于2017-12-24).
^ 11.0 11.1 Polk, Tim; McKay, Terry; Chokhani, Santosh. Guidelines for the Selection, Configuration, and Use of Transport Layer Security (TLS) Implementations (PDF) . National Institute of Standards and Technology: 67. April 2014 [2014-05-07 ] . (原始内容存档 (PDF) 于2014-05-08).
^ 林妍溱. 微軟、蘋果、Google及Mozilla四大瀏覽器業者在2020年終止支援TLS 1.0、1.1 . iThome . 2018-10-16 [2020-01-12 ] . (原始内容存档 于2020-01-12).
^ Joseph A. Salowey; Sean Turner; Christopher A. Wood. TLS 1.3 . IETF. 2018-08-10 [2018-08-11 ] . (原始内容存档 于2018-08-11) (英语) .
^ pigsrollaroundinthem. TLS 1.3 下的 SNI 将让审查变得更困难 . Solidot. 2018-08-16 [2018-08-27 ] . (原始内容存档 于2018-08-27).
^ NSS 3.29 release notes . Mozilla Developer Network. February 2017 [2018-08-11 ] . (原始内容存档 于2017-02-22).
^ Enable TLS 1.3 by default . Bugzilla@Mozilla. 16 October 2016 [10 October 2017] . (原始内容存档 于2018-08-12).
^ Firefox — Notes (60.0) . Mozilla. [2018-05-10 ] . (原始内容存档 于2018-05-09) (美国英语) .
^ ProxySG, ASG and WSS will interrupt SSL connections when clients using TLS 1.3 access sites also using TLS 1.3 . BlueTouch Online. 16 May 2017 [11 September 2017] . (原始内容 存档于2017-09-12).
^ wolfSSL TLS 1.3 BETA Release Now Available . info@wolfssl.com. 11 May 2017 [11 May 2017] . (原始内容存档 于2018-07-25).
^ TLS 1.3 PROTOCOL SUPPORT . info@wolfssl.com. (原始内容存档 于2018-07-26).
^ TLS 1.3 Draft 28 Support in wolfSSL . info@wolfssl.com. 14 June 2018 [14 June 2018] . (原始内容存档 于2018-07-25).
^ RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 . Internet Engineering Task Force. [9 September 2013] . (原始内容存档 于2017-12-24).
^ P. Eronen, Ed. RFC 4279: Pre-Shared Key Ciphersuites for Transport Layer Security (TLS) . Internet Engineering Task Force. [9 September 2013] . (原始内容存档 于2013-09-05).
^ D. Taylor, Ed. Using the Secure Remote Password (SRP) Protocol for TLS Authentication . Internet Engineering Task Force. November 2007 [December 21, 2014] . RFC 5054 . doi:10.17487/RFC5054 . (原始内容存档 于December 7, 2014).
^ Gothard, Peter. Google updates SSL certificates to 2048-bit encryption . Computing. Incisive Media. [9 September 2013] . (原始内容存档 于2013-09-22).
^ Sean Turner. Consensus: remove DSA from TLS 1.3 . September 17, 2015 [2018-01-28 ] . (原始内容存档 于2015-10-03).
^ RFC 8422
^ 28.0 28.1 draft-chudov-cryptopro-cptls-04 – GOST 28147-89 Cipher Suites for Transport Layer Security (TLS)
^ 29.0 29.1 29.2 29.3 29.4 RFC 5830 6986 7091 7801 8891
^ RFC 5288 5289
^ RFC 6655 7251
^ RFC 6367
^ RFC 5932 6367
^ 34.0 34.1 RFC 6209
^ RFC 4162
^ On the Practical (In-)Security of 64-bit Block Ciphers — Collision Attacks on HTTP over TLS and OpenVPN (PDF) . 2016-10-28 [2017-06-08 ] . (原始内容存档 (PDF) 于2017-04-24).
^ NIST Special Publication 800-57 Recommendation for Key Management — Part 1: General (Revised) (PDF) . 2007-03-08 [2014-07-03 ] . (原始内容 (PDF) 存档于2014-06-06).
^ Qualys SSL Labs. SSL/TLS Deployment Best Practices . [2 June 2015] . (原始内容存档 于2015-07-04).
^ RFC 5469
^ RFC 7905
^ AEAD Ciphers . [2014-12-02 ] . (原始内容存档 于2017-12-24).
外部链接
参见