gpt4 book ai didi

Android手动X509证书链验证

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:38 26 4
gpt4 key购买 nike

我已经在我的代码中实现了 javax.net.ssl.X509TrustManager,所以我可以验证我的软件访问的自签名证书。但是,我仍然需要验证其他一些“标准”网站 SSL 证书。我正在使用 CertPathValidator.validate() 来做到这一点,但我刚刚意识到我正在传递的一个证书链(对于 maps.googleapis.com)实际上并不包含完整的链 - 它包含整个链,但根 CA (Equifax) 确实存在于手机上,但 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);

最佳答案

实现您自己的 TrustManager 通常不是一个好主意。更好的方法是将您的证书添加到 keystore ,并将其添加为信任库。参见 this有关如何操作的示例。

您可能需要将默认信任库添加到您的验证器。此外,Android 默认不执行撤销 (CRL) 检查,因此如果启用它,则需要手动获取相关的 CRL。发布您的代码。

关于Android手动X509证书链验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com