我有3个证书-根CA [A],中级CA [B]和一些由B [C]签名的证书。我想在Java中验证C。我此时已禁用CRL和OCSP。 Java使用PKIXCertPathValidator实现在后台进行验证。
我尝试了两种方法:
这两种方法均无效。问题是验证器从CertPath的索引0处获取元素,然后为其寻找可信锚。 C由不是可信锚的B签名,因此失败。
我希望它像这样工作:
答案 0 :(得分:0)
我想您想要这样的方法:
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进行了签名。