sslverifydepth 通过限制客户端证书链校验深度防范链式伪造攻击,需配合 sslverifyclient、ssltrustedcertificatefile 等指令生效;生产推荐值为1–3,禁用0或≥5。
在 apache 虚拟主机中配置 sslverifydepth 是防止证书链欺骗攻击的关键一环,但它本身不“单独防骗”,而是通过限制客户端证书链校验深度,配合完整信任链与严格验证逻辑,堵住攻击者利用冗长、可疑中间 ca 伪造可信身份的路径。
SSLVerifyDepth 的作用本质
该指令仅在启用客户端证书双向认证(mTLS)时生效,它控制 Apache 在验证用户提交的客户端证书时,最多允许多少层证书签发关系(终端证书 → 中间 CA → 根 CA → …)。默认值为 1,即只接受“客户端证书直连根证书”的结构。
攻击者可能构造超长、嵌套多层的自签名中间 CA 链,试图绕过信任锚点;设得过高(如 10),就等于放宽了对签发路径可信度的审查门槛,给链式伪造留出空间。
生产环境推荐取值与依据
-
单层链(自签名客户端证书):设为
1,但必须确保SSLTrustedCertificateFile中明确包含该自签根证书 -
标准两级链(客户端证书 → 企业中间 CA):设为
2,覆盖绝大多数私有 PKI 场景 -
三级链(如含交叉签名或桥接 CA):设为
3,需严格审计每一级 CA 的策略和生命周期 - 绝不设为 0 或超过 5:0 表示跳过链深度检查,完全失效;≥5 易引入不可控中间签发者,违反等保三级“最小信任链”原则
必须配套生效的核心指令
单独写 SSLVerifyDepth 2 毫无意义,以下四项必须同时存在且正确:
-
SSLVerifyClient require—— 强制要求并启用客户端证书校验 -
SSLTrustedCertificateFile /path/to/trusted-ca-bundle.pem—— 指向你**完全可控**的根+中间 CA 证书集合,不能混入公网 CA -
SSLCACertificateFile /path/to/client-ca-root.pem—— 明确指定用于验证客户端证书签名的**直接签发者 CA**(常与上一项内容一致,但语义更精准) -
SSLStrictRequire on—— 确保校验失败时直接拒绝连接,而非降级处理
验证是否真正起效的方法
改完配置后重载 Apache,用真实客户端证书测试,并重点检查:
- 访问时返回
403 Forbidden且 error_log 中出现certificate chain too long→ 说明深度限制已触发,值设得太低 - 能成功登录,但用 OpenSSL 手动构造一个 4 层伪造链(例如加一个恶意中间 CA)仍被接受 → 说明
SSLVerifyDepth未生效或值过高 - 执行
openssl s_client -connect your.site:443 -cert fake-chain.pem -key key.pem,观察返回的 verify error 是否符合预期











