2015-05-14 61 views
19

我有一个应用程序,可以选择安装CA证书,它被存储在可信凭证的用户选项卡中,它按预期工作。如何删除应用程序安装的可信CA证书在卸载应用程序

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); 

如果应用程序是卸载的证书仍然在信任的凭证

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

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

FYI(我没有测试though.Hopefully应该有一次我测试了它work..I会更新)

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) 

           } 
          } 
         } 

即使你认为上面的代码虽然工作据我所知,我可以” t注册广播接收器卸载我自己的应用程序。

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

任何帮助表示赞赏!

+3

没有办法做到这一点,正是因为卸载过程不是由您的代码处理。这就是Android的设计。你只能希望用户不会忘记明确地做到这一点。 –

+0

@SargeBorsch - Are you sure?..但是keystore提供了一个公共API http://goo.gl/bDbiaI –

+0

据我所知,没有办法从应用程序监听卸载事件。不过,您可以通过定期发送“你在那里?”找到一种方法来保持分析的轨迹。带有推送服务的消息(无应答=卸载逻辑,是的不好)。但仍然无法解决您的移除证书问题。我也想知道是否有这个解决方案 – Ercan

回答

1

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

+0

你是对的!但一致性是问题 –

0

山移动已经在博客这是由于DigiNotar事件,并提供了一些相当不错(读:长条)的指令,你可以在这里找到。

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

+0

你可以给我链接LookOut移动博客关于这个问题? –

0

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

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

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

另一个问题的解决方案可能是您的应用程序有一个菜单项“卸载MyCertApp”。我不知道应用程序是否可以卸载itselt

+0

正如你所说,我们可以使用第二个应用捕获广播的意图但它不是正确的方式。未经用户许可卸载不允许第三方应用程序(http://stackoverflow.com/a/10483669/730807) –

+0

@Durai我同意第二个卸载应用程序“它不是正确的路要走”,虽然卸载程序只会卸载本身(另一个应用程序已被卸载)。 – k3b

相关问题