[https][tls] 如何使用wireshark查看tls/https加密消息--使用keylog
姊妹篇:
[ipsec][strongswan] 使用wireshark查看strongswan ipsec esp ikev1 ikev2的加密内容
[https][tls] 如何使用wireshark查看tls/https加密消息--使用私钥
需求
学习SSL/TLS的过程中, 使用wireshark转包分析,是常用的手段.
我自建nginx自签名证书, 抓了一个访问请求的包, 是这样的.
我们可以看到, 从第8个包开始, 便出现了密文. 即使我不关心TLS上层的业务内容, 第八和第九个包里边的最后两段加密数据段, 也是需要关心的. 他们是Finshed报文,是协商报文的一部分.
配置
wirshark
我们知道wireshark具体解密TLS密文的能力. (我们当然知道, 因为我们经验丰富), 而且我们还知道从下边的这个地方进行配置:
edit->preferences->protocols->tls
情况A: 当我们使用RSA进行秘钥交互的时候, 就对RSA keys list项进行配置, 导入server端的私钥.
情况B: 当我们使用DH进行秘钥交互的时候, 就对Master Secret log filename进行配置, 导入单次会话的主密钥. 因为DH的秘钥交互过程是明文交互的, 所以只配这个,也能解开全部的密文.
curl或firefox
情况A并没有这个步骤. 下面讨论情况B
wireshark的配置中需要的配置文件, 是用来保存主秘钥的. 称为 SSLKEYLOGFILE
在通过curl或firefox访问之前, 设置环境变量SSLKEYLOGFILE的值为目标文件, 在执行过curl或firefox之后, 主密钥会被自动记录到该文件中, 如下以curl为例, firefox同样适用:
┬─[tong@T7:~/Works/tls]─[08:22:58 PM] ╰─>$ export |grep SSL SSLKEYLOGFILE /home/tong/Works/tls/keylog ┬─[tong@T7:~/Works/tls]─[08:23:59 PM] ╰─>$ curl --cacert ~/Keys/https/root/root.cer https://TTTrust:443/
可以看到该文件的内容:
┬─[tong@T7:~/Works/tls]─[08:24:02 PM] ╰─>$ cat keylog CLIENT_RANDOM db23bf9a63b494ba72ecfaef831f55954f887576xxxxa2c45e46e7f631ea160d bfc5346bb7c0573b95e637a973524884ec912b67d5ce747c1a169e1d6ba57643ff8a1e97b33b11c5d6ff249961efxxxx
效果
现在, 按前文配置该文件在wireshark中, 可以看见下面的效果:
协商包与数据包都被解开了.
参考
<<everything curl>>是curl主页上推荐的官方书面, 其中一个章节讲述了以上方法
https://ec.haxx.se/tls-sslkeylogfile.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)