仍然是密碼學中的一個小白我每天都會遇到簡單的事情。今天只是其中的一個。從終端實體獲取根證書和中間證書
我想用彈性城堡庫在java中驗證smime消息,我想我幾乎已經知道了,但此時的問題是構建PKIXparameters對象。 比方說,我有以下結構的終端實體X509證書:
root certificate
+->intermediate certificate
+->end-entity certificate
爲了驗證消息,我需要首先建立信任鏈,但我無法弄清楚如何提取的根和中級來自最終實體的證書。
我試圖用終端實體根,但它沒有工作:
InputStream isCert = GetFISCertificate();
List list = new ArrayList();
X509Certificate rootCert = (X509Certificate) certificateFactory.generateCertificate(isCert);
list.add(rootCert);
CollectionCertStoreParameters params = new CollectionCertStoreParameters(list);
CertStore store = CertStore.getInstance("Collection", params, BC);
//create cert path
List certChain = new ArrayList();
certChain.add(rootCert);
CertPath certPath = certificateFactory.generateCertPath(certChain);
Set trust = Collections.singleton(new TrustAnchor(rootCert, null));
//validation
CertPathValidator certPathValidator = CertPathValidator.getInstance("PKIX", BC);
PKIXParameters pKIXParameters = new PKIXParameters(trust);
pKIXParameters.addCertStore(store);
pKIXParameters.setDate(new Date());
try {
CertPathValidatorResult result = certPathValidator.validate(certPath, pKIXParameters);
System.out.println("certificate path validated");
} catch (CertPathValidatorException e) {
System.out.println("validation failed on certificate number " + e.getIndex() + ", details: " + e.getMessage());
}
得到這個異常:
validation failed on certificate number -1, details: Trust anchor for certification path not found.
而且順便說一句,我就可以只使用終端實體證書來驗證消息,就好像它是自簽名證書一樣?
延長管理局信息訪問是很常見的OCSP信息。但我想我從來沒有見過這個包含id-ad-caIssuers的擴展的證書。無論如何,很好的答案。 – Egl
@Egl我見過證書,包括id-ad-caIssuers和OCSP(google.com的證書和巴西的PKI最終實體都是很好的例子)。我也看過其中一個證書,不幸的是,似乎CA中沒有標準。 –
非常感謝您的回答!你幫了我很多! – revolt