这个错误出现在输密码之前,而这正是有用的信息:还没有任何认证发生,所以问题不在凭据。在 Linux 上,同一个 AnyConnect 弹窗可能来自旧协议版本、1024 位密钥交换群,或系统加密策略拒绝的密码套件。我在三台机器上用三种不同方法清掉过它,区分这些方案的并不是聪明程度,而是影响范围。每一种在合适的位置都站得住,放到别处就是个糟糕的默认值。

先读报错,再动策略

把弹窗里的原文完整记下来。版本类报错指向协议层,证书类报错指向信任或命名,登录失败则指向凭据。一个提供 TLS 1.0、1024 位 DHE 群、AES-256-CBC 与 SHA-1 签名的网关,可以持有完全有效的证书,却仍会在你的凭据发出之前被现代策略拒绝。

用系统自带的 OpenSSL 探测该端点,使用真实主机名和客户端实际使用的端口。

如果 openssl s_client -connect vpn.example.com:443 -servername vpn.example.com 失败而 -tls1 -cipher DEFAULT@SECLEVEL=0 成功,说明边界同时落在版本和密钥长度上。如果第一条命令报的是 DH 密钥太小而不是协议告警,那版本没问题,只需处理群大小。绝不要把私钥或口令放进探测命令。

方案 1:用加密策略放宽整台主机

在 Fedora 以及 RHEL 8 和 9 上,update-crypto-policies --set LEGACY 会降低 OpenSSL 的系统策略,update-crypto-policies --show 用来确认当前生效的值。它通常能恢复隧道,但策略是在进程启动时读取的,所以重新测试前要重启客户端以及它拉起的任何辅助进程。它同时为机器上每个 TLS 客户端放开旧协议和弱群,从隔壁窗口的浏览器一直到更新内核的包管理器。

这份宽度既是全部意义,也是全部麻烦。LEGACY 作用于整机、持久存在且极易被遗忘,因此它应当是诊断步骤,或受管镜像上一条有文档的例外,而不该成为工作站的常态。我见过一台机器在 LEGACY 上留了两年,只因一个内部门户需要它,而没人说得出它是何时开始的。

Debian 和 Ubuntu 没有这样的一键开关。等价做法是修改 /etc/ssl/openssl.cnf,在系统默认段里设置更低的 MinProtocol 和 CipherString = DEFAULT@SECLEVEL=0,影响范围相同,文件不同,版本升级时更容易被忘掉。

方案 2:只给一个客户端用一个配置文件

按进程生效的 OpenSSL 配置能把改动限制在一棵进程树内,但前提是文件按库期望的方式接线。只写一个 ssl_conf 段并不够:OpenSSL 先读顶层 openssl_conf 键,顺着它进入初始化段,之后才走到 SSL 默认值。

openssl_conf = openssl_init

[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=0

把 OPENSSL_CONF 指向该文件,并通过一个导出它的包装脚本启动 VPN 客户端。主机上其他一切都保留默认策略,这正是合规问询到来时最要紧的性质。在怪罪网关之前先确认文件真的生效:OPENSSL_CONF=/path/to/file openssl ciphers -s -tls1 应当列出 TLS 1.0 密码,结果为空则说明链路断了,客户端悄悄用了系统默认值。

该文件对版本敏感。OpenSSL 1.1.1 和 3.x 接受相同的段名,但 3.x 改变了围绕 provider 的指令处理,因此要用客户端自己的日志和一次测试握手来验证,而不是假定文件已被读取。段名打错会以失败开放告终,客户端会静默使用系统默认值。

限制在于覆盖面。任何链接 GnuTLS 或 NSS 的程序都会忽略 OPENSSL_CONF,客户端在未继承环境的情况下启动的辅助进程同样如此。构建包装脚本之前,先用 ldd 确认二进制实际链接的是哪个 TLS 库,因为这个答案决定该方案是否成立。

方案 3:一次性虚拟机或容器

对连续两周只连一个老网关的外包人员来说,带放宽策略的专用虚拟机比工作站更干净。旧表面和日常浏览器配置不再共用一份内核策略,处置方式是一次删除,而不是一条审计发现。

它仍是联网机器,所以要限制其访问并让它远离日常浏览。维护成本是多一个要打补丁的镜像,这很真实但有边界、看得见,不像笔记本上那个被遗忘的 LEGACY 标记。

比较之后剩下什么

按三个问题选:谁需要旧协议、需要多久、如果例外活过它的理由谁会注意到。一个应用、一个人、几天,指向按进程配置;一整批设备在同一台设备后面,指向网关本身。凡是要长期保留主机级 LEGACY 策略的,都是穿着技术外衣的采购决策。

持久的修法在网关上:TLS 1.2 或更高、至少 2048 位的群、AEAD 密码,以及采用现代签名的证书。向网关所有者提出这项变更,然后在客户端日志里确认协商出的版本和密码。把例外连同主机、网关、协商协议、批准人和到期日写下来,因为正是这份记录阻止临时绕行变成默认值。

相关文章