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

文章目录

    • 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     0x14ALERT                     21     0x15HANDSHAKE                 22     0x16APPLICATION_DATA          23     0x17
  • 第2-3字节是版本(目前有4种版本):
 Version Values            dec     hex-------------------------------------SSL 3.0                   3,0  0x0300TLS 1.0                   3,1  0x0301TLS 1.1                   3,2  0x0302TLS 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     0x00CLIENT_HELLO               1     0x01SERVER_HELLO               2     0x02CERTIFICATE               11     0x0bSERVER_KEY_EXCHANGE       12     0x0cCERTIFICATE_REQUEST       13     0x0dSERVER_HELLO_DONE         14     0x0eCERTIFICATE_VERIFY        15     0x0fCLIENT_KEY_EXCHANGE       16     0x10FINISHED                  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.mzph.cn/news/94666.shtml

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

相关文章

基于j2ee的交通管理信息系统/交通管理系统

摘 要 随着当今社会的发展,时代的进步,各行各业也在发生着变化,比如交通管理这一方面,利用网络已经逐步进入人们的生活。传统的交通管理,都是工作人员线下手工统计,这种传统方式局限性比较大且花费较多。计…

全志ARM926 Melis2.0系统的开发指引①

全志ARM926 Melis2.0系统的开发指引① 1. 编写目的2. Melis2.0 系统概述3. Melis2.0 快速开发3.1. Melis2.0 SDK 目录结构3.2. Melis2.0 编译环境3.3. Melis2.0 固件打包3.4. Melis2.0 固件烧录3.5.串口打印信息3.6. Melis2.0 添加和调用一个模块3.6.1. 为什么划分模块&#xf…

软件或游戏提示msvcp120.dll丢失的5种常用解决方法,msvcp120.dll文件全面解析

在当今数字化的时代,我们的生活已经离不开各种软件和游戏。然而,有时候我们可能会遇到一些技术问题,比如“软件或游戏提示msvcp120.dll丢失”。这个问题对于许多人来说可能很棘手,但是只要掌握了正确的解决方法,就能轻…

【现代机器人学】学习笔记十四:中文版印刷/翻译勘误

首先声明,这个印刷/勘误并非经过官方的认可,只是我个人的粗浅的理解。如果内容有误,恳请大家谅解指正。 其实有的并不算错,只是我个人认为不太准确,在我学习过程中产生了一些小疑惑和误解。 都是一些小毛病&#xff…

OpenCV 14(角点特征Harris和Shi-Tomasi)

一、角点 角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在三维场景重建运动估计,目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路…

华为云云耀云服务器L实例评测|Ubuntu云锁防火墙安装搭建使用

华为云云耀云服务器L实例评测|Ubuntu安装云锁防火墙对抗服务器入侵和网络攻击 1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格,满足您对成本、性能及技术创新的诉求。云耀云服务器L…

关于字符拼接

当然,以下是加入了幽默注释的代码和对应的逻辑树: # 提示用户输入input和txt内容,期待用户真有输入 input_text input("请输入input文本:") # 好了,快点输入吧 txt_text input("请输入txt文本&#…

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结…

微信小程序button按钮去除边框去除背景色

button边框 去除button边框 在button上添加plain“true”在css中添加button.avatar-wrapper {background: none}用于去除button背景色在css中添加button.avatar-wrapper[plain]{ border:0 }用于去除button边框

机器学习——KNN算法流程详解(以iris为例)

、 目 录 前情说明 问题陈述 数据说明 KNN算法流程概述 代码实现 运行结果 基于可视化的改进 可视化代码 全部数据可视化总览 分类投票结果 改进后最终代码 前情说明 本书基于《特征工程入门与入门与实践》庄家盛 译版P53页K最近邻(KNN)算…

《C和指针》笔记33:指针数组

除了创建整型数组一样,也可以声明指针数组。 int *api[10];为了弄清这个复杂的声明,我们假定它是一个表达式,并对它进行求值。下标引用的优先级高于间接访问,所以在这个表达式中,首先执行下标引用。因此,a…

【APUE】文件系统 — 类 du 命令功能实现

一、du命令解析 Summarize disk usage of the set of FILEs, recursively for directories. du 命令用于输出文件所占用的磁盘空间 默认情况下,它会输出当前目录下(包括该目录的所有子目录下)的所有文件的大小总和,以 1024B 为单…

MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项、原理、搭建步骤

1. 日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的&a…

Scala第十七章节

Scala第十七章节 scala总目录 文档资料下载 章节目标 了解集合的相关概念掌握Traversable集合的用法掌握随机学生序列案例 1. 集合 1.1 概述 但凡了解过编程的人都知道程序 算法 数据结构这句话, 它是由著名的瑞士计算机科学家尼古拉斯沃斯提出来的, 而他也是1984年图灵…

Java数据结构————优先级队列(堆)

一 、 优先级队列 有些情况下,操作的数据可能带有优先级, 一般出队列时,可能需要优先级高的元素先出队列。 数据结构应该提供两个最基本的操作, 一个是返回最高优先级对象, 一个是添加新的对象。 这种数据结构就是优…

使用华为eNSP组网试验⑷-OSPF多区域组网

今天进行了OSPF的多区域组网试验,本来这是个很简单的操作,折腾了好长时间,根本原因只是看了别人写的配置代码,没有真正弄明白里面对应的规则。 一般情况下,很多单位都使用OSPF进行多区域的组网,大体分为1个…

CUDA C编程权威指南:1-基于CUDA的异构并行计算

什么是CUDA?CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA(英伟达)提出的并行计算架构,结合了CPU和GPU的优点,主要用来处理密集型及并行计算。什么是异构计算&#xff1…

[架构之路-229]:计算机体硬件与系结构 - 计算机系统的矩阵知识体系结构

目录 一、纵向:目标系统的分层结构 1.1 目标系统的架构 1.2 网络协议栈 1.3 计算机程序语言分层 二、横向(构建目标系统的时间、开发阶段):软件工程 三、二维矩阵知识体系结构 一、纵向:目标系统的分层结构 1.1…

mysql主从复制和读写分离

在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求 配置多台主从数据库服务器以实现读写分离 所以要做主从服务器,保证安全性 做一写一读服务器,将提升性能 1、什么是读写分离 …

隐私交易成新刚需,Unijoin 凭什么优势杀出重围?

随着区块链技术的普及和发展,全球加密货币用户在持续增长,根据火币研究院公布的数据,2022年全球加密用户已达到 3.2亿人,目前全球人口总数超过了 80亿,加密货币用户渗透率已达到了 4%。 尤其是在 2020 年开启的 DeFi 牛…