簡體   English   中英

x509certificate證書路徑驗證

[英]x509certificate certpath validation

我們的用例要求通過PKIX設置上的OCSP來驗證證書吊銷。 我的起點是以下相關問題的代碼: 客戶端證書上的OCSP吊銷

我在應用程序級別手動執行此操作,因為tomcat不支持它。 但是,我在構建certPath時遇到了一些麻煩,我想我缺少一些基本的了解。

首先,我嘗試為傳入客戶端x509Certificate創建certPath。

KeyStore存儲已正確初始化,並且僅包含與客戶端x509Certificate匹配的根證書。

編輯:添加中間證書后,我也得到相同的結果。

X509CertSelector certSelector = new X509CertSelector();
certSelector.setSubject(x509certificate.getSubjectX500Principal());
PKIXParameters params = new PKIXBuilderParameters(store,certSelector);
CertPathBuilder cpb = CertPathBuilder.getInstance(CertPathBuilder.getDefaultType());
CertPath certPath = cpb.build(params).getCertPath();

但是,在運行時出現錯誤:

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

可能缺少什么?

有了它,我不確定CPB將如何找到主題證書(x509certificate)來構建路徑,除非它位於您的密鑰庫中(通常不會)。 僅提供主題名稱還不足以建立經過驗證的路徑。 發現和驗證算法需要完整的主題證書。 看看更換后會發生什么

certSelector.setSubject(x509certificate.getSubjectX500Principal());

certSelector.setCertificate(x509certificate);

您指示您添加了中間證書。 由於您未更新代碼段,所以我想知道如何添加這些證書? 您應該將這些證書添加為CertStore

X509CertSelector certSelector = new X509CertSelector();
certSelector.setSubject(x509certificate.getSubjectX500Principal());
PKIXParameters params = new PKIXBuilderParameters(store,certSelector);
CertStore cstore = CertStore.getInstance("Collection", new CollectionCertStoreParameters(Arrays.asList(icert1, icert2 /*, other certs... */)));
params.addCertStore(cstore);
CertPathBuilder cpb = CertPathBuilder.getInstance(CertPathBuilder.getDefaultType());
CertPath certPath = cpb.build(params).getCertPath();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM