IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Wireshark抓包TLS协议栏显示版本不一致问题 -> 正文阅读

[网络协议]Wireshark抓包TLS协议栏显示版本不一致问题

问题

进行APP安全测试时遇到一个问题,在协议显示栏里一堆TLS1.2版本的包中**出现几个TLSv1,并且都是client hello包,**我们知道TLSv1是不安全的,那这是不是安全漏洞呢?
在这里插入图片描述

分析

下面为TLS协商过程:
在这里插入图片描述
1.客户端发送 生成随机数(client random)和支持的加密方法 给 服务器
第一个握手包,因为是握手过程,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件(Support Ciphers)和 SSL Version 等信息,因为密钥还没协商,这里还是使用明文传输,注意是明文传输,记录协议的数据载体就是明文的 SSL 握手协议。这里可能大家就会疑惑了,明文传输为什么wireshark协议栏会写TLS版本?稍后解释~~
在这里插入图片描述
这里要注意,数据包使用的TLS版本一定要点开报文里的Handshake Protocol下的version来判断,这个字段才真正代表客户端支持的最高版本TLS协议。下图可以看到,Protocol 列, 无论是 client hello 还是 server 的 response 都显示为 TLSv1.2, 其实如果查看 client 的详细版本, 会发现内部其实是 TLSv1.0. 如果不仔细查看, 可能会得出错误的结论。
在这里插入图片描述

2.服务器 返回server hello,包含
双方使用的加密方法、使用的tls版本号和一个随机数
加密套件(cipher suite):TLS+密钥交换算法+加密算法+认证算法
数字证书以及自身通过某种算法生成的参数
在这里插入图片描述

3.client根据server返回值(随机数,加密套件)交换密钥
在这里插入图片描述
服务端收到这个报文后,会使用自己的私钥解开这个随机数。在这个阶段过后,服务端和客户端都有三个随机数:客户端随机数、服务端随机数和预备主密钥。在服务端收到了 Client Key Exchange 消息后,两端都按照相应的算法生成了主密钥,加密密钥交换完成。
后续分别通知对方,后续消息会加密后发送。

下面解释为什么 client hello 显示为TLSv1
除了这个,在测试是还发现另外两个有趣的现象,抓包时看到client hello包为TLSv1,但是过了一会就不见了,发现原来的v1变成了1.2。
把抓到的包保存下来,过一段时间再次打开,原来的v1又不见了,变成了1.2。
为什么会出现这种情况呢? 这要回到 wireshark 的 SSL dissector 的源码, 从源码看, 对于这个 client hello 协议版本的判断, 是即根据 client 又根据 server 两边做判断的. 正常情况下, 两端都是一致的, 或能正常协商的情况下, 依照服务端版本取值的. 如果服务端没回应, 这个时候, 是以 client 端的 client hello 的版本做设置的. 我们这里出现的这个问题, 就是属于服务端有回应, 是不同的版本, 导致 wireshark 的显示为和 client 真正发的不一致的问题.
官方网站有个这样的问题: https://www.wireshark.org/lists/wireshark-users/201701/msg00004.html
在这里插入图片描述

结论

  1. client hello本来就是明文传输,TLSv1只是wireshark在根据 client 又根据 server 两边的结果填充;
  2. 在用wireshark抓包测试SSL、TLS版本的时候,应主要关注application data包是否采用TLS1.2以上版本,因为这装载的是数据。

其他知识补充

legacy version和supported_versions
在TLS1.3之前的版本中,legacy version用于进行版本协商,并代表客户端支持的最高版本。在TLS1.3中客户端在supported_versions扩展名中添加客户端所支持的TLS版本列表,与此同时,legacy_version必须设置为0x0303,即TLS1.2的版本号。
如图所示,这是一个TLS 1.3 的client hello,其version是0x0303,它有一个supported_versions的扩展字段,里面支持的最高协议是TLS1.3(0x0304).
在这里插入图片描述

参考资料:
https://www.tianxiaohui.com/index.php/Linux%E7%9B%B8%E5%85%B3/wireshark-TSL-1-0-%E6%98%BE%E7%A4%BA%E5%8D%8F%E8%AE%AE%E5%88%97%E4%B8%BA-1-2-%E7%9A%84%E9%97%AE%E9%A2%98.html
https://blog.csdn.net/qq_38240926/article/details/94405011
https://blog.csdn.net/qq_31442743/article/details/111666786

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:09:04  更:2022-07-03 11:09:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:15:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码