我的应用程序在Android 4.0.1及更高版本上运行。我使用以下代码以编程方式在系统范围的凭据存储中安装PKCS12证书:
Intent intent = KeyChain.createInstallIntent();
byte[] p12 = readFile("myCa.p12");
intent.putExtra(KeyChain.EXTRA_PKCS12, p12);
startActivity(intent);
上面的代码弹出系统对话框来安装证书,这意味着它需要用户交互,此时此功能还可以。
接下来,我想实现另一个功能,可以检查是否已经在凭证存储中安装了特定证书(假设我知道证书名称和别名)。我不知道如何实现它?有人可以给我一些建议吗?
(没有这个功能的用户交互会很好)
答案 0 :(得分:0)
当我使用droid的证书时,我使用此代码获取证书列表(包括由用户安装):
public interface CertificateValidator {
boolean valid(X509Certificate cert);
}
public boolean findInstalledCertificate(final CertificateValidator validator) {
try {
final KeyStore ks = KeyStore.getInstance("AndroidCAStore");
if (ks != null) {
ks.load(null, null);
final Enumeration<String> aliases = ks.aliases();
while (aliases.hasMoreElements()) {
final String alias = aliases.nextElement();
final X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias);
if (validator.valid(cert)) return true;
}
}
} catch (IOException
| KeyStoreException
| CertificateException
| NoSuchAlgorithmException e) {
e.printStackTrace();
}
return false;
}
因此,您可以检查valid
方法下一个证书是否属于您。