以编程方式从p12文件获取CA证书并订购证书列表?

时间:2016-11-09 17:29:25

标签: java openssl x509certificate keystore ca

经过大量的搜索,我没有找到如何在Java代码中使用以下命令:

openssl pkcs12 -cacerts -in /path/to/file.p12 -noout

从此p12获取ca证书     openssl pkcs12 -clcerts -in /path/to/file.p12 -noout 获得证书

在java中,我加载了file.p12,因此所有这些证书都存储在PKCS12密钥库中,但不能区分哪个是CA证书,哪个是简单证书。怎么做?

(在我的p12中,我有我的证书和已签署的N CA证书: CA 2已签署证书,CA 3已签署CA 2证书......,CA N已签署CA N-1证书)

2)同样的另一个问题: 有没有办法订购x509证书清单(ca 1,... ca N),我用过:

CertificateFactory certFact = CertificateFactory.getInstance("X.509");
CertPath path = certFact.generateCertPath(myCertifList);

但是这份名单必须按照我的意愿进行排序。

3)是否保证了全链证书的订单?如果让我们的加密例如改变其策略并改变构建链和完整链的方式,以我们不依赖于实际的证书顺序,该怎么办? 非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

发布P12的实用方法是:使用单个PrivateKey和相应的Certificate Chain(一般互联网标准)。

您可以在以下链接中详细了解相关信息:PKCS#12Chain of TrustIntermedial CA

通常(几乎所有时间),用户的证书将是链中的第一个证书(最重要的),其次是最不重要的证书(子CA&CA和CA' s) ,CA是最后一个。)

几乎所有的软件和库都遵循这种方法。

因此,可以安全地说将对证书链进行订购(但是,链可能不完整,您只能拥有用户的证书,或CA证书可能在Sub CA的证书之后不存在。这在很大程度上取决于颁发P12 /证书链的CA 。但是,您将在第一个(第零个)位置找到用户的证书。

如果您需要确保链完整并订购,您可以拥有自己的防御方法来执行此操作。您可以根据证书的SubjectDNIssuerDN字段识别证书类型(CA,SubCA或用户)。

如果SubjectDN等于IssuerDN,则它是CA证书,如果证书IssuerDN等于{,则标识下一个证书(SubCA) CA的{1}},然后它是链中的下一个,依此类推..