网络| TLS/SSL 数据结构

291 阅读2分钟

SSL 全称Secure Sockets Layer 安全套接字协议,一般我们在学习 SSL 的时候,都会和 TLS一起来学习的。

作用:TLS与SSL在传输层与应用层之间对网络连接进行加密,从而实现数据的保密性和完整性。

协议组成

  • TLS 首部
    • 类型
      • 握手协议 handshak(22):安全地协商出一份秘钥(非对称加密)
      • 告警协议 alert(21)
      • 改变密码规约协议 change cipher (20)
      • 应用数据 Application Data(23)
    • TLS 版本
    • 长度
  • 详细内容: 如果已经协商好加密方式,这个内容将不是明文数据

image.png

在 TLS1.2 中一个TLS数据包就是一个TLS 记录协议,一个记录协议可以包含多个握手协议,或者一个改变密码规约协议,或者一个告警协议。

相关参数

名称描述
session id会话标识符,服务器创建的一个任意字节长度序列,用于标识会话的状态
peer certificate对等实体证书,通信双方的 X509v3 证书
compress method加密前,用于压缩数据的算法
cipher spec密码规约:1. 数据加密算法(null、DES、AES)2. MAC(Message Authentication Code 报文认证码,如 MD5、SHA) 3. 散列表大小
master secret主密钥:客户端和服务端共享数据的 48 节秘钥
is resumable可重组性

切换连接状态

因为确认好对应的加密方式,不是立刻就能生效,所以需要状态的维护。

定义的安全参数

  • 连接端点:连接的 ip 端口
  • 压缩算法
  • 加密算法
  • Message Authenticate Code(MAC 报文认证码) 算法:包括由 MAC 算法返回的散列大小
  • 主密钥:连接两个对等实体共享的 48字节密文?
  • 客户端随机数
  • 服务器随机数

状态类型

  • 当前读
  • 当前写
  • 挂起读
  • 挂起写

如何切换连接状态

由TLS握手协议切换连接状态:

  1. 收到改变密码规约指令
  2. 修改挂起下的安全参数
  3. 将挂起变为当前
  4. 清空挂起的安全参数

加密流程

根据最新的安全参数,对应用数据进行加密,对应的加密流程如下图所示:

加密后的数据数据处理之后的样子如下图所示:

总结

TLS1.2 的一个数据包中有一个 TLS 记录,一个 TLS 记录有两部分,分别是 TLS首部和内容,其中TLS首部有内容类型、版本、长度。

其中内容类型有握手类型(22),告警类型(21),改变密码规约类型(20)以及应用数据类型(23)