TLSv1.3学习

本文介绍了TLSv1.3协议,包括其2018年的最终版本发布,浏览器支持情况,以及与TLSv1.2的区别。通过Wireshark抓包分析,展示了TLSv1.3的握手流程,强调了1-RTT和0-RTT的特点。此外,还讲述了如何使用Netty搭建TLSv1.3服务器,提到了需要较新版本的Netty和JDK,并指出了配置TLSv1.3协议和加密套件的关键步骤。

TLSv1.3于2018年8月正式发布最终版本。

如果想要浏览基于TLSv1.3的网页,需要浏览器支持,chrome的话需要打开chrome://flags/搜索tls并选择启用。浏览网页时打开开发者调试工具查看Security页签可以观察到网站使用TLSv1.2还是1.3。现在大部分网站还是使用TLSv1.2的,也有少部分使用TLSv1.3的网站的,如https://boke112.com/bkwd/5792.html。

TLSv1.3协议了解

参考资料:

  • rfc文档
  • https://blog.youkuaiyun.com/mrpre/article/details/81532469
  • wireshark抓包分析
    (1)必须使用新版的wireshark,否则不支持TLS1.3;
    (2)由于hello后的包就进行了加密,需要配置环境变量SSLKEYLOGFILE,wireshark配置pre master key log file,使用firefox访问目标网页,即可看到解密后的包。

TLSv1.3完整的流程
在这里插入图片描述
第一步,客户端发送Hello,这里面主要包含了
(1)supported groups(支持的key exchange算法及参数)和key_share(根据支持的算法预先算出的pub key),用于计算pre master key。
(2)random,用于最终生成master key。
(3)cipher suites,可选择的套件,用于后面对称加密以及生成摘要。
(4)pre shared key和psk_key_exchange_modes,用于恢复TLS会话。
第二步,服务端从预先计算的pub key中选择一个,同时将自己的random和pub key也返回给客户端,此时服务器已经可以算出master key,所以开始使用密钥进行加密,从change cipher spec往后服务端发送的包都进行了加密。
第三步,服务端发送一些扩展参数
第四步,服务端发送自己的证书,以及针对握手信息计算摘要并使用证书的私钥进行加密,也就是Certificate Verify消息,保证自己拥有证书的私钥。
第五步,服务端针对所有握手信息进行摘要并使用master key进行加密,以验证握手信息的完整和master key的正确。
第六步,客户端也计算出master key,开始加密传输。

New Session Ticket是在握手后服务端随时发送给客户端的,用于快速恢复TLS会话。

总的来说,由于提前计算好pub key,避免了TLS1.2中额外的key exchange消息,所以只需要1-RTT就可以完成了握手。

除了完整的握手以外,还可以使用PSK恢复会话,需要1-RTT或者0-RTT。
1-RTT:服务端需要支持PSK恢复会话,客户端Hello时携带上次连接中的PSK,则可以省去服务器证书的验证过程。
0-RTT:服务端需要支持PSK和Early data,客户端在Hello的同时可以发送Early Data,Early Data是根据PSK加密的,在握手完毕后,客户端会发送End of Early data,开始用密钥进行加密传输。这样节省了1-RTT,但是也没有这么安全。

netty搭建TLSv1.3的服务器

关于TLSv1.2的方法具体在https://blog.youkuaiyun.com/lblblblblzdx/article/details/88656951中介绍过了,那么如果使用TLSv1.3需要注意什么呢
(1)由于TLSv1.3比较新,所以需要使用较新版本的netty和jdk才支持,我使用的是4.1.24.Final的netty,和jdk11。
(2)获取SslContext的代码

List<String> ciphers = new ArrayList<String>();
ciphers.add("TLS_AES_128_GCM_SHA256");
ciphers.add("TLS_AES_256_GCM_SHA384");
SslContext sslCtx = SslContextBuilder.forServer(certChainFile, keyFile).trustManager(rootFile)
.protocols("TLSv1.3").ciphers(ciphers).clientAuth(ClientAuth.NONE).build();
  • 默认的协议是TLSv1.2,需要手动配置为TLSv1.3
  • 默认的加密套件都是TLSv1.2的,需手动添加TLSv1.3的加密套件
<think> 嗯,用户这次问的是TCP和TLS 1.3握手的时序图。从上下文看,用户之前似乎在研究QUIC协议(引用中提到了QUIC with TLS1.3),现在转向传统TCP下的TLS1.3握手流程。用户可能是个网络协议学习者或开发者,需要对比不同加密握手机制。 注意到用户引用的资料提到"4号报文包含Handshake Protocol: Finished",这说明用户对TLS1.3的握手阶段已有基本认知。不过用户明确要求的是TCP层面的时序图,需要把传输层和应用层协议结合起来说明。 关于TCP三次握手和TLS1.3简化握手的组合流程: - TCP层需要经典的SYN/SYN-ACK/ACK三次交互,对应到数据包序列 - TLS1.3的精髓在于1-RTT握手,但实际抓包会看到ClientHello和ServerHello/Finished等消息 - 特别要强调"虚拟握手"的概念,因为TLS1.3的握手消息实际是作为TCP数据载荷传输的 考虑到用户可能动手抓包,补充了Wireshark筛选建议。另外用户上次关注到RTT计算,所以在时序图说明里特别标注了关键时间点。最后生成的延伸问题既包含协议细节(如PSK机制),也包含实用场景(CDN优化),这样能覆盖理论和实践需求。 安全方面,特别提醒了TLS1.3前向安全这个重要特性。引用标识严格按用户要求添加在相关描述末尾,所有网络术语保持中英文对照(如SYN/同步报文)。 </think> 以下是TCP与TLS 1.3组合握手的时序图及分步解析(基于RFC 8446标准): ```mermaid sequenceDiagram participant Client participant Server %% TCP三次握手 Client->>Server: SYN (Seq=x) Server->>Client: SYN-ACK (Seq=y, Ack=x+1) Client->>Server: ACK (Ack=y+1) %% TLS 1.3简化握手 Note over Client,Server: TLS 1.3 Handshake (1-RTT) Client->>Server: ClientHello + KeyShare<br/>(包含支持的密码套件、TLS版本等) Server->>Client: ServerHello + KeyShare<br/>ChangeCipherSpec<br/>EncryptedExtensions<br/>Certificate*<br/>CertificateVerify*<br/>Finished Client->>Server: ChangeCipherSpec<br/>Finished<br/>Application Data ``` ### 关键步骤解析 1. **TCP连接建立** (基础传输层) - `SYN` → `SYN-ACK` → `ACK` 三次握手(约1-RTT) - 目标:协商初始序列号,建立可靠连接 2. **TLS 1.3握手** (应用层安全) - **ClientHello** (1个消息) - 包含协议版本、随机数(Random)、密钥共享(KeyShare)、支持的密码套件 - *示例扩展*:`supported_versions: TLS 1.3`[^1] - **Server响应** (合并为1个消息) - `ServerHello`:选定密码套件,生成共享密钥 - `ChangeCipherSpec`:通知启用加密(兼容性标记) - `Finished`:包含加密验证的MAC值 - *可选组件*:证书(`Certificate`)和签名(`CertificateVerify`) - **客户端确认** (1个消息) - `ChangeCipherSpec` + `Finished`:密钥确认 - 立即发送加密应用数据(如HTTP请求) ### 核心优化特性 1. **1-RTT握手** - 相比TLS 1.2减少1次往返(消除ServerKeyExchange等步骤) - 客户端在首次飞行即预计算密钥[^1] 2. **前向安全** - 通过(EC)DHE密钥交换实现,临时密钥会话后销毁 3. **0-RTT模式** (可选) ```mermaid sequenceDiagram Client->>Server: Early Data (应用数据) Server-->>Client: NewSessionTicket (前一会话) ``` - 客户端复用之前会话的PSK(预共享密钥) - 风险提示:需防范重放攻击[^1] ### 抓包示例(Wireshark) ``` No. Time Protocol Info 1 0.000000 TCP SYN 2 0.025783 TCP SYN-ACK 3 0.050102 TCP ACK 4 0.051203 TLSv1.3 Client Hello 5 0.075491 TLSv1.3 Server Hello, Change Cipher Spec, Application Data 6 0.100332 TLSv1.3 Change Cipher Spec, Application Data (HTTP Request) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值