IKEv2 的 SA 生存周期:软重新生成密钥、硬到期与独立的重新认证
软限制启动替换,硬限制让旧状态退役,而使用量限制可能先触发。这三者都不会重复用户认证。
计时器决定隧道密钥何时被替换,而涉及的两个阈值常被混为一谈。其实并非如此。软生存周期会在当前安全关联仍在承载流量时,请求对端建立替代;硬生存周期则是期限,过了这一刻旧关联就会消失,无论替代是否成功。两者之间存在一个重叠窗口,其存在是为了让数据包不至于掉进空隙。
生存周期实际限定了什么
IPsec 安全关联是一束密码状态:单向密钥、安全参数索引、算法集和选择器。生存周期限定该状态可以使用多久,从而限定一把密钥保护多少流量。它是对密钥的遏制措施,而不是关于用户会话应当持续多久的陈述。
IKE 控制关联有自己的密钥和自己的生存周期,与承载数据的子关联相互独立。人们第一次把两份时间表混淆,就在这里。
软限制启动替换,硬限制结束旧状态
当软阈值临近时,对端发起替换。实现通常提前触发并随机化时刻,以免拥有数百条隧道的头端一次性重新生成全部密钥。在 IKEv2 中,替换是一次携带新 nonce 的 CREATE_CHILD_SA 交换;若配置了完善前向保密,还会进行一次 Diffie-Hellman 交换。结果是一对拥有新密钥的新关联。
重叠很重要。短时间内对端可能同时持有新旧两个关联,抓包会显示两组标识符。这说明机制在正常工作,而不是故障。
硬阈值毫不宽容。若到那时替换仍未完成,旧关联必须退役,仅由它保护的流量会停止。 一路走到硬到期为止、反复失败的密钥重新生成 才是值得调查的运行信号,因为隧道每个周期都靠一个期限撑着。
使用量限制可能早于任何时钟触发
时间不是唯一的界限。实现可以为一柄密钥所保护的字节数或数据包数设上限,繁忙的隧道会远在数小时的计时器之前撞上使用量限制。strongSwan 为时间、字节和数据包分别提供生存周期与余量设置,这意味着实际续期点是先到的那个阈值减去配置的余量。
当隧道续期远比其配置的小时数所暗示的更频繁时,先检查字节和数据包限制,再怪罪时钟。同样时间设置下,饱和链路与空闲链路的密钥重新生成频率会明显不同,只有其中之一在遵循计时器。
每个对端各自执行自己的策略
IKEv2 并不协商一个双方必须完全一致展示的单一生存周期。每一侧各自应用本地策略,并可在自身限制临近时发起替换,正如 RFC 7296 第 2.8 节所述。因此两个对端配置小时数不一致并不自动成为缺陷,不过若一方不断替换另一方刚安装的状态,差异极大的取值会造成反复折腾。
协调意味着彼此兼容的行为:重叠窗口足够长以完成交换,余量留出重试的空间,监控则显示每一次续期由哪一侧发起。
重新生成密钥不等于重新认证
重新生成密钥会在既有已认证关系之下刷新密钥。重新认证则重做身份检查,无论是证书交换还是 EAP 对话。两者按各自的时间表运行,一次成功的密钥重新生成,并不能说明该账户是否还应拥有访问权限。
这一区分对吊销很重要。禁用账户、吊销证书或终止会话属于访问决策,需要实现中给出明确策略;它们并不从 SA 计时器推导而来,而且对于已被剥夺权限的身份,密钥重新生成仍会照常继续。
每条隧道应记录什么
记录哪条关联触发了续期、新旧标识符、触发了哪个阈值,以及替换是否在重叠窗口内完成。这四个字段能让密钥重新生成的问题在演变成中断之前显现,并区分激进策略与正在失效的策略。
把访问移除的时间表放在那份记录旁边,而不是记录里面。密码卫生与身份策略是不同的控制手段,一条按时轮换密钥的隧道,仍可能保留着没人打算留下的会话。