这个问题已经存在一段时间了,我还没能找到任何解决方案。它出现在 Ubuntu 18.04 中,我在 16.04 中也遇到了同样的问题。
与 建立 VPN 连接时network-manager-openconnect
,系统日志中记录以下错误:
Jun 25 09:27:00 redacted openconnect[18890]: Server certificate verify failed: signer not found
这里的问题是,连接到的是 VPN 服务器的 IP 地址,而不是 DNS 名称。这会导致证书验证错误。看起来,作为对此的补偿,提供了服务器证书哈希,但这会导致另一个不同的错误。尽管在 VPN 配置中指定的是主机名而不是 IP 地址,但情况仍然如此。
有没有办法强制网络管理器通过主机名而不是 IP 地址调用 openconnect?
查看 NetworkManager 运行的命令:
$ ps aux | grep openconnect
/usr/sbin/openconnect --servercert sha256:<hash> --syslog --cookie-on-stdin --script /usr/lib/NetworkManager/nm-openconnect-service-openconnect-helper --interface vpn0 <ip>:443
为了演示证书错误,请手动运行该命令,不带 --servercert 参数:
$ /usr/sbin/openconnect <ip>:443 --authenticate
POST https://<ip>/
Connected to <ip>:443
SSL negotiation with <ip>
Server certificate verify failed: certificate does not match hostname
Certificate from VPN server "<ip>" failed verification.
Reason: certificate does not match hostname
To trust this server in future, perhaps add this to your command line:
--servercert sha256:<hash>
Enter 'yes' to accept, 'no' to abort; anything else to view:
Note the certificate verification failure.
现在使用主机名而不是 IP - 一切都很好:
$ /usr/sbin/openconnect <hostname>:443 --authenticate
POST https://<hostname>/
Connected to <ip>:443
SSL negotiation with <hostname>
Connected to HTTPS on <hostname>
XML POST enabled
Please enter your username and password.
No certificate errors.
现在,使用带有 servercert 参数的 IP:
$ /usr/sbin/openconnect <ip>:443 --authenticate --servercert sha256:<hash>
POST https://<ip>/
Connected to <ip>:443
SSL negotiation with <ip>
Server certificate verify failed: signer not found
Connected to HTTPS on <ip>
XML POST enabled
Please enter your username and password.
将错误与第一个示例进行比较 - 这是一个不同的错误。这个错误失败是因为找不到签名者。考虑到我们只是指定一个哈希,我想这是有道理的,因为没有信任链可以遵循。
为什么网络管理器使用 IP 而不是主机名来调用 openconnect?可以强制使用主机名吗?这实际上是 NetworkManager 中的一个错误吗?