sslproxycheckpeername on是apache 2.4.8+校验后端证书域名合法性的唯一有效方式,依据rfc 6125优先检查san字段,仅无san时回退cn;sslproxycheckpeercn已废弃,启用需配套sslproxyengine on、sslproxyverify require及sslproxycacertificatefile等。

Apache 2.4.8 及以上版本中,SSLProxyCheckPeerName on 是校验后端 HTTPS 证书域名合法性的唯一有效方式。它依据 RFC 6125 规则,优先检查证书的 Subject Alternative Name(SAN)字段,仅在无 SAN 时才回退到 CN(不推荐且不可靠)。CN 校验指令 SSLProxyCheckPeerCN 已彻底废弃,写入配置会导致启动失败。
必须启用的基础代理与校验开关
仅开启 SSLProxyCheckPeerName on 不够,它依赖完整的 TLS 客户端行为链:
-
SSLProxyEngine on:必须开启,否则 Apache 不会以 HTTPS 客户端身份连接后端,直接报 502 或 “SSL handshake failed” -
SSLProxyCheckPeerName on:显式启用主机名校验;默认为off,即跳过验证,等同于不安全直连 -
SSLProxyVerify require:强制校验证书链有效性(签名、有效期、吊销状态),与域名校验是两个独立环节,缺一不可
确保后端证书真正匹配目标域名
校验失败报 “Peer certificate does not match hostname”,通常不是配置问题,而是证书本身不满足要求:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 后端证书的 SAN 字段必须包含与
ProxyPass目标完全一致的 DNS 条目(如ProxyPass /api https://svc.internal/→ 证书需含DNS:svc.internal) - 仅 CN 匹配(如
CN=svc.internal)在有 SAN 的情况下会被忽略,无效 - 通配符需精确匹配:证书含
DNS:*.internal不能用于svc.internal(缺少一级域),但可用于api.svc.internal
信任后端证书签发机构(CA)
即使域名匹配,若证书由私有 CA 或自签名签发,Apache 默认不信任,需显式加载根证书:
- 用
SSLProxyCACertificateFile /path/to/internal-ca.crt指向 PEM 格式 CA 证书文件 - 系统级信任库(如
/etc/ssl/certs/ca-certificates.crt)默认不生效,必须显式指定 - 确认 Apache 进程用户(如
www-data或apache)对该文件有读取权限,SELinux 上下文也需允许
可选但推荐的安全加固项
增强校验严谨性,避免因时间偏差或过期证书导致静默失败:
-
SSLProxyCheckPeerExpire on:拒绝使用已过期或未生效的证书 -
SSLProxyVerifyDepth 2:限制证书链验证深度,防环形或过长链攻击 -
SSLProxyProtocol TLSv1.2 TLSv1.3:禁用老旧不安全协议(如 TLSv1.0/TLSv1.1)










