2

私たちのユースケースでは、PKIX セットアップで OCSP を介して証明書の失効を検証する必要があります。私の出発点は、この関連する質問のコードでした: OCSP Revocation on client certificate

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

何が欠けている可能性がありますか?

4

2 に答える 2

3

中間証明書を追加したことを示します。コードスニペットを更新しなかったので、これらの証明書をどのように追加したのでしょうか。これらの証明書を次のように追加する必要があります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();
于 2011-03-18T18:06:43.120 に答える
3

あなたが持っているように、CPBがパスを構築する対象の証明書(x509certificate)をどのように見つけるかはわかりません。キーストアにない限り、通常はそうではありません。サブジェクト名を提供するだけでは、検証済みのパスを作成するのに十分ではありません。発見と検証のアルゴリズムには、完全なサブジェクト証明書が必要です。交換したらどうなるか見てみよう

certSelector.setSubject(x509certificate.getSubjectX500Principal());

certSelector.setCertificate(x509certificate);
于 2011-03-09T04:07:54.377 に答える