【问题标题】:Charles Proxy for Mobile apps that use SSL Pinning使用 SSL Pinning 的 Charles Proxy for Mobile 应用程序
【发布时间】:2019-03-22 13:38:33
【问题描述】:

Charles Proxy 网站认为:

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

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

【问题讨论】:

  • 固定意味着您验证一组选定的证书或其公钥。从根到叶可以有多个引脚。

标签: ssl ssl-certificate charles-proxy


【解决方案1】:

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

java -jar apktool.jar d app.apk

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

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。 更多信息:Network security configuration

【讨论】:

    【解决方案2】:

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

    当然,您的 HTTP 监控应用程序必须支持指定固定证书。在我看来,Charles Proxy 不支持这一点。但mitmproxy 支持为特定域提供固定证书。

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

    【讨论】:

    • 谢谢史蒂芬。但是如果我不控制该应用正在使用的服务器,那么它是不可能正确的?
    • @StanfordWong:如果您无权访问服务器证书和私钥,那么您无法为应用程序提供它明确期望的证书 - 因此:否。
    • @StanfordWong:正如 Steffen 所说,你必须破解应用程序。这在有根的安卓手机上可能会也可能不会容易。一些应用程序专门寻找 Rootkit,如果找到就拒绝运行。这会让您与应用程序开发人员进行措施对抗战,因为您可以欺骗他们的 root t kit finder,但他们可以无限寻找您的 rootkit-finder-fooler。
    • @SteffenUllrich:题外话,但要明确一点。如果我们实施固定,我们必须拥有私钥还是公钥?
    • @humblePilgrim:固定是针对公钥或包含公钥的证书完成的。
    猜你喜欢
    • 1970-01-01
    • 2017-01-09
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2018-08-13
    • 2018-05-20
    • 2021-10-30
    相关资源
    最近更新 更多