证书路径中的证书顺序



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

我尝试了两种方法:

  1. 在 CertPath 中传递 B 和 C,将 A 作为受信任的锚点传递。
  2. 在 CertPath 中传递 C,A 作为受信任的定位点,B 作为 CertStore。

这两种方法都不起作用。问题是验证器从 CertPath 获取索引 0 处的元素,然后为其查找受信任的锚点。C 由 B 签名,该 B 不是受信任的锚点,因此失败。

我希望它像这样工作:

  1. 指定要验证的证书。
  2. 指定受信任的定位点。
  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 是否签署您的证书,如果是,则检查根是否对此 CA 签名。

相关内容

  • 没有找到相关文章

最新更新