Apache 防MITM需组合配置:禁用已移除的SSLProxyCheckPeerCN,启用SSLProxyCheckPeerName on和SSLProxyVerify require强制SAN校验与证书链验证,关闭弱协议(-SSLv2至-TLSv1.1),启用HSTS及强密码套件。

Apache 本身不自动抵御中间人攻击(MITM),必须通过明确、协同的 SSL/TLS 配置主动防御。核心不是单个指令,而是组合策略:强制证书校验、禁用弱协议、启用 HSTS、严格主机名匹配,并确保信任链可控。
启用并严格校验后端证书(反向代理场景)
如果你用 Apache 做 HTTPS 反向代理(如 ProxyPass 到内部服务),必须防止上游被劫持:
- 删除所有 SSLProxyCheckPeerCN 行——它在 Apache 2.4.26+ 已彻底移除,保留会导致启动失败
- 启用主机名校验:SSLProxyCheckPeerName on(默认是 off,不写等于不校验)
- 强制验证证书链:SSLProxyVerify require,否则只校验域名不校验证书真伪
- 指定可信根证书:SSLProxyCACertificateFile 指向你的私有 CA 或内部根证书 PEM 文件(系统信任库不生效)
- 确保后端证书的 subjectAltName(DNS 条目)包含 ProxyPass 中写的完整域名(例如
svc.internal),仅 CN 匹配无效
禁用老旧协议与弱密码套件
降级攻击常诱使连接回落到不安全版本或可破解加密:
- 关闭全部不安全协议:SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
- 锁定强密码套件,优先前向保密:SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
- 确保顺序生效:SSLHonorCipherOrder on
- 禁用不安全重协商:SSLInsecureRenegotiation off
对客户端强制 HTTPS 并启用 HSTS
防止用户首次访问被劫持到 HTTP,或 CDN/代理剥离 HTTPS:
- 只在 HTTPS 虚拟主机中配置:Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
- includeSubDomains 需确保所有子域名已部署有效证书,否则会直接中断访问
- 上线前先用短 max-age(如 300)测试,确认全站无 HTTP 回退路径
- 确认 headers_module 已启用(
a2enmod headers),且配置未被 Nginx/CDN 覆盖
双向认证(可选,高安全场景)
当需验证调用方身份(如 API 网关、内网管理接口):
- 启用客户端证书校验:SSLVerifyClient require
- 指定可信 CA 根证书:SSLCACertificateFile(不是服务器证书路径)
- 限制证书链深度防伪造:SSLVerifyDepth 2(覆盖终端证书 + 1 级中间 CA + 根 CA)
- 避免设为 0 —— 这将跳过所有中间证书校验,极大削弱安全性


















