我正在尝试使用 OpenConnect VPN 客户端连接到托管自签名 TLS 证书的 VPN 服务器。VPN 中的身份验证在 Microsoft SSO 后面。
当我尝试连接到 VPN(设置->网络->VPN)时,会出现一个浏览器弹出窗口(进程实际上是 /usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitWebProcess),我可以使用 SSO 登录,但弹出窗口中会出现一条消息“不可接受的 TLS 证书”。
我尝试过的事情:
- 将VPN服务器证书复制到
/usr/local/share/ca-certificates/extra/
,然后运行sudo update-ca-certificates --fresh
。
Clearing symlinks in /etc/ssl/certs...
done.
Updating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
138 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
我手动检查了 - 证书确实被附加到/etc/ssl/certs/ca-certificates.crt
- 在 VPN 配置中添加了证书(设置->网络->VPN->VPN 1->身份-> CA 证书)。但仍然出现“不可接受的 TLS 证书”。
我的发现:
- 在
openconnect
cli 工具中,有一个参数用于传递证书 sha--servercert
。但那是在 cli 中。不确定 openconnect 网络管理器 GUI 是否有类似的东西。 - 检查正在运行的进程确认 GUI 是 webkit2 的一部分。
- webkit2 可能不支持自签名证书
操作系统:Ubuntu 23.10
OpenConnect 版本:v9.12-1
。使用GnuTLS 3.8.1
。
答案1
我对为什么会出现‘不可接受的 TLS 证书’错误的最佳猜测可能是 webkit2 浏览器(由网络管理器 openconnect 为 SSO 启动)没有读取证书/etc/ssl/certs
- 这很奇怪。
解决方法:
- 设置mitmproxy和它的mitmproxy 证书. 使用以下方式从终端运行代理
mitmdump --ssl-insecure
- 在网络管理器中配置并启用代理。(设置 -> 网络 -> 代理(手动))。mitmproxy 的默认主机和端口为 127.0.0.1:8080
- 现在尝试连接到 VPN。它应该可以工作。
- 一旦建立 VPN 连接,您就可以终止该
mitmdump
进程并在网络设置中关闭代理。这不会影响 VPN 连接。
本质上发生的事情是,代理服务器不会验证 VPN 服务器提供的 TLS 证书(因为该--ssl-insecure
参数)。这让我们可以进行 SSO。
注意 - 一旦建立 VPN 连接,务必停止代理服务器,因为代理服务器处于不安全模式下运行。
提示 - 一旦将代理详细信息输入代理设置中,代理就可以已开启使用gsettings set org.gnome.system.proxy mode 'manual'
和已关闭使用gsettings set org.gnome.system.proxy mode 'none'
。使用这些命令会使它变得更容易一些。