Appearance
TLS/SSL 解密
1. 什么是 keylog_file
keylog_file 是一个关键日志文件,包含了 TLS/SSL 会话的密钥信息。这个文件使得网络分析工具能够解密加密的 HTTPS 流量,从而进行深入的协议分析。
2. keylog_file 文件格式
keylog_file 包含了各种类型的密钥材料,每行格式如下:
text
# TLS 1.2 密钥格式
CLIENT_RANDOM <client_random> <master_secret>
# TLS 1.3 密钥格式
CLIENT_HANDSHAKE_TRAFFIC_SECRET <client_random> <secret>
SERVER_HANDSHAKE_TRAFFIC_SECRET <client_random> <secret>
CLIENT_TRAFFIC_SECRET_0 <client_random> <secret>
SERVER_TRAFFIC_SECRET_0 <client_random> <secret>3. 生成 keylog_file
方法一:浏览器环境变量
bash
# Chrome/Firefox 导出密钥日志
export SSLKEYLOGFILE=/path/to/sslkeys.log
google-chrome --ssl-key-log-file=/path/to/sslkeys.log
# 或者在启动前设置环境变量
export SSLKEYLOGFILE=/tmp/sslkeys.log
firefox方法二:应用程序配置
python
import ssl
import os
# 设置 SSL 密钥日志文件
os.environ['SSLKEYLOGFILE'] = '/tmp/sslkeys.log'
# 创建支持密钥日志的 SSL 上下文
context = ssl.create_default_context()
context.keylog_filename = '/tmp/sslkeys.log'javascript
// 设置环境变量
process.env.SSLKEYLOGFILE = "/tmp/sslkeys.log";
const https = require("https");
const fs = require("fs");
// Node.js 会自动写入密钥日志
const options = {
hostname: "example.com",
port: 443,
path: "/api",
method: "GET",
};bash
# 使用 OpenSSL 连接并生成密钥日志
export SSLKEYLOGFILE=/tmp/sslkeys.log
openssl s_client -connect example.com:443 -keylogfile /tmp/sslkeys.log4. Tshark 中使用 keylog_file
基础解密命令
bash
# 使用密钥文件解密 HTTPS 流量
tshark -r encrypted.pcap -o "tls.keylog_file:sslkeys.log" -Y "http"
# 输出解密后的 HTTP 内容为 JSON
tshark -r encrypted.pcap -o "tls.keylog_file:sslkeys.log" -T json -Y "http" > decrypted.json
# 提取解密后的 HTTP 请求
tshark -r encrypted.pcap -o "tls.keylog_file:sslkeys.log" -Y "http.request" -T fields -e http.request.method -e http.request.uri -e http.request.full_uri高级解密分析
bash
# 分析解密后的 HTTP 响应状态
tshark -r encrypted.pcap -o "tls.keylog_file:sslkeys.log" -Y "http.response" -T fields -e frame.time -e ip.src -e http.response.code -e http.response.phrase
# 提取解密后的 HTTP 头部信息
tshark -r encrypted.pcap -o "tls.keylog_file:sslkeys.log" -Y "http" -T fields -e http.host -e http.user_agent -e http.cookie
# 导出解密后的 HTTP 对象
tshark -r encrypted.pcap -o "tls.keylog_file:sslkeys.log" --export-objects http,./decrypted_objects/5. 实际业务场景示例
场景一:API 调试
bash
# 捕获并解密 API 调用
tshark -i eth0 -f "host api.example.com and port 443" -w api_capture.pcap
# 分析解密后的 API 请求和响应
tshark -r api_capture.pcap -o "tls.keylog_file:browser_keys.log" -Y "http and json" -V场景二:Web 应用性能分析
bash
# 分析页面加载时间
tshark -r web_traffic.pcap -o "tls.keylog_file:sslkeys.log" -Y "http" -T fields -e tcp.stream -e frame.time -e http.request.uri -e http.response.code -e http.time
# 统计不同资源类型的加载情况
tshark -r web_traffic.pcap -o "tls.keylog_file:sslkeys.log" -Y "http" -T fields -e http.request.uri -e http.content_type -e frame.len场景三:安全分析
bash
# 检查解密后的敏感数据传输
tshark -r secure_app.pcap -o "tls.keylog_file:app_keys.log" -Y "http and (http.request.method == POST or http.request.method == PUT)" -T fields -e http.request.uri -e http.file_data
# 分析认证流程
tshark -r auth_flow.pcap -o "tls.keylog_file:sslkeys.log" -Y "http and (http.authorization or http.cookie)" -V6. TLS 解密工作流程
7. keylog_file 最佳实践
IMPORTANT
安全注意事项
- keylog_file 包含敏感的加密密钥信息
- 仅在受控环境中使用,避免在生产环境泄露
- 使用完毕后应安全删除密钥文件
TIP
性能优化建议
- 大型 pcap 文件解密可能消耗大量内存
- 使用显示过滤器减少处理的数据量
- 考虑分批处理大型捕获文件
WARNING
兼容性说明
- 不同 TLS 版本的密钥格式不同
- 确保 keylog_file 与捕获的流量版本匹配
- 某些加密套件可能不支持密钥导出
8. 故障排除
常见问题
bash
# 检查密钥文件格式是否正确
head -n 5 sslkeys.log
# 验证 Tshark 是否正确加载密钥文件
tshark -r test.pcap -o "tls.keylog_file:sslkeys.log" -Y "tls" -T fields -e tls.handshake.type
# 检查是否有匹配的 TLS 会话
tshark -r test.pcap -o "tls.keylog_file:sslkeys.log" -Y "http" -c 1调试步骤
- 验证捕获文件:确认 pcap 文件包含完整的 TLS 握手
- 检查密钥文件:验证 keylog_file 包含相应会话的密钥
- 测试解密:使用简单的过滤器测试解密是否成功
- 分析输出:检查解密后的内容是否符合预期
Details
密钥文件示例内容
text
# TLS 1.2 会话密钥示例
CLIENT_RANDOM 52362c4e1f4c5a3b2d1e0f9c8b7a6958473625...
CLIENT_RANDOM 62472d5f2g5d6b4c3e2f1a0d9e8c7b6a5948372...
# TLS 1.3 会话密钥示例
CLIENT_HANDSHAKE_TRAFFIC_SECRET 52362c4e1f4c5a3b...
SERVER_HANDSHAKE_TRAFFIC_SECRET 52362c4e1f4c5a3b...
CLIENT_TRAFFIC_SECRET_0 52362c4e1f4c5a3b...
SERVER_TRAFFIC_SECRET_0 52362c4e1f4c5a3b...通过正确使用 keylog_file,您可以将加密的 HTTPS 流量转换为可读的明文内容,大大提升网络分析和故障排除的效率。