目录
- 什么是 TLS ?
- SSL 与 TLS 差异
- TLS 有什么作用 ?
- TLS 如何工作 ?
- TLS 握手有哪些步骤 ?
- TLS 1.3 中的握手有什么不同 ?
什么是 TLS ?
Transport Layer Security (TLS) 是一种广泛采用的安全性协议,旨在促进互联网通信的私密性和数据安全性。TLS 的主要用例是对 Web 应用和服务器之间的通信(例如 Web 浏览器加载网站)进行加密。TLS 还可以用于加密其他通信,如电子邮件、消息传递和 IP 语音 (VoIP) 等。
网景公司(Netscape)在1994年推出首版网页浏览器-网景导航者时,开发了名为安全套接字层(Secure Socket Layer,SSL)的上一代加密协议,这是SSL的起源,TLS 由此演变而来。互联网工程任务组(Internet Engineering Task Force, 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、网络传真等应用程序中,广泛使用这个协议。目前已成为互联网上保密通信的工业标准。
SSL 与 TLS 差异
摘要 | SSL | TLS |
---|---|---|
版本历史 | SSL 现已被 TLS 取代。SSL 已经历版本 1.0、2.0 和 3.0。 | TLS 是 SSL 的升级版本。TLS 已经历版本 1.0、1.1、1.2 和 1.3。 |
活动 | 每个 SSL 版本目前均已弃用。 | TLS 版本 1.2 和 1.3 处于活跃使用状态。 |
警报消息 | SSL 警报消息未加密。 | TLS 警报消息经过加密且更加多样化。 |
消息身份验证 | SSL 使用消息身份验证码 (MAC)。 | TLS 使用基于哈希的消息身份验证代码 (HMAC)。 |
密码套件 | SSL 支持具有已知安全漏洞的早期算法。 | TLS 使用高级加密算法。 |
握手 | SSL 握手复杂而缓慢。 | TLS 握手的步骤更少,连接速度更快。 |
TLS 有什么作用 ?
TLS 协议实现的功能有三个主要组成部分:加密、认证和完整性。
加密
隐藏从第三方传输的数据。
身份验证
确保交换信息的各方是他们所声称的身份。
完整性
验证数据未被伪造或篡改。
TLS 如何工作 ?
TLS 连接是通过一个称为 TLS 握手的流程启动的。当用户导航到一个使用 TLS 的网站时,客户端设备和 Web 服务器之间开始 TLS 握手。
在 TLS 过程中,客户端和 Web 服务器:
-
指定将要使用的 TLS 版本(TLS 1.0、1.1、1.2、1.3 等)
-
协商决定将要使用哪些密码套件
-
使用服务器的 TLS 证书验证服务器的身份
-
握手完成后,生成会话密钥用于加密两者之间的消息
TLS 握手为每个通信会话建立一个密码套件。密码套件是一组算法,其中指定了一些细节,例如哪些共享加密密钥(即会话密钥)将用于该特定会话。握手还处理身份验证,其中通常包括服务器向客户端证明其身份。这是通过使用公钥来完成的。公钥是使用单向加密的加密密钥,即任何拥有公钥的人都可以解读使用服务器私钥加密的数据,以确保其真实性,但只有源发送方才可以使用私钥加密数据。服务器的公钥是其 TLS 证书的一部分。数据完成加密和验明身份后,使用消息身份验证码(MAC)进行签名。接收方然后可以验证 MAC 来确保数据的完整性。
TLS 握手有哪些步骤 ?
TLS 握手涉及多个步骤,因为客户端和服务器要交换完成握手和进行进一步对话所需的信息。TLS 握手中的确切步骤将根据所使用的密钥交换算法的种类和双方支持的密码套件而有所不同。
RSA 密钥交换算法虽然现在被认为不安全,但曾在 1.3 之前的 TLS 版本中使用。大致如下:
-
“客户端问候(client hello)“消息
客户端通过向服务器发送”问候”消息来开始握手。该消息将包含客户端支持的 TLS 版本,支持的密码套件,以及称为一串称为”客户端随机数(client random)“的随机字节。
-
“服务器问候(server hello)“消息
作为对 client hello 消息的回复,服务器发送一条消息,内含服务器的 SSL 证书、服务器选择的密码套件,以及”服务器随机数(server random)“,即由服务器生成的另一串随机字节。
-
身份验证
客户端使用颁发该证书的证书颁发机构验证服务器的 SSL 证书。此举确认服务器是其声称的身份,且客户端正在与该域的实际所有者进行交互。
-
预主密钥
客户端再发送一串随机字节,即”预主密钥(premaster secret)“。预主密钥是使用公钥加密的,只能使用服务器的私钥解密,客户端从服务器的 SSL 证书中获得公钥。
-
私钥被使用
服务器对预主密钥进行解密。
-
生成会话密钥
客户端和服务器均使用客户端随机数、服务器随机数和预主密钥生成会话密钥。双方应得到相同的结果。
-
客户端就绪
客户端发送一条”已完成”消息,该消息用会话密钥加密。
-
服务器就绪
服务器发送一条“已完成”消息,该消息用会话密钥加密。
-
实现安全对称加密
已完成握手,并使用会话密钥继续进行通信。
TLS 1.3 中的握手有什么不同 ?
TLS 1.3 不支持 RSA,也不支持易受攻击的其他密码套件和参数。它还缩短了 TLS 握手,使 TLS 1.3 握手更快更安全。
TLS 1.3 握手的基本步骤为:
-
客户端问候
客户端发送客户端问候消息,内含协议版本、客户端随机数和密码套件列表。由于已从 TLS 1.3 中删除了对不安全密码套件的支持,因此可能的密码套件数量大大减少。客户端问候消息还包括将用于计算预主密钥的参数。大体上来说,客户端假设它知道服务器的首选密钥交换方法(由于简化的密码套件列表,它有可能知道)。这减少了握手的总长度。这是 TLS 1.3 握手与 TLS 1.0、1.1 和 1.2 握手之间的重要区别之一。
-
服务器生成主密钥
此时,服务器已经接收到客户端随机数以及客户端的参数和密码套件。它已经拥有服务器随机数,因为它可以自己生成。因此,服务器可以创建主密钥。
-
服务器问候和”完成”
服务器问候包括服务器的证书、数字签名、服务器随机数和选择的密码套件。因为它已经有了主密钥,所以它也发送了一个”完成”消息。
-
最后步骤和客户端”完成”
客户端验证签名和证书,生成主密钥,并发送”完成”消息。
-
实现安全对称加密
已完成握手,继续进行通信。