连接成功只能证明两端找到了一组彼此都能接受的值。受管理的 Mac IKEv2 描述文件带有两个安全关联字典,网关有自己的提议列表,连接只在双方都允许的交集上成立。按顺序做完下面的检查,在两端出现分歧的地方停下来,而不是再加一种加密算法看看有没有用。每一步排除的是描述文件的不同层次。

改任何值之前先看两个字典

在 VPN 载荷的 IKEv2 设置里,IKESecurityAssociationParameters 描述 IKE 关联,ChildSecurityAssociationParameters 描述 Child SA。Apple 的架构规定:第二个字典缺失时,IKE 参数同样适用于 Child SA。这种继承很方便,也正因如此,描述文件里才会留下没人有意识选过的值。

<key>IKESecurityAssociationParameters</key>
<dict>
  <key>EncryptionAlgorithm</key><string>AES-256</string>
  <key>IntegrityAlgorithm</key><string>SHA-256</string>
  <key>DiffieHellmanGroup</key><integer>14</integer>
  <key>LifeTimeInMinutes</key><integer>1440</integer>
</dict>

即使两行取值相同,也要都写进部署记录。这样评审者能看出 Child SA 是被考虑过的,而不是碰巧继承来的;日后改动一行也不会悄悄改掉另一行。

复制字符串之前先弄清每个键的含义

这四个键与别的产品里的提议字符串并不通用。算法名称依赖具体实现,所以要按各端文档化的语法去转换选定的套件,而不是把 strongSwan 的提议直接粘进 Apple 的字段。

KeyHoldsCommon mistake
EncryptionAlgorithmCipher for that associationAssuming an AEAD name also sets integrity
IntegrityAlgorithmIntegrity for the chosen suiteLeaving it set for an AEAD suite that does not use one
DiffieHellmanGroupNumeric group identifierReading the number as key size in bits
LifeTimeInMinutesAssociation lifetimeSetting it shorter than the gateway's renewal margin

「用最大的组号」不是选择方法。组号标识的是不同的构造,数字更大并不意味着同一种东西的更强版本。让网关的所有者批准整套组合,因为套件是作为整体判定有效或无效的。已批准的加密算法配上未批准的组,就是未批准的提议,它要么失败,要么悄悄退回双方都没有记录的东西。

检查让旧算法退役的版本限制

Apple 的载荷架构把 DES、3DES、SHA1-96、SHA1-160 和 Diffie-Hellman 组 1、2、5 限制在 26 之前的 macOS 版本上。从旧部署沿用下来的描述文件可能仍含有其中某个值,也仍能连上旧网关,而这正是能用的配置掩盖退役日期的情况。

先取得受支持的 Mac 版本和网关维护的提议策略,再构建描述文件。然后选定交集,并记录其余选项为什么被排除。一条「网关仍为老客户端提供组 2」的说明,比没有来龙去脉的算法清单更有价值。没有这条说明,下一位评审者就分不清这是刻意的例外还是疏漏。

把认证单独放在一行检查

对提议达成一致,并不能修正错误的服务器身份。网关身份、证书信任以及用户或设备凭据是彼此独立的决定,算法完全对齐时它们也照样可能失败。改证书的签名算法,和选 IKE 加密算法不是同一件事,尽管两者会出现在同一次评审里。

把预期的服务器身份和提议一起记在记录里。证书更换后连接失败时,这组配对能告诉下一个人:先动的是协商,还是信任决定。

部署一个修订版,并检查实际协商了什么

使用组织支持的发布流程,记录描述文件标识、修订版、目标 Mac 版本以及对应的网关策略。给无法连接的设备一条有记录的恢复路径,避免再建一个同名、没人能说清归属的描述文件。

验收时,通过获批的诊断手段检查已安装的配置以及协商出的 IKE 和 Child 关联。然后强制执行一次受控续期,因为首次连接只能说明初始协商成功;生存期不匹配通常要到第一次换密钥时才暴露,那时部署早已签收。

把验收通过的套件和修订记录放在一起。这样下一次 macOS 更新或网关变更就有基线可比,而不是只有一个今天碰巧能连上的描述文件。

相关文章