gpt4 book ai didi

java - CertPath 中的证书顺序

转载 作者:行者123 更新时间:2023-12-02 04:46:17 25 4
gpt4 key购买 nike

我有 3 个证书 - 根 CA [A]、中间 CA [B] 和一些由 B [C] 签名的证书。我想在java中验证C。我当时禁用了 CRL 和 OCSP。 java 使用 PKIXCertPathValidator 实现进行底层验证。

我尝试了两种方法:

  1. 在 CertPath 中传递 B 和 C,并将 A 作为可信 anchor 传递。
  2. 在 CertPath 中传递 C,将 A 作为可信 anchor 传递,将 B 作为 CertStore 传递。

这两种方法都行不通。问题是 validator 从 CertPath 中获取索引 0 处的元素,然后为其查找可信 anchor 。 C 由 B 签名,而 B 不是受信任的 anchor ,因此失败。

我希望它像这样工作:

  1. 指定您要验证的证书。
  2. 指定可信 anchor 。
  3. 提供一堆可能是中级 CA 的证书。
  4. 验证证书。

最佳答案

我猜你想要这样的方法:

public static boolean verify(X509Certificate certificateToValidate, List<X509Certificate> potentialCAs, X509Certificate root) {
for(X509Certificate potentialCa : potentialCAs) {
try {
certificateToValidate.verify(potentialCa.getPublicKey());
potentialCa.verify(root.getPublicKey());
return true; // there was CA that signed you cert and this ca is signed by root
} catch (Exception e) {
//not valid
}
}

return false; // validation failed
}

您只需循环遍历您的潜在 CA 并检查此 CA 是否签署了您的证书,如果是,您检查 root 是否签署了此 CA。

关于java - CertPath 中的证书顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56480731/

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