Mac IKEv2 描述文件:两个 SA 字典都要设,然后再测试
第二个字典缺失时,Child SA 会继承 IKE 参数。把两个都填好,把名称翻译过来,再检查双方实际协商的结果。
连接成功只能证明两端找到了一组彼此都能接受的值。受管理的 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 的字段。
| Key | Holds | Common mistake |
|---|---|---|
| EncryptionAlgorithm | Cipher for that association | Assuming an AEAD name also sets integrity |
| IntegrityAlgorithm | Integrity for the chosen suite | Leaving it set for an AEAD suite that does not use one |
| DiffieHellmanGroup | Numeric group identifier | Reading the number as key size in bits |
| LifeTimeInMinutes | Association lifetime | Setting 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 更新或网关变更就有基线可比,而不是只有一个今天碰巧能连上的描述文件。