TLS加密过程

整理基于TLS 1.2

TLS 握手主要包含两个阶段的加密机制:

  • 非对称加密用于:证书验证 + 密钥交换(加密 pre-master secret)
  • 对称加密用于:实际数据传输(HTTP 内容) + 握手完成消息的加密校验

1.整个 TLS 1.2 握手过程如下:

1.1 TCP 连接建立

客户端与服务器先通过TCP三次握手建立可靠连接

1.2 ClientHello(客户端发起)

客户端发送:

  • 支持的TLS版本和加密算法套件
  • 一个随机数 client_random
  • 以及可选的 SNI 域名字段

这个阶段是明文发送的

1.3 ServerHello + 证书返回

服务器返回:

  • 选定的 TLS 协议版本、加密算法
  • 一个随机数 server_random
  • 服务器的数字证书(包含服务器公钥、公钥签名、颁发者等)

客户端拿到证书后会:使用内置的 CA 公钥验证服务器证书签名是否合法
这个阶段也是明文发送的

1.4 客户端生成对称密钥(pre-master secret)

  • 客户端生成一个pre-master secret

  • 然后用服务器证书中的公钥加密它,发送给服务器,非对称加密

  • 这一步是非对称加密(RSA/ECDHE),确保密钥协商过程安全

1.5 双方派生对称密钥(session key)

  • 客户端和服务器都拥有:
  • pre-master secret
  • client_random
  • server_random

双方使用 TLS 中的 PRF(伪随机函数)派生出:

  • 会话加密密钥(对称加密用)
  • 消息认证密钥(MAC)
  • 初始化向量等

1.6 Finished 消息互发

双方用协商好的 对称密钥 对 Finished 消息加密发送
这一步开始使用对称加密(如 AES)
主要用于验证密钥是否一致,防止中间人攻击

1.7 加密通信开始

客户端与服务器使用协商好的会话密钥对后续的 HTTP 数据进行对称加密

1.8 总结:

TLS 握手过程中一共进行四次核心消息交互,前两次是明文,后两次是加密:

  • 第一次是客户端发送 ClientHello,包含支持的算法、随机数等,明文发送;
  • 第二次是服务器响应 ServerHello,附带证书、公钥等,也是明文;
  • 第三次客户端发送密钥交换消息,使用服务端公钥加密(非对称加密),并用协商出的 session key 加密 Finished(对称加密);
  • 第四次服务器也发送 Finished,同样使用对称加密。

tls握手过程

2.client_random和server_random的作用是什么?

在 TLS 协议中,client_random 和 server_random 是由客户端和服务器在握手过程中各自生成的随机数。
它们和客户端生成的 pre-master secret 一起作为输入,通过 PRF(伪随机函数)派生出最终的 session key,用于后续对称加密。
这两个随机数的作用有三点:

  • 确保每次会话密钥都是唯一的,防止重放攻击;
  • 参与派生对称加密密钥,增强密钥协商过程的安全性;
  • 参与 Finished 消息的验证过程,确保握手完整性。

3.TLS 是基于 TCP 还是 UDP?

  • TLS 通常建立在 TCP 协议之上,而非 UDP。因为 TLS 握手过程需要可靠、有序的数据传输,而 TCP 能够提供连接管理、丢包重传等功能,这是 UDP 不具备的。
  • TLS 握手在每次连接中只进行一次,具体包括多个阶段:协商协议版本、交换随机数、验证证书、公钥加密 pre-master、派生对称密钥、互相确认等。

4.CA 证书有什么用?为什么要引入它?

CA 证书的作用是用于验证服务器的身份,它是 TLS/HTTPS 中用于建立“信任机制”的核心部分。
在 TLS 握手中,服务器会把它的数字证书(包含服务器公钥)发给客户端。客户端无法直接判断这个证书是否真实可信,于是就依赖由受信任的 CA 签发的数字签名。
客户端使用系统或浏览器内置的 CA 公钥对证书的签名进行验证,从而确认这个公钥确实属于目标服务器,防止中间人伪造。
总结来说,CA 引入的目的是解决服务器公钥的可信性问题,防止中间人攻击,实现身份认证和安全通信。

5.RSA 在 TLS 中有什么缺点?为什么现在用 ECDHE?

在 TLS 1.2 中,RSA 被用来加密客户端生成的 pre-master secret,从而实现密钥交换。但 RSA 的核心问题是 不支持前向保密,也就是一旦服务器私钥泄露,历史通信数据也能被解密,非常危险。
ECDHE 是基于椭圆曲线的临时密钥交换算法,它每次连接都会生成临时密钥对,即使服务器私钥泄露,历史通信内容也无法被还原,具备前向保密能力。同时,ECDHE 的性能更高、安全性更强,已经成为 TLS 1.3 的默认密钥交换方式。
因此,现代 TLS(特别是 TLS 1.3)已经弃用 RSA 密钥交换,全面转向使用 ECDHE 或 ECDHE-RSA/ECDHE-ECDSA 等混合算法。

ECDHE