必须同时配置SSLProtocol和SSLCipherSuite并启用SSLHonorCipherOrder、SSLCompression off,且依赖OpenSSL≥1.1.1支持TLSv1.3与现代套件,否则安全评级不达标。

要让 Apache 既支持现代加密标准,又不彻底放弃老客户端(比如 Windows 7 + IE11、旧版 Android WebView、部分嵌入式设备),关键不是“全兼容”,而是在安全底线之上做有取舍的兼容。TLSv1.2 是当前不可妥协的最低协议版本,而 SSLCipherSuite 的写法必须明确排除已淘汰算法,同时把强套件前置、弱套件后置并严格限制范围。
明确安全底线:先禁再选,不靠默认值
Apache 的 SSLCipherSuite 默认值(如 HIGH:!aNULL:!MD5)看似合理,但实际会包含 ECDHE-RSA-AES128-SHA 这类无 AEAD、无前向保密强化的旧套件,PCI DSS 和等保 2.0 已明确不接受。必须手动定义,且遵循“先禁后选”逻辑:
- 开头用
!RC4:!MD5:!SHA1:!DES:!3DES:!EXPORT:!PSK:!SRP:!CAMELLIA:!SEED彻底剔除已知脆弱算法 - 只保留带
ECDHE密钥交换 +AES-GCM或CHACHA20-POLY1305认证加密的组合 - 避免使用
HIGH、MEDIUM等模糊关键字——它们随 OpenSSL 版本变化,不可控
分层配置:强套件优先,弱套件仅作兜底
真正影响兼容性的不是“是否支持弱套件”,而是它在列表中的位置是否被服务器优先协商到。启用 SSLHonorCipherOrder on 后,可按优先级分层排列:
-
第一层(首选,覆盖 95%+ 现代客户端):
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 -
第二层(有限兼容 IE11/Win7、旧版 Java 客户端):
ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384(注意:仍含 SHA256,不含 SHA1) -
第三层(极少数遗留系统兜底,慎用):
ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA(仅当业务强制要求且能接受 TLSv1.2 下的 CBC 模式风险时启用)
若完全不需要旧兼容,直接省略第二、三层即可;若启用第三层,务必搭配 SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1,确保协议层不降级。
验证是否真生效:别信配置,要测连接
配置写对 ≠ 客户端连上就用强套件。必须实测确认服务器是否真的按你设定的顺序响应:
- 用
openssl s_client -connect example.com:443 -tls1_2 -cipher "ECDHE-RSA-AES128-SHA:AES128-SHA"测试:若返回Cipher is ECDHE-RSA-AES128-SHA,说明你的强套件排在前面且SSLHonorCipherOrder on生效;若返回AES128-SHA,说明配置未生效或被覆盖 - 查完整支持列表:
openssl s_client -connect example.com:443 -tls1_2 -cipher ALL | grep Cipher,观察输出中哪些套件真实可用 - 用 SSL Labs(https://www.ssllabs.com/ssltest/)扫描,重点看 “Handshake Simulation” 表格里各客户端最终协商出的套件是否符合预期
依赖前提不能漏:OpenSSL 和 Apache 版本决定上限
再好的配置也受底层限制。截至 2026 年:
- TLSv1.3 和
CHACHA20-POLY1305套件需 OpenSSL ≥ 1.1.1;CentOS 7 默认 OpenSSL 1.0.2k 不支持,必须升级或换系统 -
SSLHonorCipherOrder在 Apache ≥ 2.4.26 下与 HTTP/2 兼容更稳;低于此版本开启 HTTP/2 可能导致该指令失效 - 私钥类型影响兼容性:RSA 私钥通用性好;ECDSA 私钥(如 secp384r1)性能更高但部分旧 Java 版本不识别,生产环境建议优先用 RSA











