原理
我们先回顾一下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 = https://www.isolves.com/it/aq/fwq/2019-09-16/PRF(master_secret , finished_label,hash(handshake_message))
因此,通过Wireshark解密HTTPS,可以从两个地方下手:1、密钥交换算法选择RSA,然后提取服务器的私钥,将私钥导入Wireshark,通过Wireshark解密密钥交换过程中传递的预主密钥,再结合之前的客户端和服务器随机数生成主密钥,进一步生成加密密钥,即可解密后续抓取到的加密报文 。2、直接从客户端提取主密钥,结合客户端和服务器随机数生成加密密钥,实现对加密报文的解密 。
下面演示两种方法解密HTTPS流量 。
方法一
从服务器上导出带私钥的P12格式的证书,或者直接导出服务器的私钥 。
捕获从TCP三次握手开始的完整报文:

文章插图
可以看到此时的报文是被TLS加密的,无法看到具体的报文内容 。
点击编辑——>首选项——>协议——>SSL(有的版本只有TLS),导入RSA key:

文章插图
由于通过DH方法交换的密钥不会在中间传递,所以这种方法只能解密通过RSA交换的密钥 。
导入服务器证书:

文章插图
点击ok后,Wireshark会对捕获的报文进行解密:

文章插图
报文被成功解密,可以直观的看到HTTP报文的请求和响应 。
第二种
通过设置环境变量截取浏览器的master_secret,进而实现解密HTTPS的目的 。
环境变量中新建用户变量SSLKEYLOGFILE=路径sslkey.log文件,之后再wireshark中ssl配置中制定该文件位置即可 。

文章插图
点击编辑>首选项>protocol>ssl:

文章插图
即可解密浏览器的访问流量:

文章插图
【Wireshark解密HTTPS流量的两种方法】
推荐阅读
- 解密电商系统架构发展历程
- 在线加密解密工具 md5免费解密
- 面试官:先来聊聊HTTPS原理,再继续下一个问题
- HTTPS是怎么保证网络通信安全的
- 解密英红九号为什么能在国内所有红茶中被评为第名
- 黑客大佬必会的网络解密秘籍
- https实现原理
- 知情人曝周扬青早已解密罗志祥手机,为讨回公道拒收千万封口费
- 微信电脑版image文件夹下缓存的用户图片 dat文件解码解密查看方法
- 解密白族三道茶
