经过大量的搜索,我没有找到如何在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)是否保证了全链证书的订单?如果让我们的加密例如改变其策略并改变构建链和完整链的方式,以我们不依赖于实际的证书顺序,该怎么办? 非常感谢您的帮助!
答案 0 :(得分:0)
发布P12的实用方法是:使用单个PrivateKey
和相应的Certificate Chain
(一般互联网标准)。
您可以在以下链接中详细了解相关信息:PKCS#12,Chain of Trust和Intermedial CA。
通常(几乎所有时间),用户的证书将是链中的第一个证书(最重要的),其次是最不重要的证书(子CA&CA和CA' s) ,CA是最后一个。)
几乎所有的软件和库都遵循这种方法。
因此,可以安全地说将对证书链进行订购(但是,链可能不完整,您只能拥有用户的证书,或CA证书可能在Sub CA的证书之后不存在。这在很大程度上取决于颁发P12 /证书链的CA 。但是,您将在第一个(第零个)位置找到用户的证书。
如果您需要确保链完整并订购,您可以拥有自己的防御方法来执行此操作。您可以根据证书的SubjectDN
和IssuerDN
字段识别证书类型(CA,SubCA或用户)。
如果SubjectDN
等于IssuerDN
,则它是CA证书,如果证书IssuerDN
等于{,则标识下一个证书(SubCA) CA的{1}},然后它是链中的下一个,依此类推..