SSL 全称Secure Sockets Layer 安全套接字协议,一般我们在学习 SSL 的时候,都会和 TLS一起来学习的。
作用:TLS与SSL在传输层与应用层之间对网络连接进行加密,从而实现数据的保密性和完整性。
协议组成
- TLS 首部
- 类型
- 握手协议 handshak(22):
安全地协商出一份秘钥(非对称加密) - 告警协议 alert(21)
- 改变密码规约协议 change cipher (20)
- 应用数据 Application Data(23)
- 握手协议 handshak(22):
- TLS 版本
- 长度
- 类型
- 详细内容: 如果已经协商好加密方式,这个内容将不是明文数据
在 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握手协议切换连接状态:
- 收到改变密码规约指令
- 修改挂起下的安全参数
- 将挂起变为当前
- 清空挂起的安全参数
加密流程
根据最新的安全参数,对应用数据进行加密,对应的加密流程如下图所示:
加密后的数据数据处理之后的样子如下图所示:
总结
TLS1.2 的一个数据包中有一个 TLS 记录,一个 TLS 记录有两部分,分别是 TLS首部和内容,其中TLS首部有内容类型、版本、长度。
其中内容类型有握手类型(22),告警类型(21),改变密码规约类型(20)以及应用数据类型(23)