首页/网络/协议速查/TLS 1.3 握手流程与 0-RTT

TLS 1.3 握手流程与 0-RTT

1-RTT 完成握手:ClientHello 直接带 key_share,服务器一回就能推出会话密钥;会话复用支持 0-RTT 提前发送数据(有重放风险)。

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

1-RTT 骨架

1-RTT 骨架
Client -> Server: ClientHello + key_share (+ early_data)
Server -> Client: ServerHello + key_share
                 {EncryptedExtensions, Certificate, CertificateVerify, Finished}
Client -> Server: {Finished}
# 大括号内消息在握手密钥下加密

观察与测试 0-RTT

观察与测试 0-RTT
openssl s_client -connect example.com:443 -tls1_3 -msg </dev/null 2>&1 | head -20
# curl 0-RTT: curl --http2 --tls13-ciphers ... --ssl-reqd(需服务器支持 early data)
KeyShareCH 预言一个 (EC)DHE 公钥,服务器可直接用,省一轮
兼容伪装ServerHello 后所有消息加密,中间设备误认为 1.2
0-RTT 阶段数据没有前向保密且可重放;代理/网关默认应只对幂等请求开放。

易错点

  • 0-RTT 与「重放攻击」:攻击者可复制 early data 包重发,业务层要去重/幂等

数据来源与参考

  • RFC 8446 §2(握手概览)
  • RFC 8446 §8(0-RTT 安全考虑)

相关工具

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