必须开启sslhonorcipherorder on且置于virtualhost块内,否则sslciphersuite顺序无效;需搭配tls 1.2+、ecdhe-gcm-pfs套件及显式禁用旧协议,并用openssl s_client实测验证。

要让 Apache 真正用上你精心挑选的加密套件,光写 SSLCipherSuite 不够——必须配合 SSLHonorCipherOrder on,且只在 HTTPS 虚拟主机块内生效。否则客户端仍可能强推弱套件,你的配置形同虚设。
明确目标:只留 TLS 1.2+、带前向保密、GCM 模式的现代套件
2026 年主流合规要求(如 PCI DSS、等保)已淘汰 TLS 1.1 及以下、非 PFS、CBC 模式或含 RC4/MD5/3DES 的套件。推荐最小安全基线如下:
ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-RSA-AES128-GCM-SHA256ECDHE-ECDSA-AES256-GCM-SHA384ECDHE-RSA-AES256-GCM-SHA384
所有套件均基于 ECDHE 密钥交换(保障前向保密),AES-GCM 认证加密(高性能+防篡改),SHA256/SHA384 摘要(抗碰撞)。不包含 ANY RSA 密钥交换、CBC 模式、SHA1 或弱哈希。
配置必须落在 VirtualHost 块内,且顺序关键
以下内容必须完整出现在你的 HTTPS <virtualhost></virtualhost> 块中,紧挨着 SSLEngine on:
SSLEngine on SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder on SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 SSLCertificateFile /path/to/cert.pem SSLCertificateKeyFile /path/to/privkey.pem SSLCertificateChainFile /path/to/chain.pem
注意:SSLHonorCipherOrder on 大小写敏感,仅 on 有效;SSLCipherSuite 值中不可用空格,套件间用英文冒号分隔;SSLProtocol 必须显式禁用旧协议,不能依赖默认值。
禁用模糊关键字,避免版本漂移风险
不要用 HIGH、MEDIUM、ALL 这类 OpenSSL 版本相关的关键字。例如 HIGH 在 OpenSSL 1.1.1 中可能包含 ECDHE-RSA-AES256-SHA(CBC 模式),但在 OpenSSL 3.0 中可能剔除——导致行为不可控。固定写死套件列表,才能确保跨环境一致。
验证是否真正生效,别信配置文件语法
重启 Apache 后,用以下命令实测服务端实际协商结果:
openssl s_client -connect example.com:443 -tls1_2 -cipher 'ECDHE-RSA-AES128-GCM-SHA256:AES128-SHA' 2>/dev/null | grep Cipher
若返回 Cipher : AES128-SHA,说明 SSLHonorCipherOrder 未起作用;若返回 Cipher : ECDHE-RSA-AES128-GCM-SHA256,则配置成功。更全面检测可用 SSL Labs Test 查看“Handshake Simulation”各客户端实际协商到的套件。











