首页 > 其他分享 >wireshark 结合 go 对每个请求进行 https tls tcp 内容解密

wireshark 结合 go 对每个请求进行 https tls tcp 内容解密

时间:2023-05-28 22:35:06浏览次数:47  
标签:tls key err tcp https os Transport wireshark

众所周知,wireshark 是一款流行的抓包软件,我们可以很方便地查看每个 TCP 包的具体信息。对于 HTTP 协议的数据,还可以查看每个协议层具体信息内容。

但是对于 HTTPS 的数据,我们只能查看 IP 层以下的数据,TLS 及以上的数据都是被加密过的,如下图所示。

 

在某些特殊的场景下,我们想查看这个请求的具体内容就无从下手,即使使用 findler 等代理工具,也只能查看到最终的返回数据,没法查看 TCP 具体的传输内容。

以 HTTP 中 text/event-stream 为例,使用 apiPOST 我们可以直接得到响应内容,但是这个类型的具体是什么样的,我们无从得知。

 

这也是我最近工作遇到的一个问题,经过不断的尝试,发现 go 的 Transport 类型中有个 TLSConfigConfig 字段,可以打印在HTTPS 请求过程中生成的密钥,具体示例代理如下

func Test_Request2(m *testing.T) {
    // 创建一个文件, 用于保存tls key
    file, err := os.OpenFile(tlsKeyPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
    if err != nil {
        fmt.Printf("create tls key file failed, err: %s", err)
        return
    }
    defer file.Close()
    tlsConfig := &tls.Config{
        // 设置 key 保存的路径,关键之处
        KeyLogWriter: file,
    }

    client.Transport = &http.Transport{
        TLSClientConfig: tlsConfig,
    }

    req, err := http.NewRequest(method, url, reqData)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    defer resp.Body.Close()

    fmt.Printf("Status: %s\n", resp.Status)
}
View Code

 

然后在 wireshark 中指定 pre-master key,具体操作如下,选中任一一条TCP数据,右击 -> Protocol Prefferences -> Transport Layer Security -> Pre Master Secret 来选择密钥的路径, 然后就可以看到解密后的数据

 

 

 

 

 

 

标签:tls,key,err,tcp,https,os,Transport,wireshark
From: https://www.cnblogs.com/burton/p/17439011.html

相关文章

  • 网易面经:深剖TCP协议的流量控制和拥塞控制,你懂了吗?
    TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。TCP提供全双工通信、数据可靠传输和拥塞控制等功能,适用于因特网等应用场景。TCP位于OSI七层协议模型的网络层,与用户数据报协议(UDP)一起构成了传输层协议。T......
  • https
    server{   listen      80;   server_name jira.bdgatewaynet.com;   rewrite^(.*)https://$server_name$1permanent;}server{       listen443ssl;       server_name jira.bdgatewaynet.com;       ssl_certific......
  • Rust Web 全栈开发之自建TCP、HTTP Server
    RustWeb全栈开发之自建TCP、HTTPServer课程简介预备知识Rust编程语言入门https://www.bilibili.com/video/BV1hp4y1k7SV课程主要内容WebService服务器端WebApp客户端WebApp(WebAssembly)Web框架:Actix数据库:PostgreSQL数据库连接:SQLx全部使用纯Rust编写!一......
  • 力扣 662 https://leetcode.cn/problems/maximum-width-of-binary-tree/
    需要了解树的顺序存储如果是普通的二叉树,底层是用链表去连接的如果是满二叉树,底层用的是数组去放的,而数组放的时候会有索引对应当前父节点是索引i,下一个左右节点就是2i,2i+1利用满二叉树的索引特征所以需要对每个节点进行一个索引赋值,赋值在队列中,队列用数组表示核心代码......
  • https:imnks.com369.html hosts处理
    https:imnks.com369.htmlhosts处理sudo-i#手动筛选的ip,2022.11.1更新curlhttp://code.imnks.com/hosts.sh|bash#自动筛选的ipcurlhttp://code.imnks.com/hosts-auto.sh|bash​​......
  • 彻底搞懂https02
    阅读前,请详细搞懂廖大的“加密与安全章节”:https://www.liaoxuefeng.com/wiki/1252599548343744/1304227968188450数字证书在传输的过程中,客户端如何获得服务器端的公钥呢?当时是服务器分发给客户端,如果一开始服务端发送的公钥到客户端的过程中有可能被第三方劫持,然后第三方自......
  • net7下的tcpip示例
    2023-05-27测试,直接用百度文心一言搜索的,结果出来的代码能运行得通,不错不错服务器端: usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;namespacetcpipdemo_server;classProgram{staticvoidMain(string[]args){//创建TCP......
  • 性能测试-分析TCP连接数
    TCP连接数TCP连接数对应的是网络IO,也就是网络数据传输的输入输出。TCP连接是一种面向连接的协议,它通过建立连接来保证数据传输的可靠性和完整性。在建立TCP连接时,会进行三次握手,建立连接后,数据的传输就可以进行了。TCP连接数的增加会导致网络IO的增加,因为每个TCP连接都需要进行......
  • Spring boot+vue打包、上传宝塔面板并配置https
    终于把网站搞完了,也终于能够通过域名访问了,这次就简单回顾一下这么多时间的经历,总结一下。项目地址穆音博客,本文发布原地址在Springboot+vue打包、上传宝塔面板并配置https我的开发环境是前端使用vue-admin-template,后端使用Springboot+mybatis-plus,由于我要根据后端打包的效......
  • 出现https原因
    出现https原因,在我看来有两点1,因为http是明文传输,极不安全,需要对报文进行加密。2,我们无法确认浏览的网站的身份信息,如果是钓鱼网站,诱使我们输入银行账号密码之类的就麻烦了。怎么做简而言之,「https规定了加密算法对报文进行加密,解决明文传输的问题。采用数字证书的方式解决对......