在 Android 上,我需要验证服务器提供的证书是否在 CRL 中。为此,我在另一个答案中发现,这将是一种方法:
public static TrustManager[] getCATrustManager(KeyStore trustStore) {
CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");
PKIXRevocationChecker rc = (PKIXRevocationChecker)cpb.getRevocationChecker();
rc.setOptions(EnumSet.of(
PKIXRevocationChecker.Option.PREFER_CRLS, // prefer CLR over OCSP
PKIXRevocationChecker.Option.ONLY_END_ENTITY,
PKIXRevocationChecker.Option.NO_FALLBACK)); // don't fall back to OCSP checking
PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(trustStore, new X509CertSelector());
pkixParams.addCertPathChecker(rc);
TrustManagerFactory tmFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmFactory.init(new CertPathTrustManagerParameters(pkixParams));
...
}
我的问题是,如何获取默认的 Android 信任存储?我检查了我的手机,已经安装了很多 CA,但我无法找到以编程方式获取它的方法。到目前为止我所看到的只是如何获得自己创建的一个,而不是Android默认的。
static KeyStore getDefaultCertKeyStore() throws KeyStoreException {
KeyStore keyStore = KeyStore.getInstance("AndroidCAStore");
try {
keyStore.load((InputStream)null, (char[])null);
return keyStore;
} catch (CertificateException | NoSuchAlgorithmException | IOException var2) {
throw new KeyStoreException(var2);
}
}