2016-04-01 132 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方法中檢查下一個證書是否是你的。