2016-04-01 138 views
1

我的应用在Android 4.0.1及更高版本上运行。我用下面的代码在系统范围的凭证存储编程方式安装一个PKCS12证书:检查安装在系统凭证存储中的证书

Intent intent = KeyChain.createInstallIntent(); 
byte[] p12 = readFile("myCa.p12"); 
intent.putExtra(KeyChain.EXTRA_PKCS12, p12); 
startActivity(intent); 

上述代码弹出系统对话框安装证书,这意味着它需要用户的交互,它是在这一点上细。

接下来,我想实现它可以在证书存储检查是否与特定证书已经安装或没有其他功能(假设我知道证书名称&别名)。我不知道如何实现?有人可以给我一些建议吗?

(这将是不错的,从这个功能没有用户交互)

回答

1

当我打了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方法中检查下一个证书是否是你的。