如何删除应用程序安装受信任的CA证书在卸载应用程序

我有一个应用程序,它提供了安装CA证书的选项,它存储在Trusted Credentials的用户选项卡中,并按预期工作。

FYI (这是我如何安装证书):

Intent installIntent = KeyChain.createInstallIntent(); javax.security.cert.X509Certificate x509 = javax.security.cert.X509Certificate.getInstance(caRootCertBytes); installIntent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded()); installIntent.putExtra(KeyChain.EXTRA_NAME,caRootCertName); startActivity(installIntent); 

如果应用程序已卸载 ,证书将保留在可信凭证中

我希望在卸载应用程序时卸载证书。

我想使用KeyStore deleteEntry方法删除证书。

仅供参考 (我没有testing虽然。希望它应该工作..我会更新一次,我testing了它)

 javax.security.cert.X509Certificate x509 = javax.security.cert.X509Certificate.getInstance(caRootCertBytes); KeyStore ks = KeyStore.getInstance("AndroidCAStore") if (ks != null) { ks.load(null, null); Enumeration<String> aliases = ks.aliases(); while (aliases.hasMoreElements()) { String alias = (String) aliases.nextElement(); java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias); String name = x509.getIssuerDN().getName(); if (cert.getIssuerDN().getName().contains(name)) { ks. deleteEntry(alias) } } } 

即使如果你考虑以上代码作品AFAIK我不能注册广播接收器卸载我自己的应用程序。

我怎样才能去卸载我的应用程序安装在我的应用程序卸载的证书?

任何帮助表示赞赏!

Solutions Collecting From Web of "如何删除应用程序安装受信任的CA证书在卸载应用程序"

你不能得到包装卸载自己的包的广播。 这可能会导致系统不一致。 看到这个答案

由于DigiNotar事件,Lookout Mobile已经对此进行了博客,并提供了一些相当不错的(阅读:冗长)说明,你可以在这里find。

其要点是,您需要取出/system/etc/security/cacerts.bks,然后从存储中删除CA,然后将存储推回设备并重新启动。 他们的指示要求你有Bouncy Castle(用于解密商店),root访问权限和一个可用的adb连接。 我不确定这是否适用于所有版本的Android,但我猜测,CA商店的位置在相当一段时间(如果有的话)没有改变。

据我所知只有一个广播,告诉卸载已完成ACTION_PACKAGE_REMOVED

卸载应用程序MyCertApp后,会广播ACTION_PACKAGE_REMOVED事件。 当时处理MyCertApp中ACTION_PACKAGE_REMOVED的代码已经失效了。

您只能使用第二个独立的应用程序进行后期处理,该应用程序仍然存在,并且可以在收到MyCertApp消失后自行卸载。

另一个解决scheme可能是你的应用程序有一个菜单项“卸载MyCertApp”。 我不知道是否有可能为应用程序卸载itselt