SSL/TLS介绍以及wireshark抓包TLS Handshake报文

news2024/11/26 16:24:22

文章目录

    • 1.概念
      • 1.1 SSL/TLS发展历史
      • 1.2 TLS两个阶段
      • 1.3 TLS报文头
    • 2.TLS Handshake
      • 2.1 Handshake具体过程
        • 2.1.1 单向认证和双向认证
        • 2.1.2 复用TLS协商结果
          • Session Identifier(会话标识符)
          • Session Ticket(会话票据)
      • 2.2 Handshake报文格式
    • 3. wireshark抓取TLS报文
      • 3.1 第一次握手
      • 3.2 第二次握手
      • 3.3 第三次握手
      • 3.4 第四次握手

1.概念

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是一种安全协议,用于在计算机网络上实现加密通信。SSL最初由美国Netscape开发,随后发展为TLS,并得到了广泛应用,成为互联网上保护通信安全的标准协议。

TLS 位于 TCP 之上(也有基于 UDP 的,称为DTLS,这里不讨论它),如图所示。
在这里插入图片描述

SSL/TLS是在应用层和传输层之间的一个安全协议,通信的双方在进行通信前需要握手,通过在通信的两端建立一个安全的通道,保护数据在传输过程中的安全性。以下是SSL/TLS提供的几个重要的安全功能:

  1. 机密性(Confidentiality): SSL/TLS使用加密算法对数据进行加密,防止未经授权的第三方窃取和读取敏感信息。只有身份验证通过的终端才能解密数据。
  2. 完整性(Integrity): SSL/TLS使用消息认证码(MAC)或哈希函数来确保数据在传输过程中没有被篡改或损坏,接收方可以验证数据的完整性,确保数据在传输期间没有被篡改。
  3. 身份验证(Authentication): SSL/TLS提供了一种机制,用于验证通信的两端的身份。这可以防止中间人攻击和伪造身份的风险。通常使用数字证书来验证服务器和客户端的身份。
  4. 抗重放攻击(Resistance to Replay Attacks): SSL/TLS使用时间戳和随机数来抵御重放攻击。每个通信会话都用独特的随机数,从而防止攻击者重复使用已经捕获到的通信数据。
  5. 前向保密(Forward Secrecy): SSL/TLS支持前向保密,即使长期密钥泄漏,过去的通信数据也不会被攻击者解密。这是通过动态生成临时会话密钥并定期更换来实现的。

1.1 SSL/TLS发展历史

在这里插入图片描述

1.2 TLS两个阶段

TLS协议可分为两个阶段:

  • 握手(Handshake)阶段,目的是通信双方约定好在数据传输阶段使用的加密算法及密钥(为效率考虑,在数据传输阶段会使用对称密钥算法);
  • 数据传输阶段,即发送到网络前加密数据,从网络收到数据后解密数据。

1.3 TLS报文头

在这里插入图片描述

  • 第1字节是类型(目前有4种类型):
 Record Type Values       dec      hex
 -------------------------------------
 CHANGE_CIPHER_SPEC        20     0x14
 ALERT                     21     0x15
 HANDSHAKE                 22     0x16
 APPLICATION_DATA          23     0x17
  • 第2-3字节是版本(目前有4种版本):
 Version Values            dec     hex
 -------------------------------------
 SSL 3.0                   3,0  0x0300
 TLS 1.0                   3,1  0x0301
 TLS 1.1                   3,2  0x0302
 TLS 1.2                   3,3  0x0303
  • 第4-5字节是长度(不包含报文头本身长度)

2.TLS Handshake

2.1 Handshake具体过程

在这里插入图片描述

  • 第1步:客户端发送ClientHello报文。作用是告诉服务器,本客户端所支持的TLS协议版本,以及支持的加密算法等。
  • 第2步:服务器发送ServerHello报文。主要是告诉客户端,服务器选择了一个它认为安全的,且双方都支持的加密算法;如果服务器认为客户端所支持的加密算法都不安全,则服务器可以发送一个ALERT报文。
  • 第3步:服务器发送Certificate报文。其主要作用是服务器发送自己的证书给客户端。
  • 第4步:服务器发送ServerKeyExchange。其作用是提供一些信息,以便双方有足够的信息来约定一个数据传输阶段所使用的对称密钥算法的密钥。这个报文是可选的,如果使用Diffie-Hellman方式来约定密钥,则这个是必须的;如果是RSA方式来约定密钥,它可以省略,参见后面介绍的ClientKeyExchange报文。
  • 第5步:服务器发送CertificateRequest。作用是开启”双向认证(Mutual authentication)“模式,即不仅客户端要验证服务器,而且服务器还要验证客户端。这种方式在https网站中很少使用,如果对https网站进行抓包,一般不会有这个报文。
  • 第6步:服务器发送ServerHelloDone。服务器发送此消息以指示握手消息的结束。
  • 第7步:客户端发送Certificate报文(仅当客户端收到了CertificateRequest时才发送,即服务器开启了双向认证)。主要作用是客户端发送自己的证书给服务器。
  • 第8步:客户端发送ClientKeyExchange报文。其主要作用是提供一些信息,以便双方有足够的信息来约定一个数据传输阶段所使用的对称算法的密钥。如RSA方式,则客户端生成一个对称算法的密钥后,使用服务器的公钥加密传送给服务器。如果是Diffie-Hellman方式,则传送必要信息以便双方可以按约定方式生成一个密钥。
  • 第9步:客户端发送CertificateVerify报文(仅当客户端收到了CertificateRequest时才发送,即服务器开启了双向认证)。主要作用是客户端发送一段它签名的信息给服务器,这样服务器使用客户端的公钥就可以验证签名,从而验证客户端。
  • 第10步:客户端发送ChangeCipherSpec报文,告诉服务器你可以使用加密模式了。注:ChangeCipherSpec报文不属于Handshake报文,它是TLS顶级报文,存在于TLS报文头中。
  • 第11步:客户端发送Finished报文,告诉服务器我准备好加密通信了。
  • 第12步:服务器发送ChangeCipherSpec报文,告诉客户端你可以使用加密模式了。
  • 第13步:服务器发送Finished报文,告诉客户端我准备好加密通信了。至此,握手结束。
2.1.1 单向认证和双向认证

握手阶段,如果服务器发送了CertificateRequest,就意味着开启”双向认证“。和单向认证相比,”双向认证“在握手阶段多了下面3种报文:

  • 服务器发送的 CertificateRequest
  • 客户端发送的 CertificateCertificateVerify
2.1.2 复用TLS协商结果

当客户端和服务器在TLS握手过程中建立了一个安全连接后,可以通过复用TLS协商结果来提升后续通信的效率和性能。这通常可以通过两种方式来实现:Session Identifier 和 Session Ticket。

Session Identifier(会话标识符)

Session Identifier 是一种简单的方式,它使用一个唯一的标识符来引用之前的TLS会话。

  1. 建立会话:在TLS握手过程中,如果服务器支持会话复用,它会在ServerHello消息中包含一个Session Identifier。客户端可以在以后的请求中使用这个标识符来复用会话。
  2. 客户端发送请求:客户端在HTTP请求中包含之前建立的Session Identifier。
  3. 服务器检查会话:当服务器收到请求时,它会检查Session Identifier是否有效。如果有效,服务器可以使用之前协商的加密参数和密钥,而不需要进行完整的TLS握手。

Session Identifier 的优点是它很简单,但它的缺点是,如果服务器重新启动或者会话超时,之前的Session Identifier就会失效,需要重新建立会话。

Session Ticket(会话票据)

Session Ticket 是一种更灵活的方式,它允许会话信息在服务器重启后仍然有效。

  1. 生成会话票据:在TLS握手完成后,服务器可以将会话信息加密并存储在一个会话票据中,然后发送给客户端。
  2. 客户端发送请求:客户端在HTTP请求中包含会话票据。
  3. 服务器解密会话票据:当服务器收到请求时,它可以解密会话票据并使用其中的会话信息来恢复会话。

Session Ticket 的优点是它可以在服务器重启后仍然保持会话的有效性,但需要确保会话票据的安全性,以防止被恶意利用。

总的来说,Session Identifier 是一种简单且有效的会话复用方式,但在某些情况下可能会失效。Session Ticket 提供了更灵活的会话复用机制,可以在服务器重启后仍然保持会话的有效性。服务器可以根据具体情况选择使用其中一种或两者结合使用。

2.2 Handshake报文格式

                         |
                         |
                         |
       Record Layer      |  Handshake Layer
                         |                              |                              |
                         |                              |                              |
+----+----+----+----+----+----+----+----+----+------ - -+----+----+----+----+------ - -+ ......
| 22 |    |    |    |    |    |    |    |    |          |    |    |    |    |          |
|0x16|    |    |    |    |    |    |    |    |message   |    |    |    |    |message   |
+----+----+----+----+----+----+----+----+----+------ - -+----+----+----+----+------ - -+
  /             /--/--/  | \    \----\-----\            | \    \----\-----\            |
 /                /      |  \         \                    \         \
type: 22         /       |   \     handshake message length \    handshake message length
                /             type                          type
               /
         length: arbitrary (up to 16k)


 Handshake Type Values    dec      hex
 -------------------------------------
 HELLO_REQUEST              0     0x00
 CLIENT_HELLO               1     0x01
 SERVER_HELLO               2     0x02
 CERTIFICATE               11     0x0b
 SERVER_KEY_EXCHANGE       12     0x0c
 CERTIFICATE_REQUEST       13     0x0d
 SERVER_HELLO_DONE         14     0x0e
 CERTIFICATE_VERIFY        15     0x0f
 CLIENT_KEY_EXCHANGE       16     0x10
 FINISHED                  20     0x14

共有10种类型的Handshake报文,多个Handshake报文可以组合成一个TLS Record,上面演示中就有两个Handshake报文。具体可参考:10种 Handshake报文

具体可参考:

3. wireshark抓取TLS报文

以ping https://www.csdn.net为例
在这里插入图片描述

因为这是一次单向认证的Handshake过程,故比较简单。

3.1 第一次握手

在这里插入图片描述

重点可以关注红框里的内容,ClientHello报文告诉了服务器端,客户端支持的TLS协议的最高版本(TLS 1.2)以及支持的加密算法

3.2 第二次握手

在这里插入图片描述

服务器给客户端返回的消息注意关注TLS协议版本,服务器选择的加密算法(TLS_AES_128_GCM_SHA256),以及Change Cipher Spec报文(告诉客户端可以开始加密通信了)。

3.3 第三次握手

在这里插入图片描述

3.4 第四次握手

主要进行数据传输,不进行赘述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验篇——根据群体经纬度提取环境数据(数据降维)

实验篇——根据群体经纬度提取环境数据(数据降维) 文章目录 前言一、先导二、R语言实现2.1. 分气温、降水、光照、风速、蒸汽压划分数据集2.2. 对每个数据集降维处理2.2.1. 气温2.2.2. 降水2.2.2. 光照2.2.3. 风速2.2.4. 蒸汽压2.2.5.定义一个函数&#…

【小沐学前端】Node.js实现UDP和Protobuf 通信(protobuf.js)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子:awesome.proto 结语 1、简介 1.1 node Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 Node.js 是一个开源…

基于 SpringBoot+Vue 的教室人事档案管理系统

1 简介 教师人事档案管理系统利用信息的合理管理,动态的、高效的、安全的实现了教师的各种需求,改变了传统的网上查看方式,使教师可以足不出户的在线查看最适合自己个人档案、奖惩信息、档案变动、培训报名或者新闻资讯。 1、教师后台功能模…

闪存工作原理

前言 1、闪存类型 闪存有两种分类,NAND型闪存主要用于存储 2、MOS的特性 MOS管的三个引脚分别是Gate(G)、Source(S)和Drain(D)。Gate(G)引脚是晶闸管的控制引脚&…

Qt::图层框架-图片图层-序列图层-QGraphicsPixmapItem

二维矢量动画智能制作软件开发合集 链接:软件开发技术分享及记录合集 个人开发二维矢量动画智能制作软件界面如下: 目录 一、图片序列图层原理 二、图片序列图层代码实现 三、图片序列图层软件测试视频 结束语 一、图片序列图层原理 本软件的11种…

Sentinel学习(2)——sentinel的使用,引入依赖和配置 对消费者进行流控 对生产者进行熔断降级

前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍sentinel的使用&#x…

后端各层的部署开发

目录 一、创建数据库 二、entity层 三、mapper层 四、service层 五、controller层 一、创建数据库 CREATE TABLE user (id bigint NOT NULL AUTO_INCREMENT COMMENT id,name varchar(10) DEFAULT NULL COMMENT 姓名,sex varchar(5) DEFAULT NULL COMMENT 性别,phone varcha…

NLP 03(LSTM)

一、LSTM LSTM (Long Short-Term Memory) 也称长短时记忆结构,它是传统RNN的变体,与经典RNN相比: 能够有效捕捉长序列之间的语义关联缓解梯度消失或爆炸现象 LSTM的结构更复杂,它的核心结构可以分为四个部分去解析: 遗忘门、输入门、细胞状态、输出门 LSTM内部结构…

如何在Qt中引入Network模块

2023年10月1日,周日凌晨 如果用的是CMake find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) 如果用的是qmake QT network

zemax光线光扇图

光线光扇图: 过光瞳Y轴的光束剖面,称为子午光扇; 过光瞳X轴的光束剖面,称为弧矢光扇。 可以显示作为光瞳坐标函数的光线像差。 对于视场内任意一点,取其子午面内的光线,以光线在光阑面上的透射点坐标为横…

IDEA 使用

目录 Git.gitignore 不上传取消idea自动 add file to git撤销commit的内容本地已经有一个开发完成的项目,这个时候想要上传到仓库中 Git .gitignore 不上传 在项目根目录下创建 .gitignore 文件夹,并添加内容: .gitignore取消idea自动 add…

毛玻璃态卡片悬停效果

效果展示 页面结构组成 页面的组成部分主要是卡片。其中卡片的组成部分主要是包括了图片和详情。 卡片的动效是鼠标悬停在卡片上时,图片会移动到左侧,并且图片是毛玻璃效果。所以我们在布局的时候图片会采用绝对布局。而详情则是基础布局。 CSS3 知识…

PS 切片工具 选择切片 切片存储

上文 PS 透视裁剪工具 中 我们简单讲述了透视裁剪工具 今天 我们来讲他后面的切片工具 首先 他的用途还是很多的 例如 你有一个很大的图片 其中包括 轮播 导航 主题内容 但他们都在一个图片上 你就可以用切片工具 将完整的图片切成多个部分 这里 我们选择了切片工具 光标也会…

Drift plus penalty 漂移加惩罚Part1——介绍和工作原理

文章目录 正文Methodology 方法论Origins and applications 起源和应用How it works 它是怎样工作的The stochastic optimization problem 随机优化问题Virtual queues 虚拟队列The drift-plus-penalty expression 漂移加惩罚表达式Drift-plus-penalty algorithmApproximate sc…

OpenCV之分水岭算法(watershed)

Opencv 中 watershed函数原型: void watershed( InputArray image, InputOutputArray markers ); 第一个参数 image,必须是一个8bit 3通道彩色图像矩阵序列,第一个参数没什么要说的。关键是第二个参数 markers,Opencv官方文档的说…

Python函数语法与面向对象回顾(精华)

目录 函数 语法定义 返回值 位置参数 关键字传递 默认参数 函数参数中 / 作用 lambda表达式 递归函数 面向对象 初识对象 继承 构造函数 ​编辑 多态 "私有属性" 动态 类方法和静态方法 函数 语法定义 pyhon的函数定义语法是 def 函数名(参数…

【Python实战】-- 按条件提取所有目录下所有Excel文件指定行数据

系列文章目录 文章目录 系列文章目录前言一、背景二、使用步骤1.源码 总结 前言 一、背景 有多个目录,每个目录下有若干Excel文件,我们要提取每个Excel里面指定的行数据: 目录如下: 注:目录数量、名称不限&#xff0c…

Egg使用jwt拦截jtoken验证

安装 npm install egg-jwt注册插件 在config文件夹子下 plugin,js下 use strict;module.exports {//mysqlmysql: {enable: true,package: egg-mysql},//jwtjwt: {enable: true,package: egg-jwt} };使用中间件 在app文件下创建 middleware 文件夹 在middleware 文件下创建…

Cannot resolve MVC view ‘xxx‘

这是在springboot下通过controller访问templates目录下的静态文件&#xff08;Hello.html)报的错误 原因&#xff1a;缺少thymeleaf依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</ar…

初级篇—第四章聚合函数

文章目录 聚合函数介绍聚合函数介绍COUNT函数AVG和SUM函数MIN和MAX函数 GROUP BY语法基本使用使用多个列分组WITH ROLLUP HAVING基本使用WHERE和HAVING的对比开发中的选择 SELECT的执行过程查询的结构SQL 的执行原理 练习流程函数 聚合函数介绍 聚合函数作用于一组数据&#x…