导读:
Shadowrocket HTTPS解密完全指南:从证书配置到流量分析实战
在iOS网络调试与代理工具领域,Shadowrocket(俗称"小火箭")凭借其强大的MitM(Man-in-the-Middle)HTTPS解密功能,成为开发者、安全研究员和高级用户分析加密流量的利器,本文将深入剖析HTTPS解密的底层原理,并提供从证书配置到实战抓包的完整操作手册。
技术原理:HTTPS解密的工作机制
1 为什么需要解密HTTPS?
传统HTTP代理只能看到加密后的TLS流量(乱码),而HTTPS解密通过本地MitM攻击原理,在客户端与服务器之间插入代理层:
- 客户端 ↔ Shadowrocket(伪装服务器) ↔ 真实服务器
- Shadowrocket使用自签CA证书与客户端通信,同时作为正常客户端与目标服务器建立TLS连接
2 证书信任链的关键
iOS 10.3+系统引入了更严格的证书策略,必须完成"安装→信任"双重验证:
- 描述文件安装(Settings → General → VPN & Device Management)
- 根证书信任(Settings → General → About → Certificate Trust Settings)
环境准备与证书配置
1 生成CA证书
在Shadowrocket中操作:
Config → MitM → Configure CA → Generate New CA
关键参数:
- 密钥算法:RSA 2048位(兼容性好)或ECC P-256(性能优)
- 有效期:建议365天(过期需重新配置)
- 通用名称(CN):建议自定义为
Shadowrocket-MitM-[日期]以便识别
2 证书安装流程
- 导出证书:点击"Export CA Certificate" → 选择"Copy to Clipboard"或AirDrop传输
- 安装描述文件:Safari访问
http://mitm.shadowrocket.app(本地服务)或手动导入.crt文件 - 系统信任(最易遗漏步骤):
设置 → 通用 → 关于本机 → 证书信任设置 → 开启"Shadowrocket CA"
3 证书备份策略
建议将生成的.p12文件(含私钥)加密保存至iCloud钥匙串或1Password。私钥泄露将导致所有解密流量可被第三方窃取。
Shadowrocket解密配置详解
1 基础MitM配置
进入Config → MitM:
- Enable MitM:总开关
- Skip Server Name:排除不解密的域名(如银行类
*.bank.com) - Force HTTP Capture:强制捕获HTTP/1.1明文流量
2 主机名匹配规则
在Hostname字段配置解密范围(支持通配符):
*.m.uber.com
# 解密广告域名(用于去广告重写)
*.googleadservices.com
*.doubleclick.net
# 排除敏感域名(防止证书 pinning 导致App崩溃)
*.apple.com
*.icloud.com
3 与模块(Module)联动
高级用法:结合JavaScript模块实现动态解密:
// 示例:仅解密特定路径
const mitmConfig = {
"hostname": "*.example.com",
"filter": (request) => {
return request.url.includes("/api/v1/private");
}
};
实战应用场景
1 API接口逆向分析
场景:分析某电商App的加密请求参数
- 配置解密该App的API域名(如
*.m.jd.com) - 开启Shadowrocket的"Recent Requests"日志
- 在App内操作后查看明文JSON请求体
- 导出HAR文件至Charles或Burp Suite深度分析
2 HTTPS去广告与重写
通过解密广告请求,结合脚本修改响应:
[Script] AdBlock = type=http-response,pattern=^https?:\/\/api\.example\.com\/ads,requires-body=1,script-path=adblock.js
注意:部分App使用SSL Pinning(证书固定),需配合SSL Kill Switch 2等工具绕过。
3 调试WebView混合内容
当App内嵌H5页面出现"Mixed Content"警告时,通过MitM注入CORS头:
[Header Rewrite] ^https?://internal\.corp\.com header-add Access-Control-Allow-Origin *
安全与合规警示
1 重大安全风险
- 证书私钥泄露:若导出
.p12文件未加密,他人可伪造任意HTTPS网站 - 公共Wi-Fi场景:MitM配置在恶意网络中可能被利用(建议配合"Excluded Routes"排除不信任网络)
2 隐私保护建议
- 最小化原则:仅添加必要的hostname到解密列表,避免全局解密
- 及时清理:定期在
Recent Requests中清除敏感日志 - 银行/支付类App:务必加入Skip List,防止触发风控或资金风险
3 法律合规边界
- 禁止:解密他人账户数据、爬取受保护的商业API、绕过DRM
- 允许:调试自己开发的App、分析公开API、网络安全研究(需授权)
故障排查与优化
1 证书已安装但解密失败
诊断流程:
- 检查系统时间(证书有效期验证)
- 确认"Certificate Trust Settings"中已启用(iOS 15+需重启Shadowrocket)
- 测试Safari访问
https://www.baidu.com,查看证书链是否为Shadowrocket CA
2 特定App无法解密(SSL Pinning)
现象:App闪退或显示"网络错误" 解决方案:
- 将该App域名加入Skip List
- 使用TrollStore安装SSL Kill Switch 2(需越狱或巨魔商店)
- 部分App使用双向TLS(mTLS),此类流量无法通过常规MitM解密
3 性能优化
- 连接复用:开启
TCP Fast Open减少握手开销 - 分流优化:使用
GEOIP规则避免国内流量解密(减少CPU占用) - 日志级别:生产环境关闭"Verbose Logging"
进阶技巧
1 与PC端抓包工具联动
通过Shadowrocket的"HTTP Capture"功能导出PCAPNG文件,在Wireshark中分析:
Recent Requests → Share → Export as PCAP
2 自动化证书轮换
使用Shortcuts快捷指令每月自动重新生成CA证书,防止长期固定证书带来的安全风险。
3 多设备证书同步
通过iCloud Drive同步shadowrocket-mitm.pem文件,配合配置文件的p12参数实现多设备一致体验:
[MITM]
enable = true
ca-p12 = base64://{base64encoded_p12}
ca-passphrase = your_password
Shadowrocket的HTTPS解密功能是一把双刃剑:对开发者而言是调试神器,对普通用户而言是隐私黑洞,建议仅在必要时开启,并严格遵循"最小权限原则",随着iOS安全机制的升级(如Certificate Transparency、App Transport Security),MitM配置将越来越复杂,建议持续关注Shadowrocket的更新日志以适配最新系统特性。
最后提醒:完成调试后,务必在Settings → General → About → Certificate Trust Settings中关闭信任并删除CA证书,防止长期暴露攻击面。