第六章 传输层安全协议——SSLTLS(郑大网安自用)

SSL体系结构

image-20231225212032906

  • 从服务类型看,IP层是点到点,而传输层提供的是端到端的服务

  • 从服务质量看,传输层提高了可靠性,使上层应用不必关注可靠性问题,仅需解决自身应用功能相关的问题

  • 从协议依赖关系看,应用层协议直接构建于传输层之上

  • 协议栈层次上,SSL位于应用层和传输层之间

  • 使用SSL保护的高层应用报文需要封装在 SSL报文中投递,而所有SSL报文最终仍要封装在传输层报文中传递

SSLv3是一个协议套件,由4个协议组成:握手协议、记录协议、更改密码规范协议以及警告协议

高低两层结构

高层:SSL握手协议层(Handshake Protocol Layer)

握手层,负责通信实体在应用SSL协议传送数据之前的 相互验证身份、协商加密算法、生成密钥

包括:握手协议、更改密码规范协议以及警告协议

低层:SSL记录协议层(Record Protocol Layer)

记录层,负责封装各种高层协议,具体实施 压缩与解压缩、加密与解密、计算并验证MAC等安全相关操作

包括:记录协议

SSL协议流程

建立TCP连接

  • 整个通信过程由客户端发起,经过三次握手与服务器建立TCP连接
  • 连接成功后才进入SSL握手和数据传输阶段

image-20231225213729215

握手协商

  • 握手开始: 客户端(如浏览器)发起连接请求,并向服务器发送一个“ClientHello”消息。这个消息包含了客户端支持的SSL/TLS版本、加密算法列表、随机数以及其他相关信息。
  • 服务器响应: 服务器接收到“ClientHello”后,会回复一个“ServerHello”消息。这个消息中包含了服务器选择的SSL/TLS版本、加密套件(包括加密算法、密钥交换算法和消息认证码算法)、以及服务器生成的随机数。
  • 证书交换: 服务器通常会发送其数字证书,以证明其身份。证书中包含了服务器的身份信息以及一个由受信任的第三方机构(称为证书颁发机构CA)签名的公钥。
  • 密钥交换: 客户端验证服务器证书的有效性后,双方会进行密钥交换。这可能涉及到使用服务器证书中的公钥进行加密,或者使用特定的密钥交换算法(如RSA、DH或ECDH)生成共享的秘密密钥。
  • 生成会话密钥: 使用之前交换的信息和密钥,客户端和服务器都会**独立**地计算出一个对称会话密钥。这个密钥将用于后续的数据传输加密和解密,因为它比公钥加密更快且更高效。
  • 完成握手: 最后,客户端和服务器通过“ChangeCipherSpec”和“Finished”消息通知对方,从现在开始将使用新的会话密钥进行加密通信。服务器也会发送一个“Finished”消息作为回应,确认握手过程已完成。

image-20231225220335535

数据传输

image-20231225220405090

连接断开

image-20231225220419426

TCP连接断开

  • 客户端和服务器分别交互FIN和ACK报文,断开TCP连接(四次挥手)
  • 该连接的通信过程结束

image-20231225214844813

握手层及协议协议

image-20231227185539501

握手目的

  • 客户端与服务器就一组用于保护数据的算法达成一致
  • 确立与算法相关的密钥
  • 对服务器(客户端)进行认证

握手消息

  • ClientHello:握手发起
  • ServerHello:包含了服务器选择的算法
  • Certificate:包含了服务器的证书
  • ServerHelloDone:标志服务器这一握手阶段完成
  • ClientKeyExchange:发送预主密钥
  • Finished:包含握手消息的MAC

更改密码规范

更改密码规范,对应消息ChangeCipherSpec

  • 通信双方使用它互相通告将启用新的密码规范
  • 在客户端,该消息在ClientKeyExchange消息和finished消息之间
  • 在服务器端,它是收到客户端finished消息后发送的第一条消息

ChangeCipherSpec独立成一个协议?

  • 从功能上看,握手协议主要用于安全参数协商,ChangeCipherSpec只是一种消息通知机制,所以协议设计者并没有把它作为握手协议的一部分
  • SSL规范规定,不同类型的消息不能封装到同一条记录
    • ChangeCipherSpec为明文传输,而随后的Finished消息需要加密传输,二者不能放在一个记录
    • Finished消息是一条握手消息,将ChangeCipherSpec独立就可以保证这两条消息不会封装到一条记录

在传递完ChangeCipherSpec消息后,客户端和服务器还会各自发送一条Finished消息

Finished消息包含之前所有握手消息的**MAC**

作用:防止通过篡改握手消息实现降级攻击

Finished消息交互完成后,通信双方即可开始传送应用数据

警告协议Alert

消息类型

  • Alert消息是一种专门的消息类型,它在SSL/TLS记录协议中被单独标识和处理。

警告级别

  • Alert消息分为两个级别:Warning和Fatal。
    • Warning级别的警报表示一个非严重的问题,通信可以继续。
    • Fatal级别的警报表示一个严重错误或异常,接收到此类警报的一方应立即终止连接。

警告描述

  • 每个警报都由一个唯一的警报描述符标识,这些描述符定义在SSL/TLS协议规范中。
    • 例如,"Bad Record MAC"表示MAC校验失败,"Handshake Failure"表示握手过程失败等。

发送警报

  • 当一方在SSL/TLS连接中遇到问题时,它可以发送一个Alert消息给对方。
  • 警告消息通常伴随着关闭TCP连接的动作,特别是对于Fatal级别的警报。

处理警报

  • 接收到警报的一方应该根据警报的级别和描述采取适当的行动。
    • 对于Warning级别的警报,可能需要记录事件并继续通信。
    • 对于Fatal级别的警报,必须立即终止连接,并可能需要进行进一步的诊断和处理。

SSL会话恢复

  • SSL会话恢复是一种优化机制,用于减少重复握手过程带来的开销。在首次握手过程中,客户端和服务器会协商一个会话ID和相关的加密参数。
  • 当客户端在后续的连接中希望恢复之前的SSL会话时,它会在ClientHello消息中包含之前协商的会话ID。
  • 如果服务器能够识别并接受这个会话ID,那么双方就可以跳过大部分的握手过程,直接使用之前协商的加密参数进行通信,从而提高了效率。

记录层与数据处理

SSL数据单元的形成过程

image-20231226195413134

分片

  • 如果SSL记录的长度超过了最大传输单元(MTU),那么记录可能会被分割成多个片段进行发送。
  • 将应用层协议数据分割为大小适当的片段,以便封装在记录中传输
  • 每个分片最大2^14字节(16364B)

压缩

  • 压缩功能是可选的
  • 压缩过程为无损压缩
  • 压缩后的内容长度不能超过原有长度 2^14 +1024 字 节 , 即17408
  • SSLv3没有指定压缩算法,预设的算法是null

附加MAC

  • 为了确保数据的完整性并防止篡改,SSL/TLS协议会为每个数据片段计算一个MAC值。MAC是基于会话密钥和数据内容生成的一个固定长度的代码。它会被附加到数据片段的末尾,以便接收方能够验证数据的完整性和真实性。

加密

  • 对压缩后的数据和MAC做对称加密
  • 加密后的数据长度最多只能比加密前多1024B
  • 经过压缩和加密处理后,整个数据块长度不会超过(2^14+1024+1024)=18432 B

附加SSL报头

image-20231226200127214

  • 数据类型(Content type),8位:用来处理这个分片的上层协议
  • 主要版本号(Major Version),8位:所使用的SSL。协议的主要版本,对于SSLv3协议来说,这个字段值为3
  • 次要版本号(Minor Version),8位:表示使用的次要版本,对于SSLv3协议来说,这个字段值为0
  • 压缩后数据长度(Compressed length),16位:这个明文分片的长度(假如此分片已经过压缩,则为压缩后的长度)
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值