必须启用sslhonorcipherorder on(小写on,仅在块内生效),配合手动精简sslciphersuite(如ecdhe-gcm套件)、sslprotocol仅留tlsv1.2+,并用openssl s_client实测验证,否则客户端仍可协商弱套件。

必须启用 SSLHonorCipherOrder on
这个指令是开关——关着时,客户端提什么套件,Apache 就可能用什么,哪怕你把最强的 ECDHE-AES256-GCM-SHA384 写在配置最前面也没用。
它只在
正确写法示例:
- SSLEngine on
- SSLHonorCipherOrder on
- SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:…
套件列表要“先禁后选”,不能依赖默认值
Apache 的默认 SSLCipherSuite(如 HIGH:!aNULL:!MD5)会悄悄包含已淘汰的组合,比如 ECDHE-RSA-AES128-SHA —— 它没 AEAD 加密、无强前向保密,在 PCI DSS 和等保审计中已不被接受。
你应该手动定义,逻辑是:
开头用 !RC4:!MD5:!SHA1:!DES:!3DES:!EXPORT:!PSK:!SRP 彻底剔除脆弱算法;
后面只保留带 ECDHE 密钥交换 + AES-GCM 或 CHACHA20-POLY1305 的组合;
避免使用 HIGH、MEDIUM 这类模糊关键字——它们随 OpenSSL 版本变化,不可控。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
按客户端能力分层排列,位置决定实际效果
套件在列表里的顺序,直接决定大多数连接实际使用的加密方式。启用 SSLHonorCipherOrder 后,Apache 会从左到右匹配客户端支持的第一个套件。
推荐分层写法(兼顾安全与兼容):
- 首选层(覆盖现代客户端):ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
- 兼容层(Win7/IE11、旧 Java):ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384(注意:仍用 SHA256,不含 SHA1)
- 兜底层(仅必要时启用):ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA(启用前务必确认业务强制要求,且接受 CBC 模式风险)
必须搭配协议限制和实测验证
光调套件不够,还要堵住协议降级漏洞:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1(只留 TLSv1.2/TLSv1.3)
配置重启后,别信日志或语法检查——用 openssl 实测才可靠:
- 运行 openssl s_client -connect example.com:443 -tls1_2 -cipher "ECDHE-RSA-AES128-SHA:AES128-SHA"
- 如果返回 Cipher 是 AES128-SHA(你列表里靠前的强套件),说明排序生效
- 如果返回 ECDHE-RSA-AES128-SHA(弱套件),说明 SSLHonorCipherOrder 没起作用或被覆盖










