跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何通过虚拟主机配置SSLProxyVerifyDepth限制对后端链路的校验层级

Apache中控制后端证书链校验深度的正确指令是SSLProxyVerifyDepth,需配合SSLProxyVerify require和SSLProxyCheckPeerName on使用,默认值1仅支持终端证书直连根CA,生产环境通常设为2以兼容两级中间CA链。 apache 中没有
sslproxyverifydepth
这个指令,它并不存在于
mod_ssl
的官方指令列表中。你可能混淆了 nginx 的
proxy_ssl_verify_depth
或 apache 的
sslproxyverify
与
sslproxyverifydepth
(实际应为
sslproxyverify
后接参数,或旧版
sslverifydepth
)。 Apache 实际可用的等效配置项 在 Apache 反向代理 HTTPS 后端时,控制证书链校验深度的是以下两个配合使用的指令:
SSLProxyVerify require
:启用对后端证书链的完整验证(签名、有效期、吊销状态等),是开启校验的前提
SSLProxyVerifyDepth n
:这才是正确的指令名—— 注意是
SSLProxyVerifyDepth
,不是
SSLProxyVerifyDepth
(无下划线)或
SSLProxyVerifyDepth
(拼写错误) 。它指定允许的最大中间 CA 层数,即从终端证书向上追溯的签发者层级数 SSLProxyVerifyDepth 的取值逻辑 该值表示“最多允许多少级中间 CA”,不包含终端证书本身,也不包含根 CA(根必须在信任库中): 设为 0 :只接受自签名证书(终端证书自己签自己) 设为 1 (默认):终端证书必须由根 CA 直接签发;若后端用的是“终端→中间CA→根CA”三级链,会失败 设为 2 :支持两级中间 CA,即最多“终端→中间CA1→中间CA2→根CA”,适用于大多数商业证书(如 Let’s Encrypt R3 → ISRG Root X1 是两级链,对应值为 2) 设为 3 :适合企业私有 PKI 中嵌套更深的链结构 必须配套的其他关键配置 单独设置
SSLProxyVerifyDepth
不生效,需与以下指令共存于同一虚拟主机或代理上下文中:
SSLProxyEngine on
:启用代理模式下的 SSL/TLS 功能
SSLProxyCheckPeerName on
:强制校验后端证书中的 SAN 字段(现代标准,替代已废弃的
SSLProxyCheckPeerCN
)
SSLProxyCACertificateFile /path/to/ca-bundle.crt
或
SSLProxyCACertificatePath
:提供可信根证书和中间 CA 的 PEM 文件,必须包含整条链中所有非终端证书 典型安全配置示例 以下是一个生产环境常用配置片段(放在
或
块内):
SSLProxyEngine on SSLProxyVerify require SSLProxyVerifyDepth 2 SSLProxyCheckPeerName on SSLProxyCACertificateFile /etc/ssl/certs/ca-bundle.crt ProxyPass /api/ https://backend.internal:443/ ProxyPassReverse /api/ https://backend.internal:443/
若后端使用私有 CA,请确保
ca-bundle.crt
文件中已追加该私有根证书(PEM 格式),且文件权限允许 Apache 读取。

相关文章