使用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环境变量,指定一个日志文件路径。如果不生效,可重启下电脑。

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

    c 复制代码
      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流量, 密钥日志文件要谨慎保存
实用性 需要服务端提供证书私钥, 不太实用 不需要服务端提供证书私钥,更加实用
相关推荐
测试秃头怪25 分钟前
支付宝性能测试案例分析详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·性能测试
少云清2 小时前
【接口测试】1_Dubbo接口 _xx健康项目
测试工具·接口测试
大佐不会说日语~2 小时前
使用 Cloudflare平台 + Docker + Nginx 完成网站 HTTPS 部署实战记录
nginx·docker·https·部署·cloudflare
Knight_AL2 小时前
使用 Nginx 为内网 Java 服务实现 HTTPS
java·nginx·https
风清扬_jd2 小时前
libcurl 开启https一键编译指南【MT方式】
c++·https·curl
天才测试猿2 小时前
软件测试之bug分析定位技巧
软件测试·python·selenium·测试工具·职场和发展·测试用例·bug
三两肉3 小时前
从明文到加密:HTTP与HTTPS核心知识全解析
网络协议·http·https
程序员小远3 小时前
接口自动化测试知识总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
智行众维3 小时前
数据驱动与AI融合——构建自动驾驶仿真测试新范式的实践
人工智能·测试工具·ai·自动驾驶·仿真测试·自动驾驶仿真测试·场景开发
程序员杰哥4 小时前
操作自动化测试如何实现用例设计实例?
自动化测试·软件测试·python·功能测试·测试工具·测试用例·接口测试