如何以编程方式获取 X509 证书的完整证书链?
How get X509 certificate's full cert chain programatically?
假设我有私钥的 p12 容器和 public 证书。当我使用 Java 密钥工具将 p12 public 证书导出到单独的 .cer 文件时,我可能会单击到 .cer 文件并查看完整的证书链。我如何以编程方式获得完整路径?
我几乎没有调查。我使用 keytool 的 print cert -v
命令并看到 属性 AuthorityInfoAccess
和 sub属性
accessMethod: caIssuers
accessLocation: URIName: http://.../some.crt
我下载了 some.crt(它是 PEM 证书),然后再次使用 print cert -v
并再次看到
accessLocation: URIName: http://.../some2.crt
并重复下载 .crt 文件并获得 parent 直到到达没有这样的根 .crt 属性.
我认为,我应该按照上面的描述以编程方式下载链并将其提供给 CertPathValidator
,如图 here。
如果我真的需要像上面描述的那样获取链,是否有图书馆已经这样做了?有什么办法可以用 std lib 来实现吗?我没有找到 bouncycastle 示例和 java 的标准库代码,例如
java.security.cert.Certificate[] cchain = keystore.getCertificateChain(alias);
returns 一个证书条目实际上有 2 个“parents”。
吹毛求疵:您肯定是指 keytool -printcert
(带连字符,不带 space,此处不需要 -v
)。
由 Java 在 JKS 或 PKCS12 中创建的私钥条目通常包含完整链,但 keytool -exportcert
提取 仅 叶证书。
由其他东西创建的 PKCS12 可能包含或不包含完整链,这可能取决于您在创建它时单击的内容。
如果链在那里,KeyStore.getCertificateChain
returns它,keytool -list -v
(这里-v
很重要)显示它。
如果证书作为受信任的证书条目导入或重新导入——通常在 JKS 中,PKCS12 不是为单独的证书设计的——它从不包含链,所以 getCertificateChain
在该条目上 将不起作用,但 IIRC CertPathBuilder
可以在一个商店中构建一个组合多个受信任证书条目的链。
如果您确实需要 parent(链)证书
您还没有,并且 child 指定 AIA.caIssuers,那么使用它来获取是明智的。
我很确定标准 Java (JRE) 库中没有任何东西可以为您做这件事,至少到目前为止是这样;我不知道 BouncyCastle 或其他任何人。
假设我有私钥的 p12 容器和 public 证书。当我使用 Java 密钥工具将 p12 public 证书导出到单独的 .cer 文件时,我可能会单击到 .cer 文件并查看完整的证书链。我如何以编程方式获得完整路径?
我几乎没有调查。我使用 keytool 的 print cert -v
命令并看到 属性 AuthorityInfoAccess
和 sub属性
accessMethod: caIssuers
accessLocation: URIName: http://.../some.crt
我下载了 some.crt(它是 PEM 证书),然后再次使用 print cert -v
并再次看到
accessLocation: URIName: http://.../some2.crt
并重复下载 .crt 文件并获得 parent 直到到达没有这样的根 .crt 属性.
我认为,我应该按照上面的描述以编程方式下载链并将其提供给 CertPathValidator
,如图 here。
如果我真的需要像上面描述的那样获取链,是否有图书馆已经这样做了?有什么办法可以用 std lib 来实现吗?我没有找到 bouncycastle 示例和 java 的标准库代码,例如
java.security.cert.Certificate[] cchain = keystore.getCertificateChain(alias);
returns 一个证书条目实际上有 2 个“parents”。
吹毛求疵:您肯定是指 keytool -printcert
(带连字符,不带 space,此处不需要 -v
)。
由 Java 在 JKS 或 PKCS12 中创建的私钥条目通常包含完整链,但 keytool -exportcert
提取 仅 叶证书。
由其他东西创建的 PKCS12 可能包含或不包含完整链,这可能取决于您在创建它时单击的内容。
如果链在那里,KeyStore.getCertificateChain
returns它,keytool -list -v
(这里-v
很重要)显示它。
如果证书作为受信任的证书条目导入或重新导入——通常在 JKS 中,PKCS12 不是为单独的证书设计的——它从不包含链,所以 getCertificateChain
在该条目上 将不起作用,但 IIRC CertPathBuilder
可以在一个商店中构建一个组合多个受信任证书条目的链。
如果您确实需要 parent(链)证书 您还没有,并且 child 指定 AIA.caIssuers,那么使用它来获取是明智的。 我很确定标准 Java (JRE) 库中没有任何东西可以为您做这件事,至少到目前为止是这样;我不知道 BouncyCastle 或其他任何人。