码了2000多行代码就是为了讲清楚TLS握手流程(续)

本文详细介绍了TLS1.2的单向认证和双向认证握手流程,通过时序图展示了数据收发过程。同时,对比了TLS1.2与TLS1.3在消息格式、类型、加密和密钥生成上的区别。通过实例代码和调试信息,揭示了TLS1.2和TLS1.3在HTTP2支持上的差异,强调实践对于深入理解的重要性。
摘要由CSDN通过智能技术生成

来自公众号:新世界杂货铺


在“ 码了2000多行代码就是为了讲清楚TLS握手流程”这一篇文章的最后挖了一个坑,今天这篇文章就是为了填坑而来,因此本篇主要分析TLS1.2的握手流程。

在写前一篇文章时,笔者的Demo只支持解析TLS1.3握手流程中发送的消息,写本篇时,笔者的Demo已经可以解析TLS1.x握手流程中的消息,有兴趣的读者请至文末获取Demo源码。

结论先行

为保证各位读者对TLS1.2的握手流程有一个大概的框架,本篇依旧结论先行。

单向认证

单向认证客户端不需要证书,客户端验证服务端证书合法即可访问。

下面是笔者运行Demo打印的调试信息:

在这里插入图片描述

根据调试信息知,TLS1.2单向认证中总共收发数据四次,Client和Server从这四次数据中分别读取不同的信息以达到握手的目的。

笔者将调试信息转换为下述时序图,以方便各位读者理解。

在这里插入图片描述

双向认证

双向认证不仅服务端要有证书,客户端也需要证书,只有客户端和服务端证书均合法才可继续访问(笔者的Demo如何开启双向认证请参考前一篇文章中HTTPS双向认证部分)。

下面是笔者运行Demo打印的调试信息:

在这里插入图片描述

同单向认证一样,笔者将调试信息转换为下述时序图。

在这里插入图片描述

双向认证和单向认证相比,Server发消息给Client时会额外发送一个certificateRequestMsg消息,Client收到此消息后会将证书信息(certificateMsg)和签名信息(certificateVerifyMsg)发送给Server。

双向认证中,Client和Server发送的消息变多了,但是总的数据收发仍然只有四次

总结

1、单向认证和双向认证中,总的数据收发仅四次(比TLS1.3多一次数据收发),单次发送的数据中包含一个或者多个消息。

2、TLS1.2中除了finishedMsg其余消息均未加密。

3、在TLS1.2中,ChangeCipherSpec消息之后的所有数据均会做加密处理,它的作用在TLS1.2中更像是一个开启加密的开关(TLS1.3中忽略此消息,并不做任何处理)。

和TLS1.3的比较

消息格式的变化

对比本篇的时序图和前篇的时序图很容易发现部分消息格式发生了变化。下面是certificateMsgcertificateMsgTLS13的定义:

// TLS1.2
type certificateMsg struct {
   
	raw          []byte
	certificates [][]byte
}
// TLS1.3
type certificateMsgTLS13 struct {
   
	raw          []byte
	certificate  tls.Certificate
	ocspStapling bool
	scts         bool
}

其他消息的定义笔者就不一一列举了,这里仅列出格式发生变化的消息。

TLS1.2 TLS1.3
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值