我已经在我的代码中实现了
编辑-相关代码(已删除异常检查):
javax.net.ssl.X509TrustManager
,以验证我使用的自签名证书。但是,我仍然需要验证一些其他“标准”的网站SSL证书。我正在使用CertPathValidator.validate()
来完成这个任务,但我刚意识到我被传递的一个证书链(maps.googleapis.com)并没有包含完整的链 - 它包含整个链,但缺少根CA(Equifax),尽管该CA存在于手机中,但validate()
仍然失败,因为(显然)它没有明确地出现在链中。请问我漏掉了什么,以便进行验证成功?谢谢任何回答。编辑-相关代码(已删除异常检查):
CertificateFactory cf = CertificateFactory.getInstance("X.509");
// chain is of type X509Certificate[]
CertPath cp = cf.generateCertPath(Arrays.asList(chain));
CertPathValidator cpv = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream is = new FileInputStream("/system/etc/security/cacerts.bks");
ks.load(is, null);
PKIXParameters params = new PKIXParameters(ks);
CertPathValidatorResult cpvr = cpv.validate(cp, params);
validate()
时,我收到了一个CertPathValidatorException
错误,错误信息为**org.bouncycastle.jce.exception.ExtCertPathValidatorException: No CRLs found for issuer "OU=Equifax Secure Certificate Authority, O=Equifax, C=US"**。 - Conrad