Apache防协议回退需禁用弱协议(SSLv3/TLSv1/TLSv1.1)、升级OpenSSL至1.1.1+以禁用fallback SCSV、显式启用TLSv1.3并配专用套件,再通过testssl.sh及openssl命令验证降级路径已阻断。

协议回退(Protocol Downgrade)是指攻击者通过干扰握手过程,诱使客户端和服务端协商使用更老旧、不安全的 TLS 版本(比如 TLS 1.0 或 SSLv3),从而绕过现代加密保护。Apache 本身不主动发起回退,但若配置不当或依赖底层 OpenSSL 行为,可能无意中允许降级。防住它,关键在**禁用弱协议 + 阻断降级信号 + 强制现代协商机制**。
禁用所有不安全的旧协议
Apache 的 SSL/TLS 协议控制由 SSLProtocol 指令直接管理。必须显式关闭已知存在降级风险的版本,不能只靠“默认不启用”来侥幸。
- 在
ssl.conf或虚拟主机配置中,明确指定仅启用 TLS 1.2 和 TLS 1.3: SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1- 避免使用
all或模糊范围(如+TLSv1.2),因为部分旧版 OpenSSL 可能仍会隐式包含低版本 - 重启 Apache 后,用
openssl s_client -connect yoursite:443 -tls1等命令验证:TLS 1.0 连接应直接失败,而非返回错误码后继续协商
关闭协议降级兼容特性
某些 OpenSSL 版本(尤其是 1.0.2 及更早)支持“降级提示”(Downgrade Negotiation),例如发送 fallback_scsv 信号。虽然 Apache 不主动发送该信号,但如果 OpenSSL 库编译时启用了相关选项,且客户端强行试探,仍可能被利用。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 升级 OpenSSL 至 1.1.1 或更高版本(推荐 3.x),这些版本默认禁用降级协商逻辑
- 检查当前 OpenSSL 是否启用 fallback SCSV:
openssl version -a | grep -i "fallback",若输出含enable-fallback-scsv,需重新编译 OpenSSL 并移除该选项 - Apache 无需额外配置,但底层库必须干净
启用 TLS 1.3 的强制前向保密与抗降级机制
TLS 1.3 协议自身设计就杜绝了传统降级攻击路径:它删除了版本协商字段,改用扩展机制;服务端收到不支持的 ClientHello 时直接中断,不提供“降级友好”的错误响应。
- 确认 Apache 使用的 OpenSSL 支持 TLS 1.3(2.4.48+ 版本 + OpenSSL 1.1.1+)
- 在配置中显式启用 TLS 1.3,并搭配强密码套件:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2 +TLSv1.3SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256- 注意:不要混用 TLS 1.2 和 1.3 的 CipherSuite,TLS 1.3 使用独立套件集
监控与验证是否真正生效
配置写完不等于防住了。真实环境中需主动探测是否还存在降级入口。
- 用
testssl.sh yoursite.com全面扫描,重点关注 “Downgrade attack / POODLE / BEAST” 和 “TLS versions” 部分 - 手动测试降级尝试:
openssl s_client -connect yoursite.com:443 -tls1_1 -cipher "ALL",应返回 handshake failure,而非成功建立连接 - 查看 Apache 日志中是否有大量
SSL_do_handshake() failed且伴随旧协议标识,这可能是攻击试探痕迹

















