- TLS / SSL会话是由记录(Records)所组成,有4种records
- Handshake
- Alert
- Change Cipher Spec
- Application Data
- Handshake和Alert Records被分为子类型(Subtypes):
- Handshake:Client Hello
- Handshake:Server Hello
- Alert:Handshake Failure
- 还有许多其他子类型...本篇不一一赘述
- SSL会话举例
- 下图即TLS会话 -- 一连串不同记录的交换
- 我们知道,TLS会话的前2个消息是Client Hello和Server Hello;Client Hello是一个握手协议记录,子类型是Client Hello
- 这些记录的目的:防止TLS会话受限于IP数据大小
- 有时,一条记录通过单个数据包发送
- 有时,多条记录也会通过单个数据包发送
- 也有些时候,一条记录会通过多个数据包发送
- 记录不受 IP 数据包(datagram)长度的限制
- 下图即TLS会话 -- 一连串不同记录的交换
- 每个记录都以记录头(Record Header)开始
- 分为4个部分:Record Type;SSLTLS Version;Record Length;Record Payload
- Record Type
- Change Cipher Spec
- 表明发送者已准备好安全通话所需的一切
- 密码套件和会话密钥
- 由Client和Server独立发送
- CCS之后发送的所有内容都是加密的
- Record Payload是二进制的0000 0001
- Length:1 byte
- 表明发送者已准备好安全通话所需的一切
- Alert - 一方发送给另一方的信息通知
- 内容包含2部分:
- Severity(严重程度)
- 01 - Waring - 会话继续
- 02 - Fatal(致命的) - 会话终止
- Description
- 通知详细信息(描述是什么导致了警告)
- Severity(严重程度)
- Sent unencrypted
- 除非是在Change Cipher Spec之后发送(因为每个在CCS之后发送的都是加密的)
- 内容包含2部分:
- Handshake
- TLS/SSL协议信息
- 归类为子类型(Sub-Types)
- Sent unencrypted
- 除了特定领域的特定子类型
- Application Data
- 由 SSL/TLS 保护的批量数据
- Confidentiality → Symmetric Encryption
- Integrity,Authentication → M.A.C
- TLS计算出下面两者的M.A.C
- Record Header,记录头
- Plaintext Data,明文数据
- TLS加密
- Plaintext Data
- MAC Digest
- Padding
- 发生的顺序非常重要,TLS执行MAC-then-Encrypt,先计算MAC,再加密
- 解密后才能检测到密文的修改
- No Integrity on Padding(因为Padding不包含在MAC内,意味着别人可以修改数据包里的Padding,而接收方检测不到)
- 产生不良后果
- Solution:Use AEAD Ciphers(其好处是同时做MAC和加密)
- AEAD (Authentication Encryption with Associated Data)do MAC-and-Encrypt
- AE = Integrity + Encryption
- AD = Integrity Only
- TLS 1.3 - all ciphers are AEAD
- TLS 1.2 - AES-GCM,ChaCha20-Ploy1305
- AEAD是未来
- 由 SSL/TLS 保护的批量数据
- Change Cipher Spec
参考文献
1、网站:Practical Networking.net:Practical TLS