Wireshark 解密 HTTPS 流量
目录前置知识TLS 预主密钥机制环境准备与配置Wireshark 解密配置实战抓包分析常见问题与解决方案一、前置知识TLS 预主密钥机制1.1 解密原理┌─────────────┐ ┌─────────────┐ │ 浏览器 │ ──── TLS 握手 ──── │ 服务器 │ │ (Chrome) │ │ (Gateway) │ └──────┬──────┘ └─────────────┘ │ │ 预主密钥(pre-master secret) ▼ ┌─────────────┐ │ ssl-keys.log │ ◄── 写入密钥日志 └──────┬──────┘ │ ▼ ┌─────────────┐ │ Wireshark │ ◄── 读取密钥解密流量 └─────────────┘核心逻辑TLS 握手阶段生成的预主密钥可以推导出会话密钥拥有它就能解密后续所有加密通信。1.2 为什么需要手动配置现代浏览器出于安全考虑默认不会导出密钥。需要通过环境变量显式开启此功能仅用于调试分析。⚠️安全警告预主密钥日志文件等同于明文密码务必妥善保管分析完成后立即删除。二、环境准备与配置2.1 获取预主密钥Windows 环境步骤 1创建启动脚本创建文件start-capture.batecho off chcp 65001 nul echo [Wireshark HTTPS 解密环境启动器] echo :: 1. 清理残留进程 echo [1/4] 终止现有 Chrome 进程... taskkill /F /IM chrome.exe 2nul timeout /t 2 nul :: 2. 设置密钥日志路径使用临时路径示例 set SSLKEYLOGFILEC:\Temp\ssl-session-keys.log echo [2/4] 密钥日志路径: %SSLKEYLOGFILE% :: 3. 清理旧日志可选 if exist %SSLKEYLOGFILE% ( echo 清理旧日志文件... del %SSLKEYLOGFILE% ) :: 4. 启动浏览器 echo [3/4] 启动 Chrome... start C:\Program Files\Google\Chrome\Application\chrome.exe :: 5. 验证文件生成 echo [4/4] 等待浏览器初始化... timeout /t 3 nul if exist %SSLKEYLOGFILE% ( echo [✓] 环境配置成功密钥文件已就绪。 echo 文件大小: for %%F in (%SSLKEYLOGFILE%) do echo %%~zF bytes ) else ( echo [!] 警告: 密钥文件未生成请访问 HTTPS 网站后重试 ) echo. echo 操作提示: echo 1. 在 Chrome 中访问 https://gateway.example.local echo 2. 观察密钥文件是否增长 echo 3. 打开 Wireshark 开始捕获 echo. pause步骤 2验证密钥文件格式正常生成的ssl-session-keys.log内容示例# SSL/TLS secrets log file, generated by NSS CLIENT_RANDOM 5f8a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f 8a3f2c5d7e9b1a4c6d8f0e2b5c7d9e1f3a5b7c9d1e3f5a7b9c1d3e5f7a9b1c3d5 CLIENT_RANDOM 9c4e1d2f3a5b7c9d1e3f5a7b9c1d3e5f7a9b1c3d5e7f9a1b3c5d7e9f1a3b5 2b7a9f1c3e5d7b9a1f3e5d7b9a1f3e5d7b9a1f3e5d7b9a1f3e5d7b9a1f3e5d7b9a1 CLIENT_EARLY_TRAFFIC_SECRET 1a2b3c...每行对应一个 TLS 会话格式为CLIENT_RANDOM客户端随机数标识64 字符十六进制客户端随机数后续字符串预主密钥三、Wireshark 解密配置3.1 配置密钥文件路径Wireshark → 编辑(Edit) → 首选项(Preferences) → Protocols → TLS配置项配置项值说明(Pre)-Master-Secret log filenameC:\Temp\ssl-session-keys.log绝对路径避免中文和空格RSA keys list留空仅用于特定 RSA 密钥现代浏览器多用 ECDHESSL debug file可选解密失败时用于诊断3.2 优化显示设置同一位置配置Reassemble TLS records spanning multiple TCP segments: ☑ 启用Reassemble TLS Application Data spanning multiple records: ☑ 启用确保能重组分片的 TLS 数据。四、实战抓包分析4.1 捕获接口选择Wireshark 启动界面 → 选择正确的网络接口表格场景选择接口直接上网Wi-FiWi-Fi或WLAN有线网络Ethernet或以太网通过代理/VPN代理软件创建的虚拟网卡如Clash,v2ray本地回环测试NPCAP Loopback Adapter验证方法点击接口旁的蓝色波浪线确认有流量波动。4.2 捕获过滤器设置为减少噪音设置捕获过滤器Capture Filterhost 192.168.100.10 and port 443注此处192.168.100.10为临时网关地址实际使用时替换为目标 IP。4.3 分析加密流量成功解密的标志Packet List 面板Protocol 列显示为TLS或HTTP/2而非TLSv1.2/TLSv1.3Info 列显示 HTTP 方法和路径如GET /api/statusPacket Details 面板Frame 1234: 1514 bytes on wire Ethernet II Internet Protocol Version 4 Transmission Control Protocol Transport Layer Security TLSv1.3 Record Layer: Application Data Protocol: http Content Type: Application Data (23) Version: TLS 1.3 (0x0304) Length: 1448 Encrypted Application Data: ... [Decrypted TLS] ◄── 关键节点 [Protocol: HTTP/1.1] ◄── 解密后的应用层 HTTP/1.1 200 OK\r\n Content-Type: application/json\r\n ...查看解密后的 HTTP 内容展开[Decrypted TLS]→ 可见完整的 HTTP 请求/响应请求方法、URL、HeadersPOST 请求的 JSON 载荷响应状态码和 Body 数据五、常见问题与解决方案问题 1密钥文件未生成现象ssl-session-keys.log文件不存在或大小为 0。排查清单表格检查项命令/方法预期结果环境变量是否设置set SSLKEYLOGFILE显示配置的路径浏览器是否通过 CMD 启动任务管理器查看父进程cmd.exe应为 Chrome 的父进程是否访问了 HTTPS 网站浏览器地址栏确认协议必须为https://目录写入权限echo test C:\Temp\test.txt文件成功创建解决方案:: 确保完全关闭 Chrome 后重新启动 taskkill /F /IM chrome.exe set SSLKEYLOGFILEC:\Temp\ssl-session-keys.log start chrome问题 2Wireshark 抓不到包现象密钥文件正常但 Wireshark 无数据。排查步骤确认接口选择plainWireshark → 捕获 → 选项 → 选择有流量的物理网卡确认目标地址可达batchping 192.168.100.10 nslookup gateway.example.local检查是否存在代理plainChrome 设置 → 系统 → 打开代理设置如有代理流量可能走虚拟网卡需切换 Wireshark 接口。问题 3抓到包但无法解密现象能看到TLS协议但无[Decrypted TLS]节点。可能原因表格原因验证解决密钥文件路径错误文件 → 首选项 → TLS检查路径使用绝对路径重新选择密钥与会话不匹配比较时间戳确保抓包和密钥生成同时进行TLS 1.3 早期数据检查CLIENT_EARLY_TRAFFIC_SECRET升级 Wireshark 至 3.0使用了 ECDHE 以外算法查看 Server Hello现代浏览器默认支持一般无问题诊断技巧plainWireshark → 分析 → 专家信息 → 搜索 TLS 相关警告问题 4只能解密部分流量现象部分 HTTPS 请求显示明文部分仍为加密。原因浏览器复用了之前的 TLS 会话Session Resumption该会话的密钥未在日志中。解决:: 1. 关闭浏览器 taskkill /F /IM chrome.exe :: 2. 清空密钥文件 del C:\Temp\ssl-session-keys.log :: 3. 重新启动并立即抓包 set SSLKEYLOGFILEC:\Temp\ssl-session-keys.log start chrome :: 立即在 Wireshark 开始捕获附录完整检查清单□ 环境变量 SSLKEYLOGFILE 已设置 □ 浏览器通过 CMD/脚本启动非桌面图标 □ 访问了 HTTPS 网站非 HTTP □ 密钥文件已生成且有内容CLIENT_RANDOM 开头 □ Wireshark 中配置了正确的密钥文件路径 □ 选择了正确的捕获接口物理网卡/代理网卡 □ 捕获过滤器未过度限制可先清空测试 □ 浏览器和 Wireshark 捕获时间同步 □ 分析完成后删除密钥文件安全清理