如何在卸载应用程序时删除App安装的可信CA证书

时间:2015-05-14 18:21:50

标签: java android ssl-certificate uninstall keystore

我有一个应用程序,提供安装CA证书的选项,它存储在受信任的凭据的用户选项卡中,并且按预期工作。

仅供参考 (这是我安装证书的方式):

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的{​​{3}}方法删除证书。

仅供参考 (我还没有测试过。希望它可以正常工作......我会在测试后更新)

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我也无法注册广播接收器来卸载我自己的应用程序。

如何在卸载我的应用时删除我的应用安装的证书?

感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

您无法为自己的软件包卸载软件包的广播。 这可能会导致系统不一致。 请参阅此answer

答案 1 :(得分:0)

由于DigiNotar事件,Lookout Mobile已经在博客上发表了这篇文章,并提供了一些相当不错的(阅读:冗长的)说明,你可以在这里找到。

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

答案 2 :(得分:0)

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

卸载应用程序MyCertApp后,将播放事件ACTION_PACKAGE_REMOVED。在MyCertApp中处理ACTION_PACKAGE_REMOVED的代码当时已经消失了。

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

另一个低调的解决方案可能是您的应用有一个菜单项&#34;卸载MyCertApp&#34;。我不知道应用程序是否可以卸载itselt