TLS协议
一,TLS协议的组成

TLS协议架构模块分为两层:TLS记录协议,TLS握手协议
① TLS记录协议: 是所有子协议的基层,规定了TLS收发数据的基本单位。所有子协议都需要通过记录协议发出,多个记录数据可以在一个TCP中发送。主要负责使用对称密码对消息进行加密。
② TLS握手协议:
- 握手协议:客户端和服务端在握手过程中协商 TLS版本号,随机数,密码套件,交换证书,最终获取会话密钥。
- 密码规格变更协议:发送一个通知,告知对方后续的通信采用加密保护。
- 警告协议:向对方发出警告,类似于http中的状态码。不支持旧版本,证书异常都会发送警报,另一方收到警报后可以进行相应的处理
- 应用数据协议:将TLS承载的应用数据传达给通信对象
二,TLS的握手过程

上图是TLS握手的一个简易流程,每一个框就是一个 TLS Record(记录),多个Record合并成一个TCP来进行发送,可以看到整个TLS握手只需要2次消息往返即2RTT就能完成 ( TLS 1.2是2RTT,TLS 1.3可以做到 1RTT甚至0RTT )
接下来我们来结合wireshark抓包来详细介绍每一步的流程:
1,ClientHello

首先客户端先向服务端发起握手请求,在这个请求过程中client会携带以下参数
- TLS 版本: 确定使用1.2还是1.3 但是这个地方固定是1.2。之后我们会在1.2与1.3的兼容性中聊到
- Client提供的随机数: 用于后续生成会话密钥
- Cipher Suites: 可用密码套件列表,供服务端选择
- 会话ID(可忽略): 可用于之后TLS1.3的优化 —— 会话缓存
- 可用压缩方式
密码套件
客户端和服务端在使用TLS建立连接时需要选择一组恰当的加密算法来实现安全通信,这些算法的组合就被称为 密码套件
如图中的密码套件那一行:TLS_ECDHE_RSA_WITH_AES_128-CBC-SHA他的意思是
- 握手时使用ECDHE算法进行密钥交换
- 用RSA签名和身份认证
- 握手后的通信使用 AES对称算法,密钥长度 128 位
- 分组模式为 CBC
- 摘要算法为 SHA 用于消息认证和产生随机数
2,ServerHello
服务端接收到客户端的握手请求,会回复客户端同时 发送 ServerHello,ServerHello会根据之前的ClientHello的参数来做如下操作:
- **确认 TLS版本 **
- 服务器提供的随机数
- 选择的密码套件
1541



被折叠的 条评论
为什么被折叠?



