如何在 Apache 中禁用 TLS 1.0 和 TLS 1.1?
在 SSL 配置里设 SSLProtocol -all +TLSv1.2 +TLSv1.3(或 all -SSLv3 -TLSv1 -TLSv1.1),重启 Apache;用 ssllabs 或 openssl s_client 验证。本文给出各发行版配置位置与验证方法。
做法:找到 Apache 的 SSL 配置,把 SSLProtocol 改为 SSLProtocol -all +TLSv1.2 +TLSv1.3(白名单写法,推荐)或 all -SSLv3 -TLSv1 -TLSv1.1(黑名单写法),重启生效。TLS 1.0/1.1 已被各大标准废弃(PCI-DSS、主流浏览器均不再支持),禁用是安全合规的基本要求。
配置位置
- Debian/Ubuntu:
/etc/apache2/mods-available/ssl.conf(全局)或站点default-ssl.conf - RHEL/CentOS:
/etc/httpd/conf.d/ssl.conf
修改配置
# 推荐:白名单写法,语义最明确
SSLProtocol -all +TLSv1.2 +TLSv1.3
# 黑名单写法(等价)
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
顺带把弱加密套件也收一收:
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
SSLHonorCipherOrder on
重启生效:
sudo apachectl configtest && sudo systemctl restart apache2
验证
# 应失败(连接被拒/握手失败)
openssl s_client -connect your-domain:443 -tls1
openssl s_client -connect your-domain:443 -tls1_1
# 应成功
openssl s_client -connect your-domain:443 -tls1_2
在线全面体检:SSL Labs(ssllabs.com/ssltest)跑一遍,目标 A/A+。
兼容性提醒
- TLS1.2 自 2008 年起普及,正常现代客户端全支持
- 真正会断的只有:IE10 及以下、Android 4.3 及以下、Java 6/7 老客户端、部分老旧 IoT/工控设备——有这类客户端要单独评估
Nginx 对照
ssl_protocols TLSv1.2 TLSv1.3;
观测云对照
握手失败的客户端看得见。 禁用旧协议后,Apache 错误日志里的 SSL 握手失败记录经 DataKit 采集统计——如果某类老客户端持续失败,数据会告诉你影响面有多大,再决定是否开例外。
常见问题(FAQ)
Q:多个虚拟主机可以分别配协议吗?
A:SSLProtocol 可在 vhost 级别覆盖,但 SNI 之前的客户端以默认站点配置为准,实际效果以全局配置最稳。
Q:改完重启网站打不开?
A:先看是不是写法错误(apachectl configtest);旧客户端被拒之门外是预期行为。
Q:TLS 1.3 要不要开?
A:OpenSSL 1.1.1+ 的 Apache 2.4.38+ 支持,开了握手更快更安全,建议开。