【问题概述】

https流量基于ssl/tls加密,无法直接对报文进行分析。

【解决方案】

方案1 —— 利用“中间人攻击”的代理方式抓包分析。整个方案过程比较简单,这里不赘述,大致如下(详细可参见:https://www.cnblogs.com/liulinghua90/p/9109282.html):

    

方案2 —— 基于Chrome/Firefox等浏览器工作过程中需要在PC本地存储RSA密钥协商过程日志数据的原理基础,同时将协商过程的日志文件共享给wireshark从中提取过程密钥信息,从而得以解密。

  首先,咱们回顾下https协议交互的过程,大致如下:

    

  通过上面的协商过程可以看出,此次请求和响应使用的加密套件cipher suit是通过Client和Server双方协商出来的,并且整个协商由Client端的ClientHello发起。

  然后,基于原理分析,咱们可以通过以下三点使得wireshark对https的抓包、解密分析得以实现:

    1. 修改PC系统对cipher suit的支持情况,使其只支持基于RSA实现的一系列套件;
    2. 修改PC系统环境变量,使得wireshark得以共享协商过程的日志文件;
    3. 修改wireshark相关配置,使其能够实时提取到协商过程的密钥信息。   

  接下来,咱们详细总结下每个配置步骤的注意事项:

      1)修改PC系统对cipher suit的支持情况,使其只支持基于RSA实现的一系列套件:

      1. Win10下 Win + R 后的对话框中输入 gpedit.msc 打开“本地组策略编辑器”
      2. 按照以下路径找到“SSL 密码套件”: 计算机配置--管理模板--网络--SSL配置设置--SSL 密码套件
      3. 默认“未配置”,修改为“已启用”。此时能够看到系统支持的密码套件及其优先级顺序(TLS_AES_256_GCM_SHA384、TLS_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_DHE_RSA_WITH_AES_256_GCM_SHA384、TLS_DHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_NULL_SHA256、TLS_RSA_WITH_NULL_SHA、TLS_PSK_WITH_AES_256_GCM_SHA384、TLS_PSK_WITH_AES_128_GCM_SHA256、TLS_PSK_WITH_AES_256_CBC_SHA384、TLS_PSK_WITH_AES_128_CBC_SHA256、TLS_PSK_WITH_NULL_SHA384、TLS_PSK_WITH_NULL_SHA256)
      4. 去除抓包方案中不支持的AES、PSK、ECDHE_ECDSA等诸多密码套件只保留RSA相关即可(TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_NULL_SHA256、TLS_RSA_WITH_NULL_SHA) 
      5. 应用,确定(Tips:实验结束后还原系统密码套件,否则后续可能出现上网异常)

      2)修改PC系统环境变量,使得wireshark得以共享协商过程的日志文件;

      1. 按照以下路径找到“系统变量”: 控制面板--系统和安全--系统--高级系统设置--环境变量,具体配置如图所示:
      2. Chrome访问下百度主页,检查下此时系统变量里面的日志文件中成功记录了一些密钥协商的过程信息

      

      3)修改wireshark相关配置,使其能够实时提取到协商过程的密钥信息:

      1. 按照以下路径找到“(Pre)-Master-Secret log filename”: 编辑--首选项--协议--SSL--(Pre)-Master-Secret log filename
      2. 选择刚才环境变量中设置的文件路径和文件名,保存 

          

  最后,咱们看看抓包解密后的效果:

wireshark如何抓取分析https的加密报文的更多相关文章

  1. Wireshark抓包分析HTTPS与HTTP报文的差异

    一.什么是HTTPS: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换 ...

  2. 使用wireshark 抓取 http https tcp ip 协议进行学习

    使用wireshark 抓取 http https tcp ip 协议进行学习 前言 本节使用wireshark工具抓包学习tcp ip http 协议 1. tcp 1.1 tcp三次握手在wire ...

  3. WireShark如何抓取本地localhost的包

    今天将自己的电脑既作为客户端又作为服务端进行一个程序的测试,想着用WireShark来抓包分析一下问题,但由于WireShark只能抓取经过电脑网卡的包,由于我是使用localhost或者127.0. ...

  4. Wireshark数据抓包分析——网络协议篇

                   Wireshark数据抓包分析--网络协议篇     watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...

  5. fiddler抓取手机https请求详解

    前言: Fiddler是在 windows下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析,fiddler默认只能抓取http请求,需要配置和 ...

  6. 数据抓取分析(python + mongodb)

    分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...

  7. python数据抓取分析(python + mongodb)

    分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...

  8. Jmeter Web 性能测试入门 (二):Fiddler 抓取 http/https 请求

    jmeter自带了拦截request的功能,并且也有对应的tool:badboy 可以用.但由于我经常做移动端的项目,个人还是习惯用fiddler来收集request. 官网下载并安装Fiddler ...

  9. charles之抓取浏览器https请求

    用charles抓取浏览器https的包时,请求显示为unknown,且请求和响应数据乱码,本篇介绍如何抓取正常响应的https请求 目录 1.安装charles 2.安装证书.添加域名 3.抓包 1 ...

随机推荐

  1. spring再学习之基本概念

    二.spring之IOC与DI 注入的方式: set方法注入: 构造方法注入: 字段注入: 注入类型: 值类型注入:8中基本类型 引用类型注入: BeanFaactory是原始接口:功能比较单一. A ...

  2. docker-compose -----单机多容器管理

    Compose是用于定义和运行多容器Docker应用程序的工具.通过Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用一个命令,就可以从配置中创建并启动所有服务. Docker-C ...

  3. Linux 驱动框架---驱动中的时间相关

    内核中的时间 Linux 系统内核对于时间的管理依赖于硬件,硬件按一定的周期产生中断,周期由内核的一个配置值HZ决定在系统启动时会将定时器配置为HZ值指定的频率产生中断:同时内核和维护一个64位(X8 ...

  4. JVM系列之一 JVM的基础概念与内存区域

    前言 作为一名 Java 语言的使用者,学习 JVM 有助于解决程序运行过程中出现的问题.写出性能更高的代码. 可以说:学好 JVM 是成为中高级 Java 工程师的必经之路. 有感于从未整理归纳 J ...

  5. DB-Engines Ranking : Redis, MongoDB, MySQL

    DB-Engines Ranking http://db-engines.com/en/ranking The DB-Engines Ranking ranks database management ...

  6. ES2021 & Pipeline operator (|>) / 管道运算符 |>

    ES2021 & Pipeline operator (|>) / 管道运算符 |> demo "use strict"; /** * * @author xg ...

  7. CSS & SASS & SCSS & less

    CSS & SASS & SCSS & less less vs scss https://github.com/vecerek/less2sass/wiki/Less-vs. ...

  8. TypeScript 如何编写类库声明文件 .d.ts

    TypeScript 如何编写类库声明文件 .d.ts how to write a d.ts file declaration-files/ https://www.typescriptlang.o ...

  9. 线上 S1 故障是什么, 线上 S1 故障, 运维故障分级, 运维, 故障分级, P1 级别故障, 故障, P1 , S1

    线上 S1 故障是什么 线上 S1 故障, 运维故障分级, 运维, 故障分级, P1 级别故障, 故障, P1 , S1 故障复盘 https://time.geekbang.org/column/a ...

  10. qt 获取窗口句柄的线程id和进程id GetWindowThreadProcessId

    int lpdwProcessId; int id = GetWindowThreadProcessId((HWND)0x707d6, (LPDWORD)&lpdwProcessId); qD ...