术语表

TLS 1.0 (传输层安全协议 1.0)

最后核实

定义

TLS 1.0 是传输层安全协议的第一个版本,1999 年以 RFC 2246 发布,2021 年被 RFC 8996 正式废弃,主流浏览器已不再支持。

TLS 1.0 是 IETF 接手 SSL 3.0 之后发布的第一个 TLS 版本,规范是 1999 年 1 月的 RFC 2246。它在结构上和 SSL 3.0 非常接近,线上的版本号写作 3.1,主要变化是记录完整性改用 HMAC,密钥派生改用 MD5 与 SHA-1 组合构造的伪随机函数。

为什么重要

TLS 1.0 的 CBC 模式使用可预测的初始向量,2011 年被 BEAST 攻击利用;它不支持 AES-GCM 这类 AEAD 算法,握手过程也依赖 MD5 和 SHA-1。Chrome 84、Edge 84 和 Firefox 78 在 2020 年中移除了 TLS 1.0/1.1,RFC 8996 于 2021 年 3 月正式废弃这两个版本。国内常用的 360 浏览器、QQ 浏览器基于 Chromium 内核,行为基本一致。服务器如果只开了 TLS 1.0,现代浏览器根本无法完成握手;各类安全扫描工具通常也会把"仍支持 TLS 1.0"标记为问题。

例子

检查服务器是否还接受 TLS 1.0。OpenSSL 3.x 在默认安全级别下客户端自己就会拒绝 TLS 1.0,测试时需要临时降到 0 级:

openssl s_client -connect example.com:443 -tls1 -cipher 'DEFAULT:@SECLEVEL=0'

能握手成功,说明服务器仍开着 TLS 1.0。Nginx 中只保留新版本即可:

ssl_protocols TLSv1.2 TLSv1.3;

宝塔面板里调整 SSL 协议版本,最终也是改写这条指令;阿里云、腾讯云的 CDN 和负载均衡则在控制台里提供 TLS 版本或安全策略选项。

常见误区

  • 关掉 TLS 1.0 会流失大量用户。 主流浏览器早已不支持它,还依赖它的通常是很老的操作系统或嵌入式设备,可以先查访问日志再决定。
  • 只要配强密码套件,TLS 1.0 就安全。 问题出在协议本身的握手哈希和缺少 AEAD,换套件修不好,只能升级到 TLS 1.2 或 1.3。
  • SSL 3.0 和 TLS 1.0 是一回事。 它们是不同的协议版本,SSL 3.0 已在 2015 年被 RFC 7568 单独废弃。

延伸阅读