apache mod_ssl仅是openssl配置接口,真正决定协议与套件的是sslprotocol +tlsv1.2 +tlsv1.3、sslciphersuite显式白名单及sslhonorcipherorder on三者协同配置,缺一不可。

Apache 的 mod_ssl 本身不执行加密,它只是把 Apache 和 OpenSSL 连起来的“桥梁”。真正决定用哪个协议、哪个套件的,是你在配置里怎么写 SSLProtocol 和 SSLCipherSuite,再配上 SSLHonorCipherOrder on。这三者必须一起配,缺一不可。
只启用 TLSv1.2 和 TLSv1.3
旧协议(SSLv2/3、TLSv1.0/1.1)有严重漏洞,不能留口子:
- 推荐写法:SSLProtocol +TLSv1.2 +TLSv1.3 —— 显式白名单,语义清晰,行为可预测
- 避免写 SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 —— “all” 包含已被废弃的协议,不同 OpenSSL 版本解释可能不一致
- 确认环境支持:Apache ≥ 2.4.37 且 OpenSSL ≥ 1.1.1,否则 +TLSv1.3 会被静默忽略
用白名单方式写死加密套件
别用 !RC4:!MD5:!aNULL 这类排除式写法——它依赖 OpenSSL 默认列表,版本一变就可能漏掉新识别出的问题套件。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 直接列出你允许的完整套件,用英文冒号 : 连接,不能有空格
- 常见安全组合(兼顾兼容性与强度):
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305 - TLSv1.3 套件需单独指定(不参与传统排序):
SSL CipherSuite TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
强制服务端主导套件选择
光把强套件写前面没用。客户端如果把自己支持的弱套件放首位,又没加这个指令,照样可能协商出 RC4 或 CBC。
- 必须加:SSLHonorCipherOrder on
- 必须放在同一个
<virtualhost></virtualhost>块里,紧挨着SSLEngine on和证书路径 - 大小写敏感,只能是 on,不是 On 或 1
验证配置是否真生效
别只看配置文件语法对不对。实测才靠谱:
- 测试 TLSv1.2 协商:
openssl s_client -connect example.com:443 -tls1_2 -cipher "ECDHE-RSA-AES128-GCM-SHA256:AES128-SHA" 2>/dev/null | grep Cipher - 测试 TLSv1.3 是否可用:
openssl s_client -connect example.com:443 -tls1_3 2>/dev/null | grep Protocol - 用 SSL Labs(ssllabs.com)做全量扫描,看 Handshake Simulation 是否覆盖主流客户端










