我正在跟踪this tutorial来监视Android 7版模拟器上的https流量。
我感到奇怪的是,我从chls.pro/ssl
下载的证书与通过Charles代理访问网站时遇到的证书不同。
这是我从chls.pro/ssl
获得的证书
可以从“设置”->“安全性”->“可信凭据”->“用户”选项卡中查看此证书。
这是我通过Charles代理访问任何网站时发现的证书:
从图片中可以看到,它们的指纹是不同的。
这使我的Android仿真器在通过Charles代理访问网站时无法信任证书。
为什么证书不同?
如何在Android模拟器上查看https流量?
我正在使用最新的Charles代理,版本为4.5.6。
============================编辑================= =================
安全警告是由模拟器上的浏览器引起的。
我最初使用的是“浏览器” 7.1.2版来访问网站。
在我将其替换为Chrome后,不再显示安全警告。而且我可以查看Chrome和网站之间的https流量。
但是我仍然无法查看Android应用和服务器之间的https流量。
这是错误消息:
这是我的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文件所做的
使用Apk Extractor获取apk文件。
使用apktool d ${APK_FILE}.apk
提取文件。
修改其network_security_config.xml
和AndroidManifest.xml
运行apktool b ${APK_FILE}
将提取的文件还原回apk文件。
运行apksigner sign -ks my-key.keystore ${APK_FILE}/dist/${APK_FILE}.apk
对apk文件签名。
将apk文件放入Android模拟器并安装。
我不确定上述步骤是否会导致应用程序无法信任Charles证书。
这是我修改之前的原始network_security_config.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 :(得分:0)
为什么证书不同?
其中显示的第一个证书是Charles的“证书颁发机构”(CA)证书。它是自签名的(请注意“颁发者”详细信息与证书的详细信息相同),并且不适用于特定域。
第二个证书是由Charles的CA证书颁发并由其签名的网站证书,其主题为单个特定域(未显示),可用于验证与该特定域的连接。 / p>
证书信任的工作方式是,您信任一组CA证书,并且每当收到要验证的证书时,您便查看谁颁发了该证书,并根据所拥有的CA来查看是否信任它们(在某些情况下,信任链中有几个步骤,因此,您逐步进行下去,直到找到您信任的证书或扎根并放弃)。
这有意义吗?在实践中,Charles预先生成了一个您需要信任的CA,然后根据需要为每个需要该域的单个域生成新证书,并用其CA对其进行签名,然后您应该信任那些证书,因为您信任Charles。
如何在Android模拟器上查看https流量?
显示的证书不是造成问题的原因,因此很难提供更多详细信息。 Charles需要一些手动配置。您是否可以添加有关您所做的一切以及所看到的错误的更多信息?
如果您不特别想嫁给Charles,HTTP Toolkit可能会作为替代方法很有用。这是我一直在使用的开源工具,因为Charles可能很难进行这样的设置。它具有相同的功能,但是证书设置是完全自动化的,因此您不会遇到这个问题。