Java 获取证书链

Java 获取证书链,java,cryptography,certificate,x509certificate,digital-certificate,Java,Cryptography,Certificate,X509certificate,Digital Certificate,我正在使用Java中的X509证书给定证书在到达根证书之前,是否可以在签名层次结构中找到所有其他证书? 我有一个证书文件(扩展名为.cer),我想提取父签名证书。我希望继续查找该证书的父级,直到获得最终的根证书(自签名) 我在java.security.cert中检查了X509Certificate证书API和相关API,但没有找到任何有用的东西。这并不难-假设您以某种方式/带外方式在一个或多个密钥链中获得了所有中间证书和根证书 看看 http://codeautomate.org/blog/2

我正在使用Java中的X509证书给定证书在到达根证书之前,是否可以在签名层次结构中找到所有其他证书?

我有一个证书文件(扩展名为
.cer
),我想提取父签名证书。我希望继续查找该证书的父级,直到获得最终的根证书(自签名)


我在
java.security.cert
中检查了X509Certificate证书API和相关API,但没有找到任何有用的东西。

这并不难-假设您以某种方式/带外方式在一个或多个密钥链中获得了所有中间证书和根证书

看看

http://codeautomate.org/blog/2012/02/certificate-validation-using-java/
为了一个被剪掉的代码,它就是这样做的。关键位位于validateKeyChain()中,基本上由

   cert = cert-to-validate
   while(not self signed) {
       extract issuer from cert
       scan keychain(s) to find cert with a subject equal to the issuer
       if none found - error
       check if the signature is correct.
       cert = issuers_cert
   }
   if not at the top/root - error
至于如何获得中间/根证书,则是另一个问题。请注意,这段代码有点幼稚,不太理解交叉签名。java pkix调用Through-BouncyCastle有一个例子


您通常可以将根证书构建到密钥链中;但中间证书通常需要更动态地“收集”或发现。这通常需要在TLS或类似过程中查询SSL堆栈。

可能的重复项没有可靠的方法来执行此操作。看到我的答案了吗?你试过了吗?