apache虚拟主机中实现https后端强身份认证需四点齐备:启用sslproxyverify require、sslproxycheckpeername on和sslproxycheckpeerexpire on,显式指定sslproxycacertificatefile,并确保proxypass域名与证书san严格匹配。
要在 apache 虚拟主机中实现对后端 https 集群的强身份认证,核心不是只写 sslproxyverify require,而是让 apache 在发起上游连接时,像浏览器一样完成完整、可信的 tls 证书验证。这需要四点齐备、缺一不可。
必须启用 SSLProxyVerify require 并禁用旧式 CN 校验
SSLProxyVerify require 是强制校验的开关,它要求后端证书满足三项:链可追溯至可信根 CA、在有效期内、签名未被吊销。默认值 none 等同于关闭验证,存在中间人攻击风险。
注意:SSLProxyCheckPeerCN 已在 Apache 2.4.8+ 中彻底移除,若配置中仍存在,Apache 启动会失败。必须改用:
-
SSLProxyCheckPeerName on—— 启用基于 SAN 的主机名匹配 -
SSLProxyCheckPeerExpire on—— 强制检查证书有效期
显式指定后端集群所用的 CA 证书文件
Apache 默认不读取系统级 CA 信任库(如 /etc/ssl/certs/ca-certificates.crt)。无论后端用的是 Let’s Encrypt、企业私有 CA 还是自签名证书,都必须通过以下指令明确加载其根证书:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
SSLProxyCACertificateFile /path/to/cluster-root-ca.pem- 该文件必须是 PEM 格式,仅含证书内容(不能含私钥、不能混终端证书、不能有多余空行或注释)
- 若含中间 CA,按“中间在前、根在后”顺序拼接进同一文件
- 确保 Apache 进程用户(如
www-data或apache)对该文件有读权限,SELinux 上下文也需允许
确保 ProxyPass 域名与后端证书 SAN 完全匹配
SSLProxyCheckPeerName on 只比对证书中的 Subject Alternative Name(SAN) 字段,CN 字段无效。匹配规则严格:
- 若
ProxyPass /api https://svc-a.internal/,则后端证书必须包含DNS:svc-a.internal - 通配符
*.internal不匹配svc-a.b.internal - 集群使用 VIP 或轮询 DNS 时,建议证书覆盖所有可能解析到的域名,或统一使用服务发现域名(如
svc-a.default.svc.cluster.local)
配套指令需协同生效,否则请求直接失败
仅加 SSLProxyVerify require 会导致 500 错误或连接重置,常见原因包括 CA 文件不可读、SAN 不匹配、时间偏差超 ±5 分钟。最小可靠配置块如下(放在 <virtualhost></virtualhost> 内):
-
SSLProxyEngine on—— 必须开启代理模式下的 SSL 支持 SSLProxyVerify requireSSLProxyCheckPeerName onSSLProxyCheckPeerExpire onSSLProxyCACertificateFile /etc/apache2/ssl/internal-ca.pem
调试建议:用 openssl s_client -connect svc-a.internal:443 -CAfile /etc/apache2/ssl/internal-ca.pem -servername svc-a.internal 模拟 Apache 握手行为,错误信息更直观。










