TLS协议升级仅保留TLS1.2/1.3兼容浏览器
很多站长发现服务器仍然支持 SSLv3 或 TLS1.0/1.1,这些旧协议存在安全漏洞,而主流浏览器(Chrome、Firefox、Edge)已计划或已停止支持。
本文针对 TLS 协议升级仅保留 TLS1.2/1.3 兼容浏览器 这个需求,给出零基础也能直接执行的操作步骤。
升级前必须检查的两件事
在动手修改配置前,先确认两个关键点:你的 Web 服务器软件版本是否支持 TLS1.2/1.3,以及当前是否已经在使用 HTTPS。
如果服务器跑的是 Nginx 1.9.1 以上或 Apache 2.4.6 以上,一般都支持。
如果是更老的版本,建议先更新软件。
另外检查 /etc/nginx/nginx.conf 或 /etc/httpd/conf.d/ssl.conf 中是否存在 ssl_certificate 和 ssl_certificate_key 指令——没有证书就先申请一个(例如使用 Let's Encrypt)。
分步操作:配置 Nginx 仅启用 TLS1.2 和 TLS1.3
假设你使用 Nginx,找到站点配置文件(通常位于 /etc/nginx/sites-enabled/default 或 /etc/nginx/conf.d/yourdomain.conf)。
在 server 块内定位 ssl_protocols 这一行:
ssl_protocols TLSv1.2 TLSv1.3;
如果原本有 TLSv1 TLSv1.1,直接删除。
保存文件后先测试配置是否正确:
nginx -t
输出 syntax is ok 和 test is successful 表示无语法错误。
然后重新加载 Nginx:
systemctl reload nginx
对于 Apache 用户,
配置文件在 /etc/httpd/conf.d/ssl.conf 或 /etc/apache2/sites-enabled/default-ssl.conf,
找到 SSLProtocol 指令,
修改为:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
这表示启用所有协议后排除旧版本,只保留 TLSv1.2 和 TLSv1.3。
同样测试配置:apachectl configtest,然后重启:systemctl restart httpd。
避坑指南:浏览器兼容的常见误区
只改 ssl_protocols 还不够,有时浏览器访问会报“ERR_SSL_VERSION_OR_CIPHER_MISMATCH”。
原因是只限制了协议,但加密套件(Cipher Suite)太旧或不兼容。
建议在同一个 server 块内补充:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
如果服务器系统较旧(如 CentOS 7),OpenSSL 版本可能不支持 TLS1.3。
这时升级 OpenSSL 或切换为现代 Linux 发行版(如 Ubuntu 22.04+)更省心。
另一个常见问题:使用 CDN(Cloudflare 等)时,需要在 CDN 后台也启用 TLS1.2/1.3,否则用户到 CDN 的链路仍使用旧协议。
高频问题解答
问:只保留 TLS1.2 和 TLS1.3,手机旧浏览器(如 Android 4.4 原生浏览器)还能访问吗?
答:Android 4.4 原生浏览器只支持 TLS1.0/1.1,升级后无法访问。建议查看网站访问日志,如果确实有这类用户,可暂时保留 TLS1.1 或使用 TLSv1.1 TLSv1.2 TLSv1.3 过渡。但大部分现代手机浏览器(Chrome、Safari、Firefox 更新版)都支持 TLS1.2。
问:配置后网站打不开怎么办?
答:首先用 ssllabs.com/ssltest 检查域名,看是否因为证书问题或协议不匹配。本地用 openssl s_client -connect yourdomain.com:443 -tls1_2 测试,如果连接正常,说明 TLS1.2 工作;换成 -tls1_1 应报错。若报错“no protocols available”,说明 OpenSSL 版本太老,需要升级。
效果验证:确认旧协议已关闭,新协议正常运行
完成配置后,推荐三种验证方式:
- 浏览器访问:在 Chrome 地址栏点击锁图标 → “连接是安全的”,查看协议版本是否为 TLS 1.2 或 1.3。
- 在线工具:打开
www.ssllabs.com/ssltest,输入域名,等待扫描完成。在“Protocols”部分应只显示 TLS 1.2 和 TLS 1.3,且无警告。 - 命令测试:
# 尝试用 TLS1.0 连接,应失败
openssl s_client -connect yourdomain.com:443 -tls1 -tlsextdebug
# 尝试用 TLS1.1 连接,应失败
openssl s_client -connect yourdomain.com:443 -tls1_1
# 用 TLS1.2 连接,应成功
openssl s_client -connect yourdomain.com:443 -tls1_2
成功时输出 SSL handshake has read ... 且最后一行为 Verify return code: 0 (ok)。
按以上步骤操作后,服务器 TLS 协议升级仅保留 TLS1.2/1.3 兼容浏览器的目标即可达成。
如果遇到特定环境下的异常,建议优先检查 OpenSSL 版本和 Web 服务器日志,再对照本文避坑部分定位问题。