TLS 1.3 里那些被忽略的字节
把一次完整的 TLS 1.3 握手拆开看,真正影响体验的不是加密算法,而是往返次数和第一个应用的字节什么时候能出去。TLS 1.3 把 ServerHello 之后的整个证书链都放进了加密区,这一点常被忽略:被动观察者看不到证书,也看不到 CertificateVerify,只能看到 SNI 和 key_share。
这意味着链的长度是有代价的。一张普通的三层链大约 3 KB,如果末尾还带了自签根,握手会再多出一千多字节。在丢包率 2% 的链路上,多一个满尺寸的握手包,就意味着多一次重传概率。
会话恢复的情况完全不同。PSK 模式下客户端第一个包就把 early data 带上,代价是失去前向保密。要不要开 0-RTT,取决于你的场景:静态资源可以,带副作用的请求不行。
最后是一个常被忽视的细节:服务端的 key_share 如果只发一个组,客户端用别的组来,就要多一次 HelloRetryRequest,整整一个额外往返。现代实现一般会预生成 X25519 的 share,就是为了避开这一下。