检查系统凭据存储中安装的证书

时间:2016-04-01 14:25:30

标签: android ssl keychain

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

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

上面的代码弹出系统对话框来安装证书,这意味着它需要用户交互,此时此功能还可以。

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

(没有这个功能的用户交互会很好)

1 个答案:

答案 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方法下一个证书是否属于您。