最近遇到 IKEv2 服务器证书不可接受的问题。
之前说过使用 Let's Encrypt 证书的话需要把中间证书放在 /etc/ipsec.d/cacerts/
里,之后就可以顺利连接了。
但是在 Windows 10 上导入了用户 AnyConnect VPN 的证书,包括自签名的根证书后,会再次无法连接 IKEv2。
StrongSwan 设置方面,使用了自签名的根证书来生成 IKEv1 使用的客户端证书,而 IKEv1 和 IKEv2 的服务器端证书则都是使用 Let's Encrypt 签发的证书。
当客户端连接 IKEv2 时,如果系统里没有导入自签名的根证书,服务器端会发送 Let's Encrypt 的中间证书,所以客户端可以用来验证服务器端证书,从而顺利连接。
然而当客户端系统上有这个自签名的根证书时,连接 IKEv2 时客户端会请求匹配这个根证书,而服务器端在匹配到这个根证书后,就不再向客户端发送 Let's Encrypt 的中间证书了。这时候由于客户端系统里没有这个中间证书,所以客户端验证服务器证书就失败了。
如果客户端系统导入 Let's Encrypt 的中间证书,就可以顺利连接了。目前还没有找到更好的方法。