首页 > 解决方案 > 使用 SSL Pinning 的 Charles Proxy for Mobile 应用程序

问题描述

Charles Proxy 网站评论说:

请注意,某些应用程序实施 SSL 证书固定,这意味着它们专门验证根证书。因为应用程序本身正在验证根证书,所以它不会接受 Charles 的证书并且连接会失败。如果您已成功安装 Charles 根 SSL 证书并且可以在 Safari 中使用 SSL 代理浏览 SSL 网站,但应用程序失败,则可能是 SSL Pinning 问题。

可以肯定的是,即使移动应用程序使用 SSL 证书固定,是否也可以使用像 Charles Proxy(或其他监视器)这样的 HTTP 监视器?

标签: sslssl-certificatecharles-proxy

解决方案


正如 Steffen 所说,您可能需要修补应用程序以禁用证书固定。大多数移动应用程序不使用它:) 因此,您只需要使用自签名证书启用 SSL 连接。要允许使用 Android 应用程序执行以下操作。首先下载 apktool。然后解压APK文件(根据apktool 2.4.1):

java -jar apktool.jar d app.apk

AndroidManifest.xml通过将此属性添加到application元素进行修改:

android:networkSecurityConfig="@xml/network_security_config"

创建res/xml/network_security_config.xml具有以下内容的文件:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
   <base-config>
      <trust-anchors>
         <certificates src="system" />
         <certificates src="user" />
      </trust-anchors>
   </base-config>
</network-security-config>

生成用于签署 APK 的密钥:

keytool -genkey -alias keys -keystore keys -keyalg DSA

构建已修补的 APK:

java -jar apktool.jar b app -o app_patched.apk --use-aapt2

签署APK文件:

jarsigner -verbose -keystore keys app_patched.apk keys

如有必要,将 APK 转换为 JAR 以进行进一步分析:d2j-dex2jar.sh app.apk. 更多信息:网络安全配置


推荐阅读