当前位置: 首页 > news >正文

使用WireShark解密https流量

概述

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

方法一:通过RSA私钥解密

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

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

    • 在这里插入图片描述
  • 或者选择编辑->首选项->Protocols->TLS, 点击RSA keys list后面的编辑按钮,设置服务端的ip和端口,协议写http, 再导入RSA私钥文件。

    • 在这里插入图片描述
  • 这样重新抓包,就可以抓到解密后的https流量。

    • 在这里插入图片描述
  • 这种方法只能解密密钥协商算法为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
      
  • 并且需要拿到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流量

    • 在这里插入图片描述
  • 这种方法几乎支持所有的加密套件。

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

总结

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

相关文章:

  • 剑指 Offer II 084. 含有重复元素集合的全排列
  • Vue中使用到的padStart方法是什么
  • 2.4 python网络编程
  • java集合总结
  • 问题一:如何理解 sizeof(s = a + 2) (来源:C语言的——操作符详解——(第18篇))
  • 前沿技术趋势:值得关注的创新发展
  • 睡不着营养贴纸
  • Java开发之数据库应用:记一次医疗系统数据库迁移引发的异常:从MySQL到PostgreSQL的“dual“表陷阱与突围之路
  • 高频面试题(含笔试高频算法整理)基本总结回顾43
  • 2024山东大学计算机复试上机真题
  • BUG修复 | 一次钉钉工作台应用远程调试实战(开发者工具)
  • 如何搭配 AI 量化策略选股
  • 优化 Java 数据结构选择与使用,提升程序性能与可维护性
  • ssh通过22端口无法连接服务器问题处理
  • Redis事务与管道
  • 【PHP】获取PHP-FPM的状态信息
  • 从公布的11批其他算法类别分析
  • 25年教师资格认定材料及认定详细流程‼
  • angular打地鼠
  • NAT和NAPT的介绍
  • 龚正会见委内瑞拉副总统罗德里格斯
  • 习近平:在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话
  • 巴防长称中俄可参与克什米尔恐袭事件国际调查,外交部回应
  • 李祥翔评《孔子哲学思微》︱理性秩序与美学秩序的碰撞
  • 今年3月全国查处违反中央八项规定精神问题16994起
  • 上海超万套保租房供应高校毕业生,各项目免押、打折等优惠频出