【发布时间】:2015-07-26 11:55:00
【问题描述】:
我有一个应用程序提供安装 CA 证书的选项,它存储在 Trusted Credentials 的用户选项卡中,并且按预期工作。
仅供参考 (这是我安装证书的方式):
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 方法删除证书。
仅供参考 (虽然我还没有测试过。希望它应该可以工作。我会在测试后更新)
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)
}
}
}
即使您认为上述代码有效,我也无法注册广播接收器以卸载我自己的应用程序。
我如何才能在卸载我的应用时删除我的应用安装的证书?
感谢任何帮助!
【问题讨论】:
-
没有办法做到这一点,正是因为卸载过程不是由您的代码处理的。 Android就是这样设计的。您只能希望用户不会忘记明确地执行此操作。
-
@SargeBorsch - 你确定吗?..但是密钥库提供了一个公共 API goo.gl/bDbiaI
-
据我所知,没有办法监听应用程序的卸载事件。但是,您可以通过定期发送“你在吗?”来找到跟踪分析的方法。带有推送服务的消息(没有答案=已卸载逻辑。是的,很糟糕)。但它仍然不能解决您删除证书的问题。我也想知道有没有办法解决这个问题
-
@Ercan - 当然,如果我找到任何解决方案,我会告诉你
标签: java android ssl-certificate uninstallation keystore