在花费大量时间解决客户端和服务器之间的连接问题后,我最终决定寻求帮助。
麻烦
Mac OS X Catalina 和 Linux 客户端可以很好地连接到服务器,但 Big Sur 不行。我还没有测试过 Mojave(理论上它的安全性会更松懈),也没有测试过 Windows 10。所有不同客户端的原因很复杂,但本质上我们是一家小型咨询公司,人们可以选择他们的平台,尽管较旧的 Mojave 只是因为他们还没有升级。无论哪种方式,这都会让我的工作(作为系统管理员)变得更加复杂,但事实就是如此。
服务器
- RedHat 8.2。其中一个配置为 FIPS 模式,另一个则未配置,因为 OpenVPN。当然,两者都运行 Libreswan。
- Libreswan 默认从 yum 安装。版本:3.29-7
- IKEv2 使用 NSS,使用 RSA 证书进行身份验证。
- 自定义根/中间 CA 基础设施。CRL 有效、集成且存储在 NSS 中。
- 防火墙、路由表、sysctl 设置等似乎都配置正确。我使用的是带有自定义规则集的 iptables,而不是firewalld。
客户
- Mac OS X Mojave、Catalina 和 Big Sur
- Windows 10
- Ubuntu 和 RedHat Linux 客户端
配置
客户端(Mobileconfig 将所有内容打包在一起)
我使用内置网络客户端,没有使用外部客户端来简化操作。大多数付费客户端似乎不支持 IKEv2,尽管我确实尝试过 GreenBow VPN。
VPN Payload 选项卡(Apple Configurator 2,Catalina/Big Sur 相同的数据/配置)
- 连接类型:IKEv2
- 服务器/远程标识符:服务器的 IP(服务器证书具有 SubjectAltName IP:服务器 IP)
- 本地标识符:假设不是 Big Sur,用户的电子邮件地址似乎在这里工作得很好。将其设置为空白也曾经有效。我不确定我做了什么更改,或者是否是我做的,但现在需要提供电子邮件。在同事的建议下,我也开始在客户端将其添加为 subjectAltName 电子邮件字段。
- 机器身份验证是证书、类型为 RSA 且 CA 颁发者名称设置正确。
- 所有其他安全内容(如 DH 参数和加密)都是中等级别,即 AES-256 和 DH21。我最初配置了 AES-256-GCM,以尝试避免与 SHA2 截断错误相关的任何问题。但这也不起作用。
证书有效负载选项卡
- 我以不同的方式配置了它。不过这里适用标准内容:.p12 身份,既有用户的私钥密码,也有导出密码(均为 23 个字符长)。时间长度为 920 天。我确实在某处读到过这可能是问题所在,但我发现客户端的日志并没有反映出对有效期长度感到不满。此外,我确实测试了更短的证书时间,大约 500 天,看看这是否有任何好处;结果没有。
- 在创建 PKCS12 期间,根/中间 CA 已包含在两种配置中:仅中间 CA 和完整 CA 链。这两种配置在 Big Sur 中都不起作用。
- 手动导入根/中间 CA;我已将两者标记为在所有用例中都受信任。我已将它们从登录钥匙串导入/复制到系统钥匙串。我已尽我所能找到有关此主题的所有方法,但均未奏效。
服务器端配置
auto=add
authby=rsasig
dpddelay=30
dpdtimeout=120
dpdaction=clear
fragmentation=no (Big sur gives a different error with this on)
modecfgpull=yes
modecfgdns="Internal DNS"
pfs=yes
rekey=yes
salifetime=8h
ikelifetime=8h
left=PUBLIC IP
leftcert=PUBLIC IP (I've tried varied forms here; @PUB... etc)
leftid=PUBLIC IP
leftsendcert=always
leftsubnet=0.0.0.0/0
leftrsasigkey=%cert
leftmodecfgserver=yes
rightaddresspool=Internal address pool
right=%any
rightrsasigkey=%cert
rightmodecfgclient=yes
客户端日志
首先,我在这里看到的唯一 GUI 错误弹出窗口是“用户身份验证失败”。然后我使用以下命令在 Mac OS X 上获取更好/更有用的日志:
log show --start DATE --predicate 'senderImagePath contains[cd] "NetworkExtension"'
这些日志大部分都是 1000 行垃圾。话虽如此,但这似乎很有意义:
2021-08-10 0x1aa44 Error 0x0 2375 0 NEIKEv2Provider: (NetworkExtension) [com.apple.networkextension:] Certificate evaluation error = kSecTrustResultRecoverableTrustFailure
2021-08-10 0x1aa44 Error 0x0 2375 0 NEIKEv2Provider: (NetworkExtension) [com.apple.networkextension:] Certificate is not trusted
2021-08-10 0x1aa44 Error 0x0 2375 0 NEIKEv2Provider: (NetworkExtension) [com.apple.networkextension:] Certificate authentication data could not be verified
2021-08-10 0x1aa44 Default 0x0 2375 0 NEIKEv2Provider: (NetworkExtension) [com.apple.networkextension:] IKEv2IKESA[2.2, C4CABCADAB06C2CF-75E7F26177F83187] state Connecting -> Disconnected error (null) -> Error Domain=NEIKEv2ErrorDomain Code=8 "Authentication: Certificate authentication data could not be verified" UserInfo={NSLocalizedDescription=Authentication: Certificate authentication data could not be verified}
2021-08-10 0x1aa44 Error 0x0 2375 0 NEIKEv2Provider: (NetworkExtension) [com.apple.networkextension:] IKEv2Session[2, C4CABCADAB06C2CF-75E7F26177F83187] Failed to process IKE Auth packet (connect)
笔记
正如之前关于客户端配置的评论中所述……我似乎已经完成了这项工作。它甚至在 Apple Configurator 显示屏中也显示这是一个可接受的配置包。显然它没有经过 Apple 签名,但这并不奇怪。标准的手动 IKEv2 配置根本无法满足我们的需求。而且可以肯定的是,它也不起作用。至少对于任何比儿童玩具服务器更复杂的东西来说都是如此。
我也研究过证书透明度问题;不幸的是,这不是 Mac OS X 的解决方案。它只是适用于 iPad 等设备的解决方案。尝试在启用 CT 并接受某些证书的情况下将 mobileconfig 安装到 OS X,它会被拒绝并且不会安装 mobileconfig。
服务器端日志
我让外部服务器处于调试模式,以便生成比平时更多的日志。也就是说,在这种情况下,服务器似乎对交易非常满意,而客户端却讨厌......有些事情。我不知道是什么。
我看到的是这样的:
Aug 10 serverName pluto[]: | offered CA: 'C=US, ST=US, O=companyName, OU=OUCA, CN=CAName, [email protected]'
Aug 10 serverName pluto[]: "remote"[51] serverIP #90: IKEv2 mode peer ID is ID_USER_FQDN: '[email protected]'
Aug 10 serverName pluto[]: | received v2N_INITIAL_CONTACT
Aug 10 serverName pluto[]: | Received unknown/unsupported notify v2N_NON_FIRST_FRAGMENTS_ALSO - ignored
Aug 10 serverName pluto[]: | received v2N_MOBIKE_SUPPORTED while it did not sent
Aug 10 serverName pluto[]: | received CERTREQ payload; going to decode it
Aug 10 serverName pluto[]: | CERT_X509_SIGNATURE CR:
Aug 10 serverName pluto[]: | 10 81 9a c1 4c a6 94 70 ca d1 7d 77 e1 5a ab 36
Aug 10 serverName pluto[]: | 93 3d cd 39
Aug 10 serverName pluto[]: | cert blob content is not binary ASN.1
Aug 10 serverName pluto[]: | verifying AUTH payload
Aug 10 serverName pluto[]: | required RSA CA is '%any'
Aug 10 serverName pluto[]: | checking RSA keyid 'serverIP' for match with '[email protected]'
Aug 10 serverName pluto[]: | checking RSA keyid 'C=US, ST=US, L=City, O=companyName, OU=OUCA, CN=UserCN, [email protected]' for match with '[email protected]'
Aug 10 serverName pluto[]: | checking RSA keyid '[email protected]' for match with '[email protected]'
Aug 10 serverName pluto[]: | trusted_ca_nss: trustee A = 'C=US, ST=US, O=companyName, OU=OUCA, CN=CAName, [email protected]'
Aug 10 serverName pluto[]: | key issuer CA is 'C=US, ST=US, O=companyName, OU=OUCA, CN=CAName, [email protected]'
Aug 10 serverName pluto[]: | an RSA Sig check passed with *AwEAAbi14 [remote certificates]
Aug 10 serverName pluto[]: "remote"[51] serverIP #90: Authenticated using RSA
服务器日志显示,Mac OS X Big Sur 客户端已正确验证身份。然后,它会继续构建 SA 关系等,正如您通常看到的那样。客户端会立即拒绝连接。我不明白的是 Catalina 和 Big Sur 之间有什么变化?
我没有找到有关此操作系统更改的任何信息。我不明白为什么 Apple 网站首页上没有用 60 号字体加粗显示这一点,哦,是的,有趣的是,我们完全改变了此版本操作系统中的 IPSEC 工作方式。而且,我厌倦了因为拔掉头发或反复撞墙而弄得头破血流。
任何帮助,将不胜感激。