必须显式禁用 SSLv2、SSLv3、TLSv1.0 和 TLSv1.1,仅启用 TLSv1.2 和 TLSv1.3;配置为 SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3,并配合强密码套件、SSLHonorCipherOrder on 及版本验证。
apache 必须显式禁用 sslv2 和 sslv3,不能依赖默认行为——这两个协议存在严重漏洞(如 poodle),已被所有主流浏览器弃用,且自 2015 年起被 pci dss 等合规标准明令禁止。
在虚拟主机或全局 SSL 配置中添加明确指令
找到你的 Apache SSL 配置位置(常见于 /etc/apache2/sites-enabled/your-site.conf 或 /etc/httpd/conf.d/ssl.conf),在 <VirtualHost *:443> 块内或全局 SSL 段中加入:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3
注意:
✅ 正确写法是“all”开头再逐个排除;
❌ 不要写成 +TLSv1.2 +TLSv1.3 单独启用——旧版 Apache 可能仍隐式允许 TLSv1.0;
❌ 不要留空或只写 SSLProtocol TLSv1.2 TLSv1.3——Apache 不支持这种简写,会报错或不生效。
验证 OpenSSL 和 Apache 版本是否支持所需协议
禁用只是第一步,若底层不支持,配置可能无效:
- Apache ≥ 2.4.37 才能稳定启用 TLSv1.3(需搭配 OpenSSL ≥ 1.1.1)
- 若使用较老版本(如 Apache 2.2 或 OpenSSL 1.0.2),TLSv1.3 不可用,至少确保
+TLSv1.2生效 - 运行
openssl version和apache2 -v(或httpd -v)确认版本
配套收紧密码套件并强制服务端优先
仅禁协议不够:弱密码套件仍可能让 TLSv1.2 连接降级为不安全协商。
- 添加强套件限制:
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 - 禁用已淘汰算法:
!RC4 !3DES !MD5 !SHA1 !NULL !EXPORT - 启用服务端排序:
SSLHonorCipherOrder on
必须实测确认禁用成功
配置重载后(systemctl restart apache2 或 systemctl restart httpd),立即验证:
- 测试 SSLv3 是否被拒:
openssl s_client -connect example.com:443 -ssl3 -servername example.com→ 应返回连接失败或 handshake error - 测试 TLSv1.2 是否正常:
openssl s_client -connect example.com:443 -tls1_2 -servername example.com 2>/dev/null | grep Protocol→ 输出应为Protocol : TLSv1.2 - 用 SSL Labs 测试工具 全面扫描,确认 “Protocol Support” 栏仅显示 TLS 1.2 和 TLS 1.3


















