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

我有一个应用程序,它提供了安装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

仅供参考(我还没有测试过。希望它应该工作..一旦我测试它,我会更新)

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

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

任何帮助是值得赞赏的!


答案 1

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


答案 2

由于DigiNotar事件,Lookout Mobile已经在博客上发表了关于此的内容,并提供了一些非常好的(阅读:冗长)说明,您可以在此处找到这些说明。

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


推荐