在服务器端抓取HTTPS流量并解密内容,需要特殊配置以获取明文数据。以下是几种常用方法及步骤:
方法1:使用SSL/TLS会话密钥导出(推荐)
原理:通过导出会话密钥,用Wireshark等工具解密已捕获的加密流量。
步骤:
- 设置环境变量(以OpenSSL/LibreSSL为例):
bash
Copy
Download
export SSLKEYLOGFILE=/path/to/sslkeylog.log
支持此功能的应用程序(如Nginx、Node.js、Python的ssl
模块)会自动将会话密钥写入该文件。
- 重启服务:
确保应用使用支持密钥导出的SSL库(如OpenSSL 1.1.1+)。 - 捕获流量:
bash
Copy
Download
tcpdump -i eth0 -w capture.pcap port 443
- 用Wireshark解密:
- 打开
capture.pcap
Preferences > Protocols > TLS
- 在
(Pre)-Master-Secret log filename
中指定sslkeylog.log
方法2:配置前端代理(终止HTTPS)
原理:在反向代理(如Nginx)上终止HTTPS,将明文流量转发到后端,在代理层抓包。
步骤:
- 配置Nginx终止HTTPS:
nginx
Copy
Download
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://backend_server:8000; # 明文转发
proxy_set_header Host $host;
}
}
- 在Nginx与后端之间抓包:
bash
Copy
Download
tcpdump -i lo -w http_traffic.pcap port 8000
此时流量为HTTP明文。
方法3:使用中间人工具(mitmproxy)
原理:在服务器本地作为代理,拦截并解密HTTPS。
步骤:
- 安装mitmproxy:
bash
Copy
Download
pip install mitmproxy
- 启动拦截代理:
bash
Copy
Download
mitmproxy --mode transparent --ssl-insecure
- 配置iptables重定向流量:
bash
Copy
Download
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 8080
- 查看明文流量:
通过mitmproxy控制台实时查看或导出流量。
方法4:使用调试工具(strace/gdb)
适用场景:调试单个进程的TLS通信(不推荐生产环境)。
示例(strace):
bash
Copy
Download
strace -e trace=read,write -s 9999 -p <PID> 2>&1 | grep 'read\|write'
此方法可能输出加密数据片段,需结合其他分析。