0Pricing
Security+ Academy · 课时

TLS 1.3 握手与 0-RTT 会话恢复

逐步跟踪 TLS 1.3 握手过程,了解其如何默认实现前向保密,并评估 0-RTT 会话恢复的安全权衡。

TLS 1.3 握手与 0-RTT 会话恢复 是 CoddyKit 上的免费 Security+ Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Security+ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Security+ Academy 课程共包含 4 节课。

为什么需要 TLS 1.3

TLS 1.3 于 2018 年发布(RFC 8446),旨在修复 TLS 1.2 在经历十年真实世界攻击后逐渐暴露的弱点。早期版本允许协商弱密码套件,支持出口级密码学,并且在数据开始传输前需要多次往返通信。TLS 1.3 移除了所有已弃用的算法,并将握手过程简化为正常情况下只需一次往返通信,从而显著提升了安全性和性能。

握手概览:一次往返通信

在 TLS 1.3 中,客户端和服务器通过1-RTT(一次往返通信)完成握手。客户端发送包含受支持密码套件和密钥共享值的 ClientHello(使用 Diffie-Hellman)。服务器通过一次传输同时响应 ServerHello、自己的密钥共享值、证书以及第一段加密应用程序数据。随后,客户端验证证书,并在交换应用程序数据之前发送 Finished 消息。

# Trace TLS 1.3 handshake with openssl
openssl s_client -connect example.com:443 -tls1_3 -msg 2>&1 | grep -E 'ClientHello|ServerHello|Finished'

密钥交换:仅使用临时 Diffie-Hellman

TLS 1.3 强制使用临时密钥交换,并完全移除了 RSA 密钥交换。所有密钥交换都必须使用 ECDHE(椭圆曲线 Diffie-Hellman 临时密钥交换)或 DHE(Diffie-Hellman 临时密钥交换)。“临时”表示每个会话都会生成一对新的密钥。这是完美前向保密的基础:即使服务器的长期私钥遭到泄露,也无法解密过去的会话,因为每个会话都使用了唯一的临时密钥。

完美前向保密详解

Perfect Forward Secrecy (PFS) 可确保即使攻击者今天记录了所有加密流量,并在未来获得服务器的私钥,也仍然无法解密旧会话。在使用 RSA 密钥交换的 TLS 1.2 中,服务器私钥可以解密过去任意会话中的预主密钥,这是灾难性的安全失效。TLS 1.3 的临时 DH 密钥意味着每个会话都会派生出自己的密钥,并且这些临时密钥在使用后会被丢弃。

密码套件简化

TLS 1.2 支持超过 300 种密码套件,其中许多套件较弱或已经被攻破。TLS 1.3 将其减少到仅五种密码套件,并且全部使用 AEAD(带有关联数据的认证加密):TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_AES_128_CCM_SHA256 和 TLS_AES_128_CCM_8_SHA256。这消除了 BEAST、POODLE 和 FREAK 等利用弱密码协商机制的完整攻击类别。

# Check supported TLS 1.3 cipher suites on a server
nmap --script ssl-enum-ciphers -p 443 example.com

0-RTT 会话恢复:速度与安全性的权衡

0-RTT(零往返时间)会话恢复是 TLS 1.3 的可选功能,允许客户端在握手完成之前,在第一条消息中就发送应用程序数据。它通过使用上一会话中的预共享密钥(PSK)实现。虽然 0-RTT 能显著降低延迟——这对高流量 API 至关重要——但也带来了重要的权衡:早期数据无法防御重放攻击。

0-RTT 中的重放攻击风险

在针对 0-RTT 数据的重放攻击中,拦截早期数据消息的攻击者可以将其重新发送给服务器,从而可能两次触发同一操作(例如付款或状态变更)。TLS 1.3 规范明确警告,0-RTT 早期数据只能承载幂等操作——无论执行多少次,结果都相同的操作,例如 GET 请求。非幂等操作(POST、DELETE)绝不能使用 0-RTT。

预共享密钥与会话恢复

在 TLS 1.3 完整握手成功后,服务器会发送一条包含 PSK(预共享密钥)的 NewSessionTicket 消息,由客户端保存。重新连接时,客户端会在 ClientHello 中通过pre_shared_key 扩展包含该 PSK。服务器识别出该密钥后,会批准 0-RTT 数据,或回退到 1-RTT 会话恢复。PSK 票据具有时间限制,并且应定期轮换,以缩短其暴露窗口。

加密握手:隐藏元数据

TLS 1.3 的一项重大改进是握手的大部分内容都经过加密,其中包括服务器证书。在 TLS 1.2 中,服务器证书以明文发送,网络观察者可以据此识别客户端要连接的域名。TLS 1.3 会加密证书以及后续握手消息中的大部分内容,从而减少被动观察者能够获取的元数据。Encrypted Client Hello (ECH) 是一项正在逐步采用的扩展,甚至可以隐藏 SNI(服务器名称指示)字段。

已移除的功能:TLS 1.3 淘汰了什么

TLS 1.3 移除了许多已经成为安全负担的传统功能:RSA 密钥交换(没有前向保密)、CBC 模式密码套件(容易受到填充预言机攻击)、RC4(已完全攻破的流密码)、出口级密码学(导致 FREAK 和 Logjam 的原因)、数字签名中的MD5 和 SHA-1、压缩(导致 CRIME 的原因),以及重新协商(导致多种攻击的原因)。移除这些功能后,TLS 1.3 的攻击面大幅缩小。

为 TLS 1.3 配置服务器

正确部署 TLS 1.3 需要将 Web 服务器配置为优先使用它,同时禁用 TLS 1.0 和 1.1。大多数现代 Web 服务器(Nginx、Apache、IIS)原生支持 TLS 1.3。您还应确保启用OCSP Stapling,以便在无需客户端联系 CA 的情况下提供证书吊销状态;同时确保HSTS 标头能够防止降级攻击。请使用 SSL Labs 等工具验证您的配置是否达到 A+ 评级。

# Nginx TLS 1.3 configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security 'max-age=63072000' always;

快速检查

测试您对本课 CompTIA Security+ (SY0-701) 概念的理解。

课程回顾

本课您学习了:TLS 1.3 使用临时 DH 密钥交换,并通过 1-RTT 完成握手,从而实现完美前向保密;0-RTT 会话恢复通过 PSK 实现更快速的重新连接,但容易受到重放攻击,因此只能承载幂等操作;此外,TLS 1.3 移除了所有传统弱功能——RSA 密钥交换、CBC 密码、RC4、出口级密码学和压缩——从而显著缩小攻击面。接下来,我们将学习 AES-GCM 等认证加密算法。

常见问题解答

「TLS 1.3 握手与 0-RTT 会话恢复」课时是免费的吗?

是的 — 「TLS 1.3 握手与 0-RTT 会话恢复」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Security+ Academy 课程的其余内容,请升级到 CoddyKit PRO。 Security+ Academy 课程共包含 4 节课。

「TLS 1.3 握手与 0-RTT 会话恢复」这节课中我会学到什么?

逐步跟踪 TLS 1.3 握手过程,了解其如何默认实现前向保密,并评估 0-RTT 会话恢复的安全权衡。 你通过在浏览器中直接运行的动手代码来练习 Security+ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Security+ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Security+ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「TLS 1.3 握手与 0-RTT 会话恢复」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Security+ Academy 课中编写并运行代码吗?

能。每节 Security+ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. TLS 1.3 握手与 0-RTT 会话恢复
  2. 经身份验证的加密:AES-GCM 与 ChaCha20-Poly1305
  3. 密钥派生函数:PBKDF2、bcrypt 与 Argon2
  4. 后量子密码学:CRYSTALS-Kyber 与 Dilithium
← 返回 Security+ Academy