使用SSL固定的移动应用程序的Charles Proxy

Sta*_*ong 5 ssl ssl-certificate charles-proxy

Charles Proxy网站评论说:

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

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

Ste*_*ich 5

证书固定意味着应用程序明确想要获取原始证书。如果您确实拥有原始证书和关联的私钥(通常意味着您控制应用程序正在使用的服务器),那么即使对于使用证书固定的应用程序,也有可能成为中间人(即HTTP监视器)。

当然,您的HTTP监视应用程序必须支持指定固定证书。在我看来,Charles Proxy不支持此功能。但是mitmproxy支持为特定域提供固定证书。

如果您无权访问预期的证书和匹配的密钥,则无法将预期的证书提供给应用程序。唯一的希望就是通过某种方式破解代码来以某种方式禁用应用程序本身的固定。使用您最喜欢的搜索引擎并搜索“绕过固定android”或类似方法,以多种多样的方式尝试使应用程序相信它已获得预期的证书。


exp*_*ert 5

正如Steffen所说,您可能需要修补应用程序以禁用证书固定。不过,大多数移动应用程序都不使用它:)因此,您只需要使用自签名证书启用SSL连接即可。要允许Android应用程序执行以下操作:

  • 从https://ibotpeaches.github.io/Apktool/下载apktool
  • 解压缩apk文件: java -jar apktool.jar app.apk
  • 通过向元素添加android:networkSecurityConfig="@xml/network_security_config"属性来修改AndroidManifest.xml application。
  • 使用以下内容创建文件/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: java -jar apktool.jar b app -o app_patched.apk
  • 生成密钥以签署apk: keytool -genkey -alias keys -keystore keys
  • 签名apk文件: jarsigner -verbose -keystore keys app_patched.apk keys
  • 如有必要,将apk转换为jar以便进一步分析: d2j-dex2jar.sh app.apk

更多信息:https : //developer.android.com/training/articles/security-config