在Android KitKat之前,您需要root您的设备才能安装新证书。
从Android KitKat(4.0)到Marshmallow(6.0),这是可能且容易的。我能够在未root的设备上安装Charles Web Debbuging代理证书并成功地嗅探SSL流量。
摘自http://wiki.cacert.org/FAQ/ImportRootCert
在Android 4.0之前的版本(Gingerbread和Froyo),有一个只读文件(/system/etc/security/cacerts.bks),其中包含所有默认受信任的CA(“系统”)证书的信任存储。系统应用程序和使用Android SDK开发的所有应用程序都使用此文件。以下是在Android Gingerbread,Froyo等上安装CAcert证书的说明...
从Android 4.0开始(Android ICS /“冰淇淋三明治”,Android 4.3“果冻豆”和Android 4.4“奇巧巧克力”),系统信任的证书以单独的文件形式存在于(只读)系统分区中的“/system/etc/security/”文件夹中。但是,现在用户可以轻松添加自己的“用户”证书,这些证书将存储在“/data/misc/keychain/certs-added”中。
可以在Android设备的“设置”->“安全”->“证书”->“系统”部分中管理系统安装的证书,而用户信任的证书则在那里的“用户”部分中管理。当使用用户信任的证书时,Android会强制要求Android设备的用户实施额外的安全措施:使用PIN码、图案锁或密码解锁设备是使用用户提供的证书时强制要求的。
将CAcert证书安装为“用户信任”的证书非常容易。将新证书安装为“系统信任”的证书需要更多的工作(并需要root访问权限),但它具有避免Android锁屏要求的优点。
从Android N(7.0)开始,情况变得有点困难,请参考Charles代理网站的以下内容:
从Android N开始,您需要在应用程序中添加配置才能使其信任由Charles SSL代理生成的SSL证书。这意味着您只能与您控制的应用程序一起使用SSL代理。
为了配置您的应用程序以信任Charles,您需要将Network Security Configuration文件添加到您的应用程序中。此文件可以覆盖系统默认设置,使您的应用程序信任用户安装的CA证书(例如Charles根证书)。您可以指定仅在应用程序的调试版本中应用此设置,以便生产版本使用默认的信任配置文件。
将文件res/xml/network_security_config.xml添加到您的应用程序中:
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
然后在您的应用程序清单中添加对此文件的引用,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>