使用WireShark解密https流量

devtools/2025/3/16 16:02:03/

概述

  • https协议是在http协议的基础上,使用TLS协议对http数据进行了加密,使得网络通信更加安全。
  • 一般情况下,使用WireShark抓取的https流量,数据都是加密的,无法直接查看。但是可以通过以下两种方法,解密抓取到的https流量数据。

方法一:通过RSA私钥解密

  • 首先需要下载服务端的RSA证书私钥文件

  • 在WireShark中,选择编辑->首选项->RSA密钥,然后添加RSA证书私钥文件。

    • https://i-blog.csdnimg.cn/direct/66a6b62ebfa7443ba262bfb974b069d7.png" alt="在这里插入图片描述" />
  • 或者选择编辑->首选项->Protocols->TLS, 点击RSA keys list后面的编辑按钮,设置服务端的ip和端口,协议写http, 再导入RSA私钥文件。

    • https://i-blog.csdnimg.cn/direct/e741d10648da42c0bed11701c978c632.png" alt="在这里插入图片描述" />
  • 这样重新抓包,就可以抓到解密后的https流量。

    • https://i-blog.csdnimg.cn/direct/0115b9bd277b4b90a734d143a7953254.png" alt="在这里插入图片描述" />
  • 这种方法只能解密密钥协商算法为RSA的加密套件,支持的常用加密套件有以下几种:

    •   TLS_RSA_WITH_AES_256_GCM_SHA384TLS_RSA_WITH_AES_128_GCM_SHA256TLS_RSA_WITH_AES_256_CBC_SHA256TLS_RSA_WITH_AES_128_CBC_SHA256TLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_WITH_AES_128_CBC_SHA
      
  • 并且需要拿到RSA证书私钥,可能不太实用。

方法二:使用密钥日志文件

  • https流量加密的核心是TLS协议,其握手过程会协商出会话密钥,用于加密实际传输的数据。

  • 当客户端配置了密钥日志文件后,每次TLS握手完成时,会将会话密钥等信息写入指定的日志文件中,这样WireShark就可以使用日志文件中的会话密钥等信息解密HTTPS流量数据。

  • 如果使用浏览器,可配置SSLKEYLOGFILE环境变量,指定一个日志文件路径。如果不生效,可重启下电脑。

    •   set SSLKEYLOGFILE=C:\sslpath\sslkeylog.txt
      
  • 如果使用C/C++编写的客户端程序,可通过OpenSSL接口指定密钥日志文件

    •   void keylog_callback(const SSL *ssl, const char *line) {FILE *keylog = fopen("C:\\sslpath\\sslkeylog.txt", "a");if (keylog) {fprintf(keylog, "%s\n", line);fclose(keylog);}}int main () {SSL_CTX *ctx = SSL_CTX_new(TLSv1_2_client_method());if(ctx == NULL){ERR_print_errors_fp(stderr);return -1;}       SSL_CTX_set_keylog_callback(ctx, keylog_callback);return 0;}
      
  • 然后在WireShark中选择编辑->首选项->Protocols->TLS, 在(Pre)-Master-Secret log filename的编辑框中指定日志文件路径。

    • https://i-blog.csdnimg.cn/direct/fd2237ad092c4de88262070584d62297.png" alt="在这里插入图片描述" />
  • 再重新抓取,依然可以成功解密https流量

    • https://i-blog.csdnimg.cn/direct/1c18e14e94df48f485cfe757a018c4f4.png" alt="在这里插入图片描述" />
  • 这种方法几乎支持所有的加密套件。

  • 密钥日志文件若泄露,可解密所有记录的HTTPS流量,仅限测试环境使用。

总结

  • 通过RSA证书私钥解密使用密钥日志文件
    加密套件支持情况只支持RSA密钥协商算法的加密套件,不支持ECDH、DH等其他密钥协商算法的加密套件几乎支持所有加密套件
    安全性只支持解密指定服务器的https流程,更加安全可解密所有的https流量, 密钥日志文件要谨慎保存
    实用性需要服务端提供证书私钥, 不太实用不需要服务端提供证书私钥,更加实用

http://www.ppmy.cn/devtools/167597.html

相关文章

matlab:二维绘图篇——plot绘图命令

目录 1.plot绘图命令 (1)plot(x) 实例——实验数据曲线 实例——窗口分割 实例——随机矩阵 (2).plot(x,y) 实例——摩擦系数变化曲线 (3)plot(x1,y1,x2,y2,...) 实例——正弦图形 实例——正弦余弦图形 (4&#xff09…

uniapp+vue实现购物车的左滑删除功能

左滑删除 删除功能利用透明的改变在显示删除按钮实现思路代码效果展示 利用scroll滑动容器来实现代码实现效果展示 我们在移动端的电商平台中,一般都是左滑后然后删除按钮出现,用户可以点击删除按钮来进行该商品的删除,这里我分享两种方法来达…

机器学习-----决策树

文章目录 1、概念2. 决策树的构建过程2.1 特征选择2.2 树的生成2.3 树的剪枝 3. 决策树的优缺点4. 决策树的应用4.1 分类任务4.2 回归任务4.3 集成学习 代码示例 总结 1、概念 1.1决策树是什么 决策树是通过对样本的训练,建立出分类规则,并对新样本进行…

【Linux系统编程】共享内存

目录 1、什么是共享内存2、mmap函数3、mmap对比read、write4、munmap 函数5、msync函数5.1、通过页表机制,将修改的数据同步到磁盘,那为什么还需要msync函数 6、示例6.1、使用mmap让进程之间通信,文件作为媒介6.3、修改文件,使用m…

BGP路由聚合

BGP路由聚合 路由聚合解决了两类问题,一是减轻了设备传输和计算路由所需资源的负担,二是隐藏了具体的路由信息,减少了路由震荡的影响。 聚合方式相关命令备注静态聚合network配置静态路由汇总明确路由,再由network宣告自动聚合summary automatic对引入的路由进行主类掩码聚…

如何在需求分析阶段考虑未来扩展性

在需求分析阶段考虑未来扩展性的关键在于 前瞻规划、灵活架构、标准设计。其中,前瞻规划尤为重要,因为通过全面分析业务发展趋势与技术演进,能够在初期设计阶段预留足够扩展空间,降低后期改造成本,为企业长期发展奠定坚…

UE5与U3D引擎对比分析

Unreal Engine 5(UE5)和Unity 3D(U3D)是两款主流的游戏引擎,适用于不同类型的项目开发。以下是它们的主要区别,分点整理: 1. 核心定位 UE5: 主打3A级高画质项目(如主机/P…

结合使用 OpenCV 和 TensorFlow进行图像识别处理

在实际项目中,OpenCV 和 TensorFlow 可以结合使用,发挥各自的优势。以下是一个典型的结合使用流程: 典型应用场景 (1)​人脸检测和识别 使用 OpenCV 进行人脸检测。使用 TensorFlow 进行人脸识别。 (2&…