Java で SAML SP を実装しています。
SAML 応答の証明書を検証するために、SAML 応答
から X509Certificate 要素を抽出し、事前に IDP 証明書をアップロードした Java キーストア ファイルに対して検証します。
次のコードを使用して証明書を検証します。
X509Certificate certFromResponse = //extract from SAML response
KeyStore keyStore = getKS();
PKIXParameters params = new PKIXParameters(keyStore);
params.setRevocationEnabled(false);
CertPath certPath =
certificateFactory.generateCertPath(Arrays.asList(certFromResponse));
CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
CertPathValidatorResult result = certPathValidator.validate(certPath, params);
これは、ルート CA である証明書に対しては正常に機能します。
証明書に認証パスがある場合、検証は失敗します。
これを処理する可能な方法は、すべての証明書をパスから
さまざまなエイリアスを持つ JKS ファイルに手動でアップロードし、次のようなリストに抽出することです。
List<Certificate> certs = new ArrayList<Certificate>();
certs.add(certFromResponse);
if (keyStore.getCertificate("ALIAS_CA_1") != null) {
certs.add(keyStore.getCertificate("ALIAS_CA_1"));
}
if (keyStore.getCertificate("ALIAS_CA_2") != null) {
certs.add(keyStore.getCertificate("ALIAS_CA_2");
}
...
CertPath certPath = certificateFactory.generateCertPath(certs);
それを行うためのより簡単な方法はありますか?
証明書自体から証明書パスを抽出することは可能ですか?
ありがとう!