软件运维 --- https如何实现服务器端抓包
在服务器端抓取HTTPS流量并解密内容,需要特殊配置以获取明文数据。以下是几种常用方法及步骤:
方法1:使用SSL/TLS会话密钥导出(推荐)
原理:通过导出会话密钥,用Wireshark等工具解密已捕获的加密流量。
步骤:
-
设置环境变量(以OpenSSL/LibreSSL为例):
export SSLKEYLOGFILE=/path/to/sslkeylog.log
支持此功能的应用程序(如Nginx、Node.js、Python的
ssl
模块)会自动将会话密钥写入该文件。 -
重启服务:
确保应用使用支持密钥导出的SSL库(如OpenSSL 1.1.1+)。 -
捕获流量:
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:
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与后端之间抓包:
tcpdump -i lo -w http_traffic.pcap port 8000
此时流量为HTTP明文。
方法3:使用中间人工具(mitmproxy)
原理:在服务器本地作为代理,拦截并解密HTTPS。
步骤:
-
安装mitmproxy:
pip install mitmproxy
-
启动拦截代理:
mitmproxy --mode transparent --ssl-insecure
-
配置iptables重定向流量:
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 8080
-
查看明文流量:
通过mitmproxy控制台实时查看或导出流量。
方法4:使用调试工具(strace/gdb)
适用场景:调试单个进程的TLS通信(不推荐生产环境)。
示例(strace):
strace -e trace=read,write -s 9999 -p <PID> 2>&1 | grep 'read\|write'
此方法可能输出加密数据片段,需结合其他分析。