SSLProxyCheckPeerName on是Apache 2.4.8+校验后端域名合法性的唯一有效方式,依据RFC 6125检查SAN字段;需配合SSLProxyEngine on、SSLProxyVerify require及SSLProxyCACertificateFile等指令才能完成完整校验。

Apache 2.4.8 及以上版本中,SSLProxyCheckPeerName on 是校验后端 HTTPS 服务域名合法性的唯一有效方式。它依据 RFC 6125 规则检查证书的 Subject Alternative Name(SAN)字段,不再依赖已废弃的 CN 字段。
必须启用的核心指令
仅开启 SSLProxyCheckPeerName 不足以完成完整校验,需配合其他必要配置:
- SSLProxyEngine on:启用 Apache 作为 HTTPS 客户端连接后端,否则所有 HTTPS 后端代理请求都会失败(报 502 或 SSL handshake failed)
- SSLProxyCheckPeerName on:强制执行主机名匹配验证,优先比对 SAN 中的 DNS 条目;若证书无 SAN,则退回到 CN(不推荐,且多数现代证书不含有效 CN)
- SSLProxyVerify require:确保证书链可信(签名、有效期、吊销状态等),与主机名校验是两个独立但都必需的环节
- SSLProxyVerifyDepth 2(可选但建议):指定证书链验证深度,通常设为 2 即可覆盖根 CA → 中间 CA → 服务器证书结构
必须提供可信 CA 证书
Apache 不会自动使用系统级 CA 信任库(如 /etc/ssl/certs/ca-certificates.crt)。若后端使用私有 CA 或企业内网签发证书,必须显式指定:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- SSLProxyCACertificateFile /path/to/internal-ca.pem:指向包含根 CA 证书的 PEM 文件(不是你自己的服务器证书!)
- 或使用 SSLProxyCACertificatePath /path/to/ca-bundle-dir/,目录内需含经
c_rehash处理过的证书哈希链接 - 确认 Apache 进程用户(如 www-data 或 apache)对该文件或目录具有读取权限,SELinux 上下文也需允许(RHEL/CentOS 环境常见问题)
常见匹配失败原因与确认方法
出现 "Peer certificate does not match hostname" 错误时,通常不是配置写错,而是证书本身不满足要求:
- 后端证书的 SAN 字段未包含 ProxyPass 目标中的完整主机名。例如 ProxyPass /api https://svc.internal/,则证书必须含
DNS:svc.internal;DNS:*.internal或DNS:internal均不匹配 - 后端服务器时间偏差超过 5 分钟,导致 SSLProxyCheckPeerExpire on(如已启用)拒绝连接,日志提示模糊,需同步 NTP 时间
- ProxyPass 使用 IP 地址(如 https://10.1.2.3:8443)但证书 SAN 中没有对应 IP 条目(IP 类型 SAN 需明确声明,非默认支持)
- 调试建议:用
openssl s_client -connect svc.internal:8443 -servername svc.internal手动检查证书内容,重点关注X509v3 Subject Alternative Name区域
完整配置片段示例
以下为安全可用的最小配置块(置于 <virtualhost></virtualhost> 或 <location></location> 内):
<location>
ProxyPass https://backend.internal:8443/
ProxyPassReverse https://backend.internal:8443/
ProxyPreserveHost On
</location>
SSLProxyEngine on
SSLProxyCheckPeerName on
SSLProxyVerify require
SSLProxyVerifyDepth 2
SSLProxyCACertificateFile /etc/ssl/certs/internal-ca.pem
删掉任何残留的 SSLProxyCheckPeerCN 指令——它在 2.4.26+ 版本中已彻底移除,保留会导致启动失败。










