Certificate 如何获得X509证书';什么是程序化的完整证书链?

Certificate 如何获得X509证书';什么是程序化的完整证书链?,certificate,certificate-authority,java,validation,Certificate,Certificate Authority,Java,Validation,假设我有一个包含私钥和公共证书的p12容器。当我使用Java keytool将p12公共证书导出到单独的.cer文件时,我可以单击到.cer文件并查看完整的证书链。如何通过编程获得完整路径 我没有做什么调查。我使用了keytool的print cert-v命令,并将属性AuthorityInfoAccess与子属性一起使用 accessMethod: caIssuers accessLocation: URIName: http://.../some.crt 我下载了some.crt(它是PE

假设我有一个包含私钥和公共证书的p12容器。当我使用Java keytool将p12公共证书导出到单独的.cer文件时,我可以单击到.cer文件并查看完整的证书链。如何通过编程获得完整路径

我没有做什么调查。我使用了keytool的
print cert-v
命令,并将属性
AuthorityInfoAccess
与子属性一起使用

accessMethod: caIssuers
accessLocation: URIName: http://.../some.crt
我下载了some.crt(它是PEM证书),再次使用
print cert-v
并再次看到
accessLocation:Urineme:http://.../some2.crt
并重复下载.crt文件和获取父级,直到找到根.crt,而根.crt没有这样的属性

我认为,我应该按上面所述的编程方式下载该链,并将其提供给
CertPathValidator
,如图所示

如果我真的需要如上所述获取链,是否有库已经这样做了?有没有办法用std lib实现这一点?我没有找到像bouncycastle这样的例子和java的标准库代码

java.security.cert.Certificate[]cchain=keystore.getCertificateCain(别名)


返回一个包含两个“父项”的证书条目。

吹毛求疵:您的意思肯定是
keytool-printcert
(带连字符,不带空格,
-v

Java在JKS或PKCS12中创建的privatekey条目通常包含完整的链,但
keytool-exportcert
仅提取叶证书。 由其他内容创建的PKCS12可能包含或不包含完整链,这可能取决于您在创建它时单击的内容。 如果链在那里,
KeyStore.getCertificateChain
返回它,并且
keytool-list-v
(这里
-v
很重要)显示它

如果证书作为trustedcert条目导入或重新导入(通常在JKS中,PKCS12不是为不包含链的单独证书而设计的),那么该条目上的
getCertificateChain
将不起作用,但IIRC
CertPathBuilder
可以在一个存储中构建一个组合多个trustedcert条目的链

如果您确实需要家长(链)证书 您还没有,并且子级指定了AIA.caIssuers,那么使用它来获取是明智的。
我敢肯定,至少到目前为止,标准Java(JRE)库中没有任何东西可以为您实现这一点;我不知道BouncyCastle或其他任何人。

请将您的帖子缩小到一个问题。@DeerHunter,我排除了一些问题。