sslproxyverify require 是强制校验后端 https 证书的核心开关,但必须配合 sslproxycheckpeername on、sslproxycheckpeerexpire on 和 sslproxycacertificatefile/path 显式指定可信 ca 证书,三者缺一不可,否则连接失败且日志提示模糊。

要让 Apache 在反向代理 HTTPS 后端时真正校验对方身份,SSLProxyVerify require 是核心开关,但它本身不生效——必须配合证书信任链、主机名匹配和有效期检查三者协同工作,否则请求直接失败。
必须启用的三项基础校验
仅写 SSLProxyVerify require 不够,它只触发证书链验证(签名、吊销、有效期),但不会检查域名是否匹配或时间是否准确。需同步开启:
- SSLProxyCheckPeerName on:强制依据证书中的 Subject Alternative Name(SAN)字段比对 ProxyPass 目标域名,CN 字段已不被信任
- SSLProxyCheckPeerExpire on:拒绝使用已过期或尚未生效的后端证书,避免因系统时间偏差导致静默失败
- SSLProxyEngine on:这是前提,没有它,Apache 根本不会尝试建立 TLS 连接,更谈不上校验
可信 CA 证书必须显式加载
Apache 不会自动读取系统级 CA 证书(如 /etc/ssl/certs/ca-certificates.crt)。若后端用的是私有 CA 或自签名证书,必须通过以下任一方式指定:
- SSLProxyCACertificateFile /path/to/internal-ca.pem:指向单个 PEM 文件,内含根证书或完整证书链
-
SSLProxyCACertificatePath /path/to/ca-bundle/:指向目录,需配合 OpenSSL 的哈希命名(如
cacert.pem → 234abc12.0)
文件权限应为 600,属主为 Apache 运行用户(如 www-data),否则日志中仅显示 “SSL handshake failed”,无具体原因。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
常见报错与对应修复
启用 require 后出现 500 或 502,多数源于以下三类问题:
-
CA 证书路径不可读:检查
ls -l权限,并确认 SELinux 上下文(RHEL/CentOS 环境下常用chcon -t cert_t修复) -
SAN 不匹配:例如
ProxyPass /api https://svc.internal/,则后端证书必须包含DNS:svc.internal,仅Common Name匹配无效 -
后端时间偏差超 5 分钟:
SSLProxyCheckPeerExpire on会直接拒绝连接,且错误提示极不明确,建议先用date -s同步 NTP
调试建议:快速定位失败环节
不要依赖猜测。在 Apache 错误日志中搜索关键词:
-
SSL Proxy: Peer certificate does not match hostname→ SAN 不匹配,检查证书内容(openssl x509 -in cert.pem -text -noout | grep -A1 "Subject Alternative Name") -
unable to get local issuer certificate→ CA 证书未正确加载或缺失中间证书 -
certificate has expired或not yet valid→ 后端服务器时间异常或证书生命周期配置错误
验证链是否完整,可用命令:openssl s_client -connect svc.internal:443 -CAfile /path/to/ca-bundle.crt,成功返回 Verify return code: 0 (ok) 才算就绪。










