Apache支持老旧客户端的关键是在安全底线之上精准兼容:默认启用TLSv1.2,TLSv1.3仅单独启用;SSLCipherSuite按强弱分层排序并禁用高危算法;必须配置SSLHonorCipherOrder on、SSLCompression off及RSA-2048+SHA-256证书。

要让 Apache 支持老旧客户端(比如 Windows 7 + IE11、Android 4.4 WebView、Java 6/7、部分嵌入式设备),关键不是堆砌所有套件,而是在安全底线之上做精准兼容:协议版本收窄、套件分层排序、服务端强制优先协商。单纯放宽限制会引入高危漏洞,盲目禁用又导致连接失败。
明确协议最低门槛,避免混用新旧版本
TLSv1.2 是必须保留的底线,TLSv1.3 只能单独启用(不与 TLSv1.0/1.1 共存)。若确需支持极老设备: - 默认配置(推荐):SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
- 仅对特定虚拟主机启用旧协议(如对接银行旧中间件):SSLProtocol all -SSLv2 -SSLv3 -TLSv1.3(即只留 TLSv1.0/1.1/1.2)
⚠️ 注意:TLSv1.0/1.1 存在 POODLE、BEAST 等已知漏洞,不得在公网主站启用;Apache 2.4.38+ 默认禁用,需手动放开。按能力分层配置 SSLCipherSuite,强套件前置、弱套件兜底
使用明确列表,禁用模糊关键字(如 HIGH、MEDIUM),并开启服务端优先: - 开头彻底剔除高危算法:!RC4:!MD5:!SHA1:!DES:!3DES:!EXPORT:!PSK:!SRP:!CAMELLIA:!SEED
- 推荐分层写法(放在同一行,用冒号连接):SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA
✅ 第一梯队(GCM 套件):覆盖 Chrome 56+、Firefox 47+、Safari 10+ ✅ 第二梯队(SHA256-CBC):兼容 IE11 on Win7、Java 8u161+ ✅ 第三梯队(SHA-CBC):仅当业务强制要求且可接受风险时启用(如 Java 7u80)配套必须启用的关键指令
仅配套件不够,还需以下三项协同生效: -SSLHonorCipherOrder on:强制 Apache 按你写的顺序协商,否则老旧客户端可能因顺序错乱而握手失败
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
SSLCompression off:关闭 TLS 压缩,防止 CRIME 攻击,且部分旧实现不兼容压缩扩展
-SSLCertificateFile 和 SSLCertificateKeyFile 使用 RSA-2048 + SHA-256 证书:ECDSA 或 >2048 位 RSA 会被 Java 6/7、.NET 2.0 等拒绝;SHA-1 证书已被 Apache 2.4.10+ 拒绝,不可用
验证与排查要点
- 不要依赖浏览器报错判断——用命令行验证更准:openssl s_client -connect yoursite.com:443 -tls1_2 -cipher "AES128-SHA"
看是否成功建立连接并显示 “Verify return code: 0 (ok)” - 检查 OpenSSL 实际支持范围:openssl ciphers -s -tls1_2 "ALL:COMPLEMENTOFDEFAULT"
若输出中不含 AES128-SHA,说明底层 OpenSSL 已编译移除该套件(常见于新版 phpEnv 或自编译包) - 日志中重点关注:SSL alert number 100(重协商拒绝)、no ciphers available(套件不匹配)、unknown protocol(协议被拒)不复杂但容易忽略。

















