首页/网络/协议速查/TLS 1.3 的五个标准套件

TLS 1.3 的五个标准套件

1.3 套件只描述 AEAD 与 HKDF 哈希,密钥交换与认证由握手扩展决定:AES-GCM、AES-CCM、CHACHA20-POLY1305。

协议速查网络更新于 2026-10-13

1.3 套件被简化了

TLS 1.2 的套件名把密钥交换、认证、加密、散列全串在一起;TLS 1.3 把它们拆开:套件只描述 AEAD 加密算法与 HKDF 使用的散列,密钥交换(如 X25519)与认证方式改由握手扩展协商。因此 1.3 只有五个标准套件,配置界面也更简单,但不同软件里参数名并不统一。

基本信息

标准套件数五个:三个必须实现的 AEAD 套件加两个 CCM 相关套件
命名组成TLS_ 前缀加加密算法加散列,不再包含密钥交换与签名
协商方式supported_groups 扩展决定曲线,signature_algorithms 决定签名算法
配置差异Nginx 用 ssl_conf_command Ciphersuites,OpenSSL 命令行用 -ciphersuites

五个套件

套件底层算法典型选用
TLS_AES_128_GCM_SHA256AES-128-GCM默认首选,有 AES-NI 时性能好
TLS_AES_256_GCM_SHA384AES-256-GCM高安全或合规要求场景
TLS_CHACHA20_POLY1305_SHA256ChaCha20-Poly1305无 AES 硬件加速的移动端
TLS_AES_128_CCM_SHA256AES-128-CCM物联网等受限环境,较少用
TLS_AES_128_CCM_8_SHA256AES-128-CCM-8标签仅 8 字节,安全性较弱,慎用

查看与指定套件

查看与指定套件
openssl ciphers -v -s -tls1_3          # 列出本机 OpenSSL 支持的 1.3 套件
openssl s_client -tls1_3 -ciphersuites TLS_AES_128_GCM_SHA256 -connect example.com:443 </dev/null | grep -E 'Protocol|Cipher'
# Nginx 侧:1.3 套件要用 Ciphersuites 参数,不能用 ssl_ciphers
# ssl_conf_command Ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;

典型使用场景

  • 安全基线要求只启用 TLS 1.3 时,确认套件配置是否被正确解析
  • 移动端为主的业务:为无 AES 加速的设备保留 ChaCha20 套件
  • 排查握手失败:确认客户端与服务器在曲线与签名算法上是否有交集
  • 性能对比:对比 AES-GCM 与 ChaCha20 在不同平台上的吞吐差异
1.3 的 CCM 套件标签较短(尤其 CCM_8 只有 8 字节认证标签),通常只在受限设备上使用;通用服务端保留 GCM 与 ChaCha20 三件套就能覆盖绝大多数客户端。
1.3 握手在 ServerHello 之后的内容全部加密,用抓包工具看不到证书与套件明文,排查时需要用 openssl s_client 或带密钥日志的解密配置。
只启用 1.3 会让仅支持 1.2 的老客户端直接失败:过渡期保留 1.2 并观察客户端版本分布,确认无影响后再收窄,比一次性切换稳妥。

易错点

  • 配置工具里 1.3 套件参数名不同:Nginx 用 Ciphersuites、OpenSSL 命令行用 -ciphersuites,写错会静默沿用默认值,以为改动生效了
  • 把 1.3 套件写进 ssl_ciphers:该指令只作用于 1.2 及以下,配置看起来存在但完全不生效
  • 老客户端不支持 1.3 却只在服务端放开 1.3:握手直接失败,需要保留 1.2 一段时间并做好灰度
  • 以为套件名里能指定密钥交换:1.3 已把曲线与签名拆分到扩展,靠套件名做兼容性控制的想法在 1.3 上行不通

数据来源与参考

  • RFC 8446 §9.1(强制套件)
  • RFC 8446 附录 B.4

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌