You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在iOS无SSL Pinning时阻止Charles捕获生产应用流量?

阻止Charles捕获生产应用流量的非SSL Pinning方案
  • 检测代理环境:在生产应用里加个逻辑,检查设备是否配置了代理。Charles这类工具会设置系统代理,你可以通过获取系统的代理主机和端口参数来判断。如果检测到非信任的代理存在,直接断网或者拒绝发起请求就行。

    • Android 示例代码:
      String proxyHost = System.getProperties().getProperty("http.proxyHost");
      int proxyPort = Integer.parseInt(System.getProperties().getProperty("http.proxyPort", "-1"));
      if (proxyHost != null && proxyPort != -1) {
          // 检测到非信任代理,禁止网络请求
      }
      
    • iOS 示例代码:
      if let proxySettings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as? [String: Any] {
          let httpProxy = proxySettings[kCFNetworkProxiesHTTPProxy as String] as? String
          let httpPort = proxySettings[kCFNetworkProxiesHTTPPort as String] as? Int
          if httpProxy != nil && httpPort != nil {
              // 检测到代理,拦截请求
          }
      }
      
  • 校验证书链合法性:不用SSL Pinning,但可以检查服务器证书的签发链。Charles会替换成自己的根证书,这时候证书链的根节点不是正规CA的证书。你可以在应用里只预设官方信任的CA根证书,握手时如果发现根证书不在列表里,直接中断连接。

  • 生产包强制关闭调试兼容:打包生产版本时,直接砍掉所有允许调试代理的逻辑。调试版本放开代理支持方便查流量,生产版本强制请求走系统默认通道,不允许任何绕过安全设置的操作。

  • 服务端加签名校验:在客户端发起请求时,生成一个只有生产环境才有效的签名参数(比如结合时间戳、设备信息和密钥生成)。Charles抓到流量后没法伪造这个签名,服务器收到请求直接校验签名,不合法就拒绝,就算流量被抓也没用。

内容的提问来源于stack exchange,提问作者Sudha Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:04:59