SSLProxyCheckPeerName 是 Apache 2.4.8 起唯一有效的后端 HTTPS 证书域名校验指令,依据 RFC 6125 优先检查 SAN、回退 CN,需配合 SSLProxyEngine on 和 SSLProxyVerify require 才生效,并指定可信 CA 路径。

SSLProxyCheckPeerName 是 Apache 2.4.8 起替代旧版 SSLProxyCheckPeerCN 的唯一有效方式,用于校验后端 HTTPS 服务证书中的域名是否合法。它依据 RFC 6125 规则,优先检查证书的 Subject Alternative Name(SAN)字段,仅在无 SAN 时才回退到 CN(不推荐)。配置本身简单,但必须配合其他指令才能真正生效。
必须启用 SSLProxyEngine 和 SSLProxyCheckPeerName
这两个指令是基础前提,缺一不可:
- SSLProxyEngine on:让 Apache 以 HTTPS 客户端身份连接后端,否则所有 HTTPS 后端请求都会失败(502 错误 + “SSL handshake failed” 日志)
- SSLProxyCheckPeerName on:显式开启主机名校验;默认值为 off,即跳过验证——等同于不安全直连
强制证书链验证:SSLProxyVerify require
仅校验域名不够,还需确认证书本身可信:
- SSLProxyVerify require:要求完整验证证书签名、有效期、吊销状态和主机名匹配。设为 none、optional 等同于未启用校验
- SSLProxyVerifyDepth 2(可选但建议):指定证书链最大验证深度,避免因中间 CA 层级过深导致失败
指定可信 CA 证书路径
Apache 不自动使用系统 CA 信任库,尤其对私有或自签名证书:
- 若后端用公共 CA(如 Let’s Encrypt)签发,且证书含完整链,可省略此步
- 若后端用企业内网 CA 或自签名证书,必须添加:
SSLProxyCACertificateFile /path/to/internal-ca.crt
或
SSLProxyCACertificatePath /path/to/ca-bundle-dir/ - 确保 Apache 进程用户(如 www-data 或 apache)有读取权限,SELinux 上下文也需允许(RHEL/CentOS 环境常见问题)
常见失败原因与关键细节
报错 “Peer certificate does not match hostname” 并非配置错误,而是实际不匹配:
- 后端证书的 SAN 必须包含 ProxyPass 中写的完整域名(如 ProxyPass /api https://svc.internal/ → 证书需含 DNS:svc.internal)
- CN 匹配无效,即使证书有 CN=svc.internal,只要存在 SAN 字段,就只看 SAN
- 后端服务器时间偏差超过 5 分钟,会导致 SSLProxyCheckPeerExpire on(若启用)拒绝连接,日志提示模糊
- SSLProxyCheckPeerCN 指令已彻底移除(2.4.26+),写上会启动失败,务必删除











