TLS 1.3 相比 TLS 1.2 的改进

TLS 1.3 在握手效率、安全性和密码套件方面的主要改进

问题

TLS 1.3 相比 TLS 1.2 做了哪些改进?

解答

1. 握手效率提升

TLS 1.2 握手流程(2-RTT):

Client                                Server
  |                                     |
  |  -------- ClientHello --------->    |
  |  <------- ServerHello ----------    |
  |  <------- Certificate ----------    |
  |  <------- ServerKeyExchange ----    |
  |  <------- ServerHelloDone ------    |  RTT 1
  |                                     |
  |  -------- ClientKeyExchange --->    |
  |  -------- ChangeCipherSpec ---->    |
  |  -------- Finished ------------>    |
  |  <------- ChangeCipherSpec -----    |
  |  <------- Finished -------------    |  RTT 2
  |                                     |
  |  ========= 加密通信 =============    |

TLS 1.3 握手流程(1-RTT):

Client                                Server
  |                                     |
  |  -------- ClientHello --------->    |
  |           + key_share               |
  |           + supported_versions      |
  |                                     |
  |  <------- ServerHello ----------    |
  |           + key_share               |
  |  <------- {EncryptedExtensions} -   |
  |  <------- {Certificate} ---------   |
  |  <------- {CertificateVerify} ---   |
  |  <------- {Finished} -----------    |  RTT 1
  |                                     |
  |  -------- {Finished} ---------->    |
  |                                     |
  |  ========= 加密通信 =============    |

TLS 1.3 还支持 0-RTT 恢复,客户端可以在首次握手时就发送加密数据。

2. 移除不安全的加密算法

移除的算法原因
RSA 密钥交换不支持前向安全
CBC 模式易受 BEAST、Lucky13 攻击
RC4已被破解
SHA-1碰撞攻击
MD5已被破解
DES/3DES密钥长度不足
静态 DH不支持前向安全

3. 密码套件大幅简化

TLS 1.2 密码套件示例(几十种):

TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
...

TLS 1.3 密码套件(仅 5 种):

TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_CCM_SHA256
TLS_AES_128_CCM_8_SHA256

密钥交换算法从密码套件中分离,单独协商。

4. 强制前向安全

TLS 1.3 只支持 ECDHE 和 DHE 密钥交换,确保即使服务器私钥泄露,历史通信也无法被解密。

// TLS 1.2:RSA 密钥交换(无前向安全)
// 私钥泄露 → 所有历史流量可解密

// TLS 1.3:仅 (EC)DHE(前向安全)
// 私钥泄露 → 历史流量仍然安全

5. 握手消息加密

TLS 1.2:
ClientHello      → 明文
ServerHello      → 明文
Certificate      → 明文  ← 证书信息暴露
Finished         → 加密

TLS 1.3:
ClientHello      → 明文
ServerHello      → 明文
Certificate      → 加密  ← 证书信息保护
Finished         → 加密

ServerHello 之后的所有消息都被加密,防止中间人窥探证书等敏感信息。

关键点

  • 握手从 2-RTT 降到 1-RTT,支持 0-RTT 恢复,连接建立更快
  • 移除 RSA 密钥交换,强制使用 ECDHE/DHE,保证前向安全
  • 密码套件从几十种精简到 5 种,只保留 AEAD 加密模式
  • 握手消息加密,ServerHello 后的内容对中间人不可见
  • 移除不安全算法:RC4、CBC、SHA-1、MD5、3DES 等全部废弃