lee.2m 2025-11-04 02:20 采纳率: 97.7%
浏览 0
已采纳

Fiddler抓包手机时HTTPS请求无法捕获

在使用Fiddler抓取手机HTTPS请求时,常出现无法捕获加密流量的问题。主要原因是未正确配置手机信任Fiddler根证书或未开启HTTPS解密功能。Fiddler默认不拦截HTTPS流量,需在Options → HTTPS中勾选“Decrypt HTTPS traffic”并安装Fiddler证书。此外,移动端(尤其是Android 7及以上或iOS)不会自动信任PC导出的证书,必须手动将Fiddler根证书(可通过http://fiddler:8888下载)安装至设备受信凭证。若证书不被信任,系统会中断SSL连接,导致抓包失败。同时需确保手机代理指向Fiddler所在主机IP及8888端口,且防火墙允许通信。忽略任一环节均可能导致HTTPS请求无法捕获。
  • 写回答

1条回答 默认 最新

  • 冯宣 2025-11-04 08:51
    关注

    使用Fiddler抓取手机HTTPS请求的深度解析与实战指南

    1. 问题背景与基本原理

    Fiddler作为一款强大的HTTP调试代理工具,广泛应用于Web和移动端接口调试中。其核心机制是通过中间人(Man-in-the-Middle, MITM)方式拦截客户端与服务器之间的通信流量。

    然而,在处理HTTPS协议时,由于SSL/TLS加密的存在,Fiddler默认不会解密或捕获加密内容,除非显式启用HTTPS解密功能并正确配置证书信任链。

    常见表现:手机设置代理后,HTTP请求可正常捕获,但HTTPS请求无记录或显示“Tunnel to”状态,表明连接被隧道化而未解密。

    2. 核心配置步骤详解

    1. 开启Fiddler HTTPS解密功能:进入 Fiddler → Tools → Options → HTTPS,勾选“Decrypt HTTPS traffic”。
    2. 信任Fiddler根证书:在同一页面点击“Actions” → “Trust Root Certificate”,确保证书已安装至系统受信根证书存储区。
    3. 获取Fiddler证书地址:通过浏览器访问 http://fiddler:8888 下载 FiddlerRoot certificate(.cer 或 .pem 文件)。
    4. 配置手机代理:将移动设备Wi-Fi代理设为手动,IP指向运行Fiddler的PC局域网IP,端口设为8888。
    5. 安装并信任手机端证书:Android需进入“设置 → 安全 → 加密与凭据 → 安装证书”;iOS则通过Safari打开下载链接后在“通用 → 关于本机 → 证书信任设置”中启用完全信任。
    6. 检查防火墙策略:确保Windows防火墙或其他安全软件允许8888端口入站连接。
    7. 验证网络连通性:使用ping [手机IP]telnet [PC_IP] 8888测试双向通信。
    8. 关闭系统级安全限制:部分Android应用(如银行类App)采用证书绑定(Certificate Pinning),需通过Xposed或Magisk模块绕过。
    9. 启用Fiddler日志输出:在Fiddler的Log Viewer中查看是否出现“HTTPS handshake failed”等错误信息。
    10. 重启服务与清理缓存:重启Fiddler、手机网络及目标App,避免旧会话干扰。

    3. 常见问题分类与诊断流程图

    以下为典型故障排查路径:

            ```mermaid
            graph TD
                A[无法捕获HTTPS流量] --> B{Fiddler是否启用Decrypt HTTPS?}
                B -- 否 --> C[勾选Options → HTTPS → Decrypt HTTPS traffic]
                B -- 是 --> D{手机是否安装Fiddler根证书?}
                D -- 否 --> E[访问http://fiddler:8888下载并安装]
                D -- 是 --> F{证书是否被系统完全信任?}
                F -- 否 --> G[iOS需开启“完全信任”/Android需置于CA存储]
                F -- 是 --> H{代理设置是否正确?}
                H -- 否 --> I[确认IP+端口+Wi-Fi代理模式]
                H -- 是 --> J{防火墙是否放行8888端口?}
                J -- 否 --> K[添加入站规则允许TCP 8888]
                J -- 是 --> L[检查App是否启用证书锁定]
            ```
        

    4. 不同平台的信任机制差异对比

    平台证书安装路径是否自动信任特殊要求适用Fiddler版本
    Android 6及以下设置 → 安装证书需用户密码保护Fiddler Everywhere兼容
    Android 7+必须放入系统CA分区需root或使用ADB push至/system/etc/security/cacertsFiddler Classic推荐
    iOS 10~16Safari下载 → 通用 → 描述文件需在“证书信任设置”中手动启用所有版本支持
    Windows PC自动导入当前用户证书 store管理员权限安装原生支持
    macOS钥匙串访问导入需手动标记为“始终信任”重启浏览器生效Fiddler Classic for Mac
    HarmonyOS类似Android 7+依赖厂商实现,部分机型限制严格实验性支持

    5. 高级场景与应对策略

    现代App常采用高级防护手段对抗抓包行为,主要包括:

    • 证书固定(Certificate Pinning):App内嵌特定公钥指纹,拒绝任何第三方CA签发的证书,包括Fiddler生成的临时证书。
    • 动态域名检测:某些SDK会在运行时检测是否存在代理环境,主动终止敏感请求。
    • 非标准TLS实现:使用BoringSSL定制握手流程或禁用SNI扩展,导致Fiddler无法建立MITM连接。

    解决方案包括:

            # 使用 Frida 脚本绕过OkHttp证书校验(示例片段)
            Java.perform(function () {
                var CertificatePinner = Java.use('okhttp3.CertificatePinner');
                CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function (a, b) {
                    console.log("[*] Bypassing CertificatePinner");
                    return;
                };
            });
        

    此外,可结合Charles Proxy、mitmproxy等工具进行交叉验证,提升调试效率。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月5日
  • 创建了问题 11月4日