TLS 1.3 的 0-RTT,快但能重放
TLS 1.3 的 0-RTT 允许客户端在第一个往返里就带上应用数据,省一个 RTT。代价是这些数据可以被攻击者截获后重放——服务端无法区分“新请求”和“重放的旧请求”。
所以只适合幂等操作:GET、静态资源。任何会改变状态的操作(下单、扣款、发消息)都不该走 0-RTT。
nginx 里默认不开,开了要显式:
ssl_early_data on;
配套要在应用层拒绝非幂等方法:
if ($request_method !~ ^(GET|HEAD)$) {
return 425;
}
425 Too Early 就是为这个场景定义的。多数站点根本不需要 0-RTT,省的那点延迟不值得引入重放风险。