首页 > 其他分享 >Wireshark解密HTTPS流量的两种方法

Wireshark解密HTTPS流量的两种方法

时间:2022-10-28 18:22:51浏览次数:64  
标签:随机数 报文 解密 密钥 HTTPS 服务器 Wireshark 客户端

原理

  我们先回顾一下SSL/TLS的整个握手过程:

  • Clienthello:发送客户端的功能和首选项给服务器,在连接建立后,当希望重协商、或者响应服务器的重协商请求时会发送。
    • version:客户端支持的最佳协议版本
    • Random:共32字节,28字节随机数,4字节额外信息,受客户端时钟影响(为了避免浏览器指纹采集,现在一般会对4字节时钟做扭曲)
    • Session ID:32字节随机数,用于和服务器重建会话,为空表示新建会话
    • cipher suit:客户端支持的所有密码套件,按优先级排列
    • Compression:客户端支持的压缩算法,默认无压缩
    • Extensions:由任意数量的扩展组成,携带额外数据
  • ServerHello:
    • 选择客户端提供的参数反馈客户端
    • 服务器无需支持客户端支持的最佳版本,如果服务器不支持客户端版本,可以提供其他版本以期待客户端可以接受
  • Certificate:
    • 用于携带服务器X.509证书链
    • 主证书必须第一个发送,中间证书按照正确的顺序跟在主证书之后
    • 服务器必须保证发送的证书和选择的算法套件一致
    • Certificate消息时可选的
  • ServerKeyExchange: 携带密钥交换的额外数据,取决于加密套件
  • ServerHelloDone:服务器已将所有预计的握手消息发送完毕
  • ClientkeyExchange:携带客户端为密钥交换提供的信息
  • ChangeCipherSpec:发送端已取得用以连接参数的足够的信息
  • Finish:握手完成,消息内容加密,双方可以交换验证,整个握手完整性所需的数据
    • 算法:verrify_data = PRF(master_secret , finished_label,hash(handshake_message))

  要解密HTTPS流量,需要得到加密密钥,加密密钥由主密钥、客户端随机数、服务器随机数生成。由上述握手过程可知,客户端随机数和服务器随机数在双方握手消息中传递,而主密钥(master_secret)则由预主密钥(pre_master_secret)结合两个随机数生成。预主密钥通过密码套件中的密钥交换算法进行交换(DH、RSA)。

  因此,通过Wireshark解密HTTPS,可以从两个地方下手:1、密钥交换算法选择RSA,然后提取服务器的私钥,将私钥导入Wireshark,通过Wireshark解密密钥交换过程中传递的预主密钥,再结合之前的客户端和服务器随机数生成主密钥,进一步生成加密密钥,即可解密后续抓取到的加密报文。2、直接从客户端提取预主密钥,结合客户端和服务器随机数生成加密密钥,实现对加密报文的解密。

  下面演示两种方法解密HTTPS流量。

方法一

  从服务器上导出带私钥的P12格式的证书,或者直接导出服务器的私钥。

  捕获从TCP三次握手开始的完整报文:

       

   可以看到此时的报文是被TLS加密的,无法看到具体的报文内容。

  点击编辑——>首选项——>协议——>SSL(有的版本只有TLS),导入RSA key:

  

  由于通过DH方法交换的密钥不会在中间传递,所以这种方法只能解密通过RSA交换的密钥。

  导入服务器证书:

  

  点击ok后,Wireshark会对捕获的报文进行解密:

  

  报文被成功解密,可以直观的看到HTTP报文的请求和响应。

第二种

  通过设置环境变量截取浏览器的pre_master_secret,进而实现解密HTTPS的目的。

  环境变量中新建用户变量SSLKEYLOGFILE=路径sslkey.log文件,之后再wireshark中ssl配置中制定该文件位置即可。

  

  点击编辑>首选项>protocol>ssl:

  

  即可解密浏览器的访问流量:

  

标签:随机数,报文,解密,密钥,HTTPS,服务器,Wireshark,客户端
From: https://www.cnblogs.com/xiedy001/p/16837020.html

相关文章

  • 加解密EncryptUtils
    usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Security.Cryptography;usingSystem.Text;namespaceZB.Queue......
  • selenium模拟登录使用https协议的网址时报错的解决方法
    公司的测试地址是https协议的,使用使用默认的selenium登录时会出现安全提示的报错,导致无法模拟自动化。对此,笔者通过网上查找资料和实践,发现只需要简单的修改一下浏览器驱......
  • Wireshark的ARP协议
    1.ARP协议概述ARP协议全称为(Address Resolution Protocol)翻译过来就是地址解析协议,是一个通过解析网络层地址来寻找数据链路层地址的网络传输协议,他在IPv4中占着......
  • 【拥有新时代的通信协议,引领云原生迈向更高的舞台】解密Dubbo3是如何从微服务升华到云
    感谢2020云原生微服务给我带来了云原生的希望!Dubbo3拥抱云原生升级总体路线我们会侧重于下面红色填充的部分,针对于Dubbo3云原生技术的领域的探索和研究:看Dubbo3带来了什么?要......
  • Wireshark的基本配置
    1.打开Wireshark的首页,双击指定的网卡接口进行数据包捕获      2.数据包捕获页面           3.混杂模式和普通模式1.混杂模式......
  • Wireshark的下载安装
    1.下载1. 打开网址 http://www.wireshark.org,进入Wireshark官网,点击download图标,如图所示。         2.根据不同的系统下载响应的安装......
  • 拉取镜像报Error response from daemon: Get https://: http: server gave HTTP respo
    现象:拉取镜像报Errorresponsefromdaemon:Gethttps://:http:servergaveHTTPresponsetoHTTPSclientharbor默认是https协议的,如果想要通过http协议拉取harbor的......
  • HTTPS & PKI
    参考​​5分钟让你知道什么是PKI​​​​认证机构CA及其在我国的发展​​......
  • http和https的区别
    http也就是超文本传输协议,是互联网上应用最为广泛的一种传输协议,是以明文方式发送消息的,所以有不发分子截取了web浏览器和服务器之间的传输报文,就可以直接获得信息,可想而知......
  • git报错fatal: unable to access ‘https://github.com/‘: OpenSSL SSL_read: Connec
    bug描述fatal:unabletoaccess‘https://github.com/…’:OpenSSLSSL_read:Connectionwasreset,errno10054bug产生原因产生原因:一般是这是因为服务器的SSL证......