sslstrictsnivhostcheck不防御协议降级攻击,仅控制sni主机名匹配失败时是否拒绝tls握手;真正防护需禁用sslv2/v3/tlsv1.0/1.1、启用hsts、关闭不安全重协商并配置强密码套件。

Apache 配置 SSL 后的协议降级攻击风险(如 POODLE、BEAST 或强制回退到 SSLv3/TLSv1.0)不能靠单一指令解决,核心是主动关闭老旧协议、收紧协商策略、并阻断降级路径。SSLStrictSNIVHostCheck 并不参与协议版本选择,它只管 SNI 匹配,误把它当作“防降级开关”会留下严重盲区。
禁用所有不安全协议版本
降级攻击的前提是服务端仍接受弱协议。必须显式排除,不能依赖“默认不启用”:
- 在全局或每个 HTTPS
块中添加:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 - 该配置强制只允许 TLSv1.2 及以上(推荐加 TLSv1.3),彻底切断 SSL 3.0 和 TLS 1.0/1.1 的协商可能
- 验证方式:用 openssl s_client -connect example.com:443 -tls1_1 测试,应返回握手失败而非证书
锁定强密码套件并启用服务端优先
即使协议版本正确,弱密钥交换或 CBC 模式仍可能被利用(如 BEAST、Sweet32):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 设置严格且前向保密优先的套件:
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 - 必须配合:
SSLHonorCipherOrder on —— 确保服务端排序生效,不被客户端弱选项覆盖 - 避免使用 RC4、NULL、EXPORT、DES、3DES、CBC 类套件(除非有强兼容需求且已评估风险)
关闭不安全重协商与启用 HSTS
这两项补全了协议层和应用层的降级防护闭环:
- 禁用不安全重协商(防范 CVE-2009-3555):
SSLInsecureRenegotiation off(Apache ≥2.2.15 默认已关,但建议显式声明) - 强制浏览器记住只走 HTTPS,防止首次请求被劫持降级:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" - HSTS 必须在 HTTPS 响应中发送,HTTP 响应中设置无效;preload 需提交至浏览器 HSTS 预加载列表
合理使用 SSLStrictSNIVHostCheck(非降级防护,但属纵深一环)
它不防协议降级,但能阻断“SNI 失配→落入错误站点→暴露弱配置”的间接路径:
- 仅在多域名共 IP 且需严格路由隔离时开启:
SSLStrictSNIVHostCheck on - 必须确保每个 HTTPS
都有明确、大小写一致的 ServerName,并用 ServerAlias 列出所有合法 SNI 域名(通配符不生效) - 不可写在 .htaccess 或配置文件顶层;推荐放在
块内或各虚拟主机内部









