代码之家  ›  专栏  ›  技术社区  ›  Brian

Android emulator无法信任Charles代理证书

  •  0
  • Brian  · 技术社区  · 4 年前

    我在跟踪 this tutorial 在Android 7版模拟器上监视https流量。

    我发现一件奇怪的事是,我下载的证书 chls.pro/ssl 与我通过Charles proxy访问网站时遇到的证书不同。

    这是我从

    enter image description here

    可以从设置中查看此证书->安全性->受信任的凭据->用户选项卡。

    这是我通过Charles proxy访问任何网站时发现的证书:

    enter image description here

    正如你从图片中看到的,他们的指纹是不同的。

    这使得我的Android emulator在通过Charles代理访问网站时无法信任证书。

    enter image description here

    为什么证书不同?

    如何在Android emulator上查看https流量?

    我使用的是最新的Charles代理,版本是4.5.6。

    ======================编辑==================================

    安全警告是由模拟器上的浏览器引起的。

    我最初使用“浏览器”7.1.2版访问一个网站。

    enter image description here

    用Chrome替换后,安全警告不再出现。我可以查看Chrome和网站之间的https流量。

    但我仍然无法查看Android应用程序和服务器之间的https流量。

    enter image description here

    这是我的 network_security_config.xml

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config>
            <trust-anchors> 
                <!-- Trust user added CAs -->
                <certificates src="user" overridePins="true" />
            </trust-anchors> 
        </base-config>
    </network-security-config>
    

    ======================编辑==================================

    Android应用程序的apk文件是从google play下载的。

    以下是我对apk文件所做的操作

    1. 获取apk文件 Apk Extractor .

    2. 使用 apktool d ${APK_FILE}.apk 提取文件。

    3. 修改其 网络安全配置。xml AndroidManifest.xml

    4. apktool b ${APK_FILE} 将提取的文件还原回apk文件。

    5. apksigner sign -ks my-key.keystore ${APK_FILE}/dist/${APK_FILE}.apk 签署apk文件。

    6. 将apk文件放入Android emulator并安装。

    我不确定上述步骤是否会导致应用程序无法信任Charles证书。

    这是原件 网络安全配置。xml 在我修改它之前。

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" />
        <domain-config cleartextTrafficPermitted="false">
            <domain includeSubdomains="true">appapi.appname.com</domain>
        </domain-config>
    </network-security-config>
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   Tim Perry    4 年前

    为什么证书不同?

    显示的第一个证书是Charles的“证书颁发机构”(CA)证书。它是自签名的(注意“颁发者”的详细信息与证书的详细信息是如何相同的),并且不适用于特定域。

    第二个证书是由&由Charles的CA证书签名,主题为单个特定域(未显示),可用于验证与该特定域的连接。

    证书信任的工作方式是,您信任一组CA证书,每当您收到要验证的证书时,您都会查看是谁颁发了该证书,并查看您是否基于您拥有的CA信任它们(在某些情况下,信任链中有几个步骤,因此您会一直向前走,直到找到您信任的证书或找到根并放弃)。

    这有意义吗?实际上,Charles预先生成了一个CA,您需要信任它,然后它根据需要为每个需要证书的域生成新证书,并用其CA签名,然后您应该信任这些证书,因为您信任Charles。

    如何在Android emulator上查看https流量?

    显示的证书不是问题的原因,因此很难提供更多详细信息。Charles需要一些手动配置。你能补充更多关于你做了什么以及你看到的错误的信息吗?

    如果你没有和查尔斯结婚, HTTP Toolkit 作为替代方法可能会有所帮助。这是我一直在开发的一个开源工具,因为像这样设置Charles可能会很痛苦。它可以做所有相同的事情,但证书设置是完全自动化的,所以你不会遇到这个问题。