apache防御中间人攻击的核心是严格校验证书身份与链路完整性:必须启用sslproxyengine on、sslproxyverify require、sslproxycacertificatefile指定可信ca、sslproxycheckpeername on(禁用已废弃的sslproxycheckpeercn),并禁用不安全协议与宽松模式。
apache 中防御中间人攻击,核心是正确配置 tls 参数,确保后端 https 代理连接真实可信——不能只开加密,必须严格校验证书身份和链路完整性。
启用并强制证书链验证
SSLProxyVerify require 是必须项,它让 Apache 拒绝任何无法通过完整信任链验证的后端证书(包括签名、有效期、吊销状态)。仅开启 SSLProxyEngine 不足以防中间人,没有 verify 就等于“只加密不认人”。
- 务必配合 SSLProxyCACertificateFile 指向可信根证书路径;若后端用自签名或内网 CA,缺这个路径会导致 verify 直接失败
- SSLProxyVerifyDepth 建议设为 2 或 3,覆盖常见多级中间 CA 场景
- 不要依赖系统默认 CA 存储,Apache 的 mod_ssl 不自动读取 /etc/ssl/certs,必须显式指定
主机名必须基于 SAN 严格校验
SSLProxyCheckPeerName on 是唯一有效方式,它按 RFC 6125 规则优先检查证书中的 subjectAltName(DNS 条目),CN 字段仅作最后回退且不可靠。SSLProxyCheckPeerCN 已在 Apache 2.4.26+ 彻底移除,保留会直接报错。
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 确保后端证书包含正确的 DNS 类型 SAN,例如 DNS:api.internal.example.com
- 通配符需精确匹配:*.example.com 不匹配 example.com 或 sub.api.example.com
- 若后端域名是 IP,证书需含 IP 类型 SAN(如 IP:10.1.2.3),普通域名证书不适用
关闭不安全降级与宽松模式
默认行为往往留有隐患,必须主动关闭所有绕过验证的开关:
- 确保 SSLProxyCheckPeerName 显式设为 on(默认是 off)
- 禁止使用 SSLProxyVerify none 或 SSLProxyVerify optional
- 禁用不安全协议:在全局 SSLProtocol 中排除 SSLv3、TLSv1、TLSv1.1,至少保留 TLSv1.2+
- 若用自签名证书测试,切勿设 tlsAllowInsecureConnection=true 类似逻辑(这是客户端侧参数,但思路相通)
补充关键加固点
单靠代理层 TLS 配置还不够,需整体协同:
- 前端到 Apache 也应启用 HTTPS + HSTS,避免明文流量被劫持篡改
- 限制代理目标范围:用 ProxyPassMatch 或
指令限定允许转发的后端域名,防止开放代理滥用 - 结合 mod_remoteip 和 RequestHeader unset,防止伪造 X-Forwarded-* 头干扰真实校验上下文
- 日志中开启 %{SSL_PROTOCOL}e 和 %{SSL_CIPHER}e,便于审计是否实际协商了强协议与密钥套件









