前言

TLS 1.3 是传输层安全协议的最新版本,相比 TLS 1.2,它在安全性和性能上都有显著提升。本文聚焦 TLS 1.3 的握手过程,解析其工作原理。

TLS 1.3 握手流程

TLS 1.3 将握手过程简化为 1-RTT(单次往返),流程如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Client                                          Server

ClientHello
  + key_share             -------->
                                             ServerHello
                                             + key_share
                                   {EncryptedExtensions}
                                   {Certificate}
                                   {CertificateVerify}
                                   {Finished}
                         <--------     [Application Data*]
{Finished}                -------->
[Application Data]        <------->     [Application Data]

1. ClientHello

客户端发送第一条消息,包含:

  • 支持的 TLS 版本:指示支持 TLS 1.3
  • 密码套件列表:如 TLS_AES_128_GCM_SHA256
  • key_share 扩展:包含 Diffie-Hellman 公钥(用于密钥交换)
  • signature_algorithms:支持的签名算法列表
1
2
客户端生成一个临时密钥对 (client_private, client_public)
ClientHello 中携带 client_public

2. ServerHello

服务器响应:

  • 选择的 TLS 版本:确认使用 TLS 1.3
  • 选择的密码套件:从客户端列表中选择
  • key_share:服务器的 DH 公钥
1
2
服务器生成临时密钥对 (server_private, server_public)
双方使用 DH 算法计算出共享密钥 shared_secret

3. 加密扩展(EncryptedExtensions)

此时双方已建立共享密钥,后续消息全部加密传输:

  • 服务器发送 EncryptedExtensions,包含非加密敏感的扩展参数

4. 证书与验证

  • Certificate:服务器证书链
  • CertificateVerify:服务器用私钥对握手消息签名,证明拥有证书

5. Finished

双方发送 Finished 消息,包含对整个握手的 HMAC 校验,确保握手未被篡改。

与 TLS 1.2 的对比

特性 TLS 1.2 TLS 1.3
握手往返次数 2-RTT 1-RTT
支持的算法 RSA、DH、ECDH、弱密码套件 仅 ECDH、强密码套件
证书验证 明文传输 加密传输
会话恢复 Session ID / Session Ticket PSK / 0-RTT
不安全算法 RC4、SHA-1、RSA 密钥交换 全部移除

密码套件格式

TLS 1.3 密码套件命名格式:

1
TLS_<AEAD>_<HASH>

示例:

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256

注意:TLS 1.3 不再在密码套件中指定密钥交换算法,因为强制使用 ECDH。

使用 OpenSSL 测试 TLS 1.3

1
2
3
4
5
6
7
8
# 查看 OpenSSL 版本(需要 1.1.1+)
openssl version

# 测试连接 TLS 1.3
openssl s_client -connect www.google.com:443 -tls1_3

# 查看支持的 TLS 1.3 密码套件
openssl ciphers -v -ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384

实际输出示例:

1
2
3
4
5
$ openssl version
OpenSSL 3.0.18 30 Sep 2025

$ openssl s_client -connect www.cloudflare.com:443 -tls1_3 2>/dev/null | grep "Protocol"
Protocol  : TLSv1.3

总结

TLS 1.3 通过以下改进提升了安全性和性能:

  1. 简化握手:1-RTT 减少延迟
  2. 移除弱算法:不再支持 RSA 密钥交换、RC4、SHA-1
  3. 加密证书:证书链在加密通道中传输
  4. 前向保密:强制使用临时 DH 密钥交换

参考资料