文档

客户端严格验证

默认情况下,客户端对每个连接都加密,但不验证另一端是谁——与浏览器接受自签名证书一样属于「首次使用即信任」。严格验证改变了这一点:客户端用它提供的 Root CA 检查服务器证书,只有证书链、有效期和 SAN 全部通过才允许连接。这使得针对连接的中间人攻击实际上无从下手,代价只是多一步手工操作:把服务器的 Root CA 交给客户端。

在哪里设置

严格验证在客户端的服务器编辑面板中按服务器逐一配置,与地址、密钥并列:

  1. Root CA 公钥证书(PEM) — 用于填写服务器 Root CA 公钥证书的多行输入框;
  2. 严格验证 CA、有效期和 SAN,失败时拒绝连接 — 只有填入 CA 后才可勾选。
桌面客户端的服务器编辑面板:Root CA 公钥证书(PEM)多行输入框,下方是严格验证复选框

把 Root CA 交给客户端

两种方式,来源相同(服务器的 证书与 TLS 页面——见「域名与 SAN 管理」页面):

  • 复制粘贴 — 在 Web 界面点击 复制 Root CA,把 PEM 粘贴到客户端的 Root CA 公钥证书(PEM) 字段;
  • 导入分享串 — 客户端生成的分享串会在地址和密钥之外一并内嵌 Root CA。导入这样的分享会自动预填 CA 字段,接收方只需勾选严格验证。

CA 对每个客户端都相同,且证书续签不会改变它——每台服务器设置一次即可。

严格模式检查什么

勾选之后,到该服务器的每个连接都必须出示满足以下条件的证书:

  1. 证书链能追溯到所配置的 Root CA——由其他任何 CA 签发的证书都会被拒绝;
  2. 在有效期内——已过期或尚未生效的证书会被拒绝;
  3. SAN 与你连接所用的地址匹配——为其他名称签发的证书会被拒绝。

任何一项检查失败,连接都会被拒绝,并给出说明是哪一项失败的错误。不勾选(或未填 CA)时,连接仍然加密,但跳过这些检查。

核对指纹

信任 CA 之前,先确认拿到的是真的:证书与 TLS 页面显示 Root CA 的 SHA-256 指纹。把它与即将粘贴的 PEM(或分享串中内嵌的 PEM)比对。如果不一致,不要启用严格验证——改用可信渠道重新获取 CA。

常见失败原因

  • SAN 不匹配 — 你连接所用的名称或 IP 不在证书里。在服务器上添加它(见「域名与 SAN 管理」页面)并重新签发;
  • 证书过期或尚未生效 — 服务器时钟不准,或叶子证书续签失败。在 Web 界面查看证书状态;
  • 不是所配置 CA 签发的 — 字段中的 CA 属于另一台服务器,或连接正被拦截。先比对指纹再继续。