apache默认禁用不安全tls重协商以防范cve-2009-3555;仅当确认老旧客户端(如jdk 6u44及更早)无法升级且日志明确报错“re-negotiation requested but not allowed”时,才在https虚拟主机内启用sslinsecurerenegotiation on。

Apache 默认禁止不安全的 TLS 重协商,这是为防范 CVE-2009-3555 的关键防护。只有在确认老旧客户端(如 JDK 6u45 之前版本、某些嵌入式设备或定制固件)无法升级且连接失败时,才考虑启用 SSLInsecureRenegotiation。它不是“兼容增强”,而是有明确安全代价的临时绕过手段。
先确认是否真需要开启
不要凭猜测启用。典型需开启的信号包括:
- Apache 错误日志反复出现 Re-negotiation requested but not allowed
- 客户端报错 SSL handshake failed,且已确认其 TLS 实现不支持 RFC 5746 安全重协商(例如 Java 6u44 或更早)
- 你已排除前置代理(如 Cloudflare、ALB)终止 TLS 导致重协商被截断的可能
在虚拟主机中正确启用
该指令仅在启用 HTTPS 的 <virtualhost></virtualhost> 块内有效,不能写在全局配置或 .htaccess 中:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 编辑站点配置文件(如
/etc/apache2/sites-enabled/example.com.conf) - 确保
SSLEngine on已启用,并配置了证书路径(SSLCertificateFile和SSLCertificateKeyFile) - 在同一
<virtualhost></virtualhost>块内添加:SSLInsecureRenegotiation on - 保存后执行
sudo systemctl reload apache2(Debian/Ubuntu)或sudo apachectl graceful(RHEL/CentOS)
启用后的关键注意事项
开启后不等于“安全连通”,而是在可控范围内接受已知风险:
- 只影响触发重协商的场景:例如客户端证书二次认证、部分负载均衡器转发策略
- 现代浏览器和 OpenSSL 1.0.1+ 服务端完全不依赖此行为,开启也无实际效果
- 若 TLS 终止在前置 LB,Apache 根本收不到原始重协商请求,此配置无效
- 不能写
SSLInsecureRenegotiation off—— 默认即为关闭,显式写出反而易引发误解
替代方案优先于开启
如果条件允许,应优先尝试更安全的解法:
- 升级客户端:JDK 6u45+、OpenSSL 0.9.8l+、或更新固件
- 调整应用逻辑:避免运行时触发重协商(如改用初始握手携带完整证书)
- 检查是否误配了
SSLVerifyClient require在非必要路径下,导致旧客户端频繁失败










