TLS 1.3 通过减少握手往返次数和移除不安全算法,实现了比 TLS 1.2 更快的连接速度和更高的安全性,是目前互联网通信的首选标准。
在数字通信的世界里,握手就像是两个人初次见面时的礼仪交换,过去,这种交换繁琐且充满不确定性;它变得简洁高效,理解这一过程,不仅关乎技术原理,更直接影响你浏览网页的速度和隐私安全。
TLS 1.2 握手流程详解:经典但略显笨重
TLS 1.2 是过去十年互联网安全的基石,它的握手过程虽然成熟稳定,但为了兼容各种老旧设备和复杂的安全需求,步骤显得较为冗长,我们可以将其想象成一场多轮次的谈判,双方需要反复确认身份和密钥。
客户端与服务器的初步接触
握手始于客户端(通常是浏览器)发送一个 ClientHello 消息,这不仅仅是一句问候,它包含了客户端支持的 TLS 版本、加密套件列表以及一个随机生成的数字(Client Random),这一步就像是在说:“我会用这些语言交流,这是我给的第一个线索。”
服务器收到后,回复 ServerHello,它从客户端提供的列表中挑选出双方都支持的最佳加密套件,并生成自己的随机数(Server Random),随后,服务器发送其数字证书,证明自己的身份,这个过程需要验证证书的合法性,确保你不是在访问一个假冒的网站。
密钥交换与身份验证
接下来的步骤是密钥交换,在 TLS 1.2 中,常见的做法是使用 RSA 或 Diffie-Hellman 算法,如果是 RSA,客户端会生成一个预主密钥(Pre-Master Secret),用服务器的公钥加密后发送给服务器,只有拥有私钥的服务器才能解密这个密钥。
此后,双方利用之前交换的三个随机数(Client Random, Server Random, Pre-Master Secret)计算出最终的会话密钥,这个密钥将用于后续所有数据的对称加密。

双方发送 Finished 消息,标志着握手完成,整个过程中,客户端和服务器之间至少需要往返三次(RTT),如果包含证书验证和额外的扩展协商,延迟可能更高。
TLS 1.3 握手流程解析:极速与安全并重
TLS 1.3 是对握手过程的彻底重构,业内专家指出,其核心设计理念是“少即是多”,通过移除不必要的步骤和过时的算法,大幅提升了效率。
0-RTT 与 1-RTT 的飞跃
TLS 1.3 的最大亮点在于握手速度的提升,对于新连接,它通常只需要 1-RTT(一次往返时间)即可完成握手,这意味着客户端在发送 ClientHello 的同时,就可以开始发送加密的应用数据。
更令人兴奋的是 0-RTT(零往返时间)模式,当用户再次访问同一个网站时,浏览器可以利用之前保存的会话票据(Session Ticket),直接发送加密数据,无需等待服务器确认,这就像是你走进常去的便利店,店员已经准备好你常买的咖啡,无需排队结账即可直接拿走。
简化后的加密套件
在 TLS 1.3 中,许多不安全的加密套件被直接移除,如 RSA 密钥交换和静态 Diffie-Hellman,取而代之的是基于 ECDHE(椭圆曲线 Diffie-Hellman 密钥交换)的前向保密机制,这意味着即使服务器的私钥在未来被泄露,过去的通信记录也无法被解密。
握手过程简化为:
- 客户端发送
ClientHello,包含支持的曲线和密钥共享信息。 - 服务器回复
ServerHello和证书。 - 服务器发送
NewSessionTicket(可选,用于 0-RTT)。 - 客户端发送加密的应用数据。
- 服务器回复加密的应用数据。
TLS 1.2 与 TLS 1.3 核心差异对比
为了更直观地理解两者的区别,我们可以通过以下维度进行对比,这种对比有助于开发者在选型时做出明智决策,特别是在考虑

TLS 1.2 vs TLS 1.3 性能对比 时。
| 特性 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| 握手往返次数 | 通常为 2-RTT | 通常为 1-RTT,支持 0-RTT |
| 密钥交换 | 支持 RSA, DH, ECDHE | 仅支持 ECDHE(强制前向保密) |
| 加密套件 | 包含多种不安全算法 | 仅保留高强度算法(如 AES-GCM, ChaCha20) |
| 证书验证 | 握手完成后验证 | 握手过程中即可验证,减少延迟 |
| 重协商机制 | 支持,但易受攻击 | 移除重协商,使用会话票据替代 |
| 安全性 | 存在已知漏洞风险 | 修复了多数已知漏洞,安全性更高 |
为什么选择 TLS 1.3?
除了速度优势,TLS 1.3 在安全性上也更具优势,它消除了许多容易引发漏洞的配置选项,如压缩扩展(CRIME 攻击)和静态 RSA 密钥交换,TLS 1.3 的握手消息全部加密,防止了中间人攻击者通过嗅探握手过程来获取信息。
对于关注 TLS 1.3 部署成本 虽然初期需要升级服务器和客户端软件,但长期来看,减少的延迟提升了用户体验,降低了服务器负载,总体成本是可控的。

实际部署中的注意事项
在实际操作中,部署 TLS 1.3 并非一蹴而就,你需要确保服务器软件(如 Nginx, Apache, IIS)支持 TLS 1.3,并正确配置加密套件。
兼容性检查
尽管 TLS 1.3 已被广泛支持,但仍有一部分老旧设备无法兼容,在启用 TLS 1.3 之前,建议先进行兼容性测试,可以使用在线工具检查你的网站是否支持 TLS 1.3,并监控用户访问日志,观察是否有因不支持新协议而导致的连接失败。
配置优化建议
在 Nginx 中,可以通过以下配置启用 TLS 1.3:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
确保 ssl_protocols 中同时包含 TLSv1.2 和 TLSv1.3,以兼顾兼容性和安全性。
常见问题解答
TLS 1.3 握手过程中是否支持前向保密?
是的,TLS 1.3 强制要求使用前向保密机制,所有密钥交换均基于 ECDHE,确保即使服务器私钥泄露,历史通信内容也无法被解密,这是 TLS 1.3 相比 TLS 1.2 的重大安全改进。
如何判断网站是否使用了 TLS 1.3?
可以通过浏览器的开发者工具查看网络请求详情,在“安全”标签页中,通常会显示当前连接使用的协议版本,也可以使用命令行工具如 openssl s_client -connect example.com:443 -tls1_3 进行测试。
TLS 1.3 是否完全替代了 TLS 1.2?
TLS 1.3 并未完全替代 TLS 1.2,由于部分老旧客户端和服务器仍不支持 TLS 1.3,许多网站采用双协议支持策略,优先使用 TLS 1.3,若客户端不支持则降级至 TLS 1.2,随着时间推移,TLS 1.2 将逐渐被淘汰。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/397874.html
