sslproxycheckpeercn 已废弃并移除,应使用 sslproxycheckpeername on 替代,配合 sslproxyengine on 和 sslproxyverify require 实现基于 san 的安全校验。
sslproxycheckpeercn 不能用于强制校验后端域名的真实一致性,它早已失效且不再可用。
该指令在 Apache 2.4.8 中被标记为废弃,2.4.26 及以后版本中完全移除。如果你在配置中写入:
SSLProxyCheckPeerCN on
Apache 启动时会直接报错:
Invalid command 'SSLProxyCheckPeerCN', perhaps misspelled or defined by a module not included in the server configuration
这不是配置位置或语法的问题,而是模块层面已彻底删除。
✅ 正确做法:用 SSLProxyCheckPeerName 替代
现代 Apache(2.4.8+)只支持基于 Subject Alternative Name(SAN) 的主机名校验,这是 RFC 6125 规定的标准方式,更安全、更严谨。SSLProxyCheckPeerName on 才是当前唯一有效的等效配置。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
你需要配合以下三项共同启用,缺一不可:
SSLProxyEngine on
启用代理模式下的 HTTPS 客户端能力(连接后端 HTTPS 必须开启)SSLProxyCheckPeerName on
强制校验后端证书中的 SAN 字段(优先)或 CN(仅当无 SAN 时回退,不推荐)SSLProxyVerify require
确保证书链完整、签名可信、未过期、未吊销——这是校验“身份真实性”的基础
? 配置示例(放在 <virtualhost></virtualhost> 或 <location></location> 块内)
<virtualhost>
ServerName proxy.example.com
ProxyRequests Off
SSLProxyEngine on
SSLProxyCheckPeerName on
SSLProxyVerify require
SSLProxyVerifyDepth 2
# 指向你信任的 CA 根证书(尤其后端用私有 CA 时!)
SSLProxyCACertificateFile /etc/ssl/certs/internal-ca.pem
ProxyPass /api https://svc.internal:8443/api
ProxyPassReverse /api https://svc.internal:8443/api
</virtualhost>
⚠️ 注意:
-
svc.internal必须出现在后端证书的DNS:类型 SAN 中(例如DNS:svc.internal),仅CN=svc.internal不生效; - 若后端证书由企业内网 CA 签发,
SSLProxyCACertificateFile必须显式指定该 CA 证书,系统默认信任库(如/etc/ssl/certs/ca-certificates.crt)不会自动加载; - 时间偏差超过 5 分钟也会导致
SSLProxyVerify require失败,错误日志可能只显示模糊的SSL handshake failed。
❌ 为什么不要尝试“恢复” SSLProxyCheckPeerCN?
- 无法通过
LoadModule或降级模块找回; - 即使降级到 Apache 2.4.6(如 CentOS 7 默认版本),仅校验 CN 本身就不符合现代 TLS 实践,容易被绕过;
- 现代证书普遍不含有效 CN,或 CN 与实际域名不一致(如 Let’s Encrypt 证书 CN 固定为
*.example.com,但真正匹配靠 SAN)。
所以,别绕路,直接用 SSLProxyCheckPeerName on + SSLProxyVerify require,才是真实、可靠、可维护的校验方式。










