一个已经运行数小时的会话不会永远使用同一组密钥,这是有意为之。三种不同的事件都被叫作密钥轮换:在既有关联下更换会话材料、完整重建连接、以及重复身份检查。三者的触发条件、代价和故障特征各不相同。选错了,修复要么毫无作用,要么让隧道无故中断。

决定取决于究竟哪一层到期了。

三种被叫作轮换的操作

重新协商密钥会在现有控制关系中,用协议规定的机制生成新的流量密钥。IKEv2 通过新的子安全关联完成,TLS 1.3 通过密钥更新消息完成,WireGuard 则在达到时间或消息上限时通过新的握手完成。隧道地址和已认证的身份保持不变。

重连会丢弃连接并从零重建,这会重复地址分配、路由安装以及首次尝试所做的全部协商。

重新认证重复的是身份证明本身,可能涉及凭据、证书或第二因素。视产品而定,它可以与重连同时发生,也可以单独发生。

用户在续期时能看到什么

重新协商密钥应当几乎不可察觉。关联标识会变化,计数器可能重置,而应用保持自己的套接字;交换过程中单向的短暂停顿是正常的。在状态列表里看到新标识并不是故障证据。交换之后的那行日志才能说明它是否完成。

续期时真正的掉线会指向某个具体位置。提案不匹配、凭据过期或路径变化各自产生不同的日志行,而其中只有一种能靠调整生存期解决。

三者在实际中如何区分

如果唯一过期的是密钥材料,就重新协商密钥。如果对端地址、路由或 NAT 绑定发生变化、数据包不再到达,就重连。如果组织要求定期检查身份,那就是重新认证,任何生存期调整都替代不了它。

协议的默认值通常已经给出正确答案。WireGuard 在达到时间与数据量阈值后无需用户干预即更换密钥;IKEv2 的生存期按子关联协商;基于 TLS 的隧道在既有会话内轮换密钥。为了避免反复出现的错误而调高生存期,只会推迟故障,并在密钥泄露时延长暴露时间。

长会话有一个要点值得注意:单靠频率并不能产生前向保密。这一性质取决于会话密钥与长期秘密的关系,以及旧密钥是否被销毁,这属于设计与实现问题,而不是某个设置。

先选默认值,再记录阶段

除非有书面要求另行规定,否则保留厂商默认值;如果确实要改生存期,就在两端同时改。然后记录每个事件走到了哪个阶段,以便下次出现时对照握手的同一点。

swanctl --list-sas
ip xfrm state | grep -E 'proto|replay-window'
wg show
journalctl -u strongswan --since '1 hour ago' | grep -i -E 'rekey|rekeyed|child'

修正之后,做一次受控续期,并通过新关联发送新的应用流量。报告已建立却不转发任何数据的隧道,正是这项检查要抓的故障。

相关文章