Wireshark 解密HTTPS
  3cAxQ5E22S4z 2023年11月02日 24 0


原理

  我们先回顾一下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、直接从客户端提取预主密钥,结合客户端和服务器随机数生成加密密钥,实现对加密报文的解密。


操作

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

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

Wireshark 解密HTTPS_Wireshark 解密HTTPS

测试网址:百度一下,你就知道 (baidu.com)

Wireshark 解密HTTPS_Wireshark 解密HTTPS_02


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

3cAxQ5E22S4z