关闭 ssl_early_data 可根除 TLS 1.3 重放风险——它禁用 0-RTT 数据通道,强制所有请求走标准 1-RTT 握手,确保身份校验与密钥新鲜性。

直接设 ssl_early_data off; 是最简单、最彻底的规避方式——它从协议层切断 0-RTT 数据通道,让所有请求都走标准 1-RTT 握手,重放攻击自然无从发生。
为什么关掉就能根除隐患
TLS 1.3 的重放风险只存在于 early data 阶段:客户端在 ServerHello 返回前就发出了加密应用数据,而此时握手尚未完成,服务器还没验证身份,也无法保证密钥新鲜性。只要禁用 early data,整个连接就回归到“先完成握手、再传业务数据”的安全流程,所有请求都具备前向保密和身份校验。
关键配置要点
- 必须显式写在 server 块内:该指令不继承自 http 或 stream 上下文,只对当前 HTTPS server 生效
- 无需搭配其他开关:不用关 TLSv1.3,也不用停会话缓存或 PSK;关掉 early data 后,TLS 1.3 仍可正常运行 1-RTT 握手
- 兼容性无影响:旧客户端(如仅支持 TLS 1.2)完全不受干扰;新客户端会自动降级为标准流程,无报错、无中断
配合建议(非必需但更稳妥)
虽然关掉 ssl_early_data 已足够,若你同时追求明确的安全意图表达和运维可追溯性,可补充:
- 在响应头中主动声明:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; - 日志中记录决策依据:
log_format secure "$time_iso8601 $ssl_protocol $ssl_cipher $request"; - 定期检查是否意外启用:
nginx -T 2>/dev/null | grep -A2 "ssl_early_data"
不复杂但容易忽略。


















