Java で SAML SP を実装しています。
AuthnRequest を SAML 2.0 IDP に送信し、暗号化された応答を取得します。
私の質問は次のとおりです。
応答が実際に IDP からのものであり、ハッカーからのものではないことを確認するにはどうすればよいですか?
署名を検証するだけでは不十分です。これは、送信者が秘密鍵と公開鍵の一致するペアを持っていることを示すだけなので、誰でもかまいません。
そのため、jks ファイルにアップロードする証明書を事前に提供し、応答の ds:X509Certificate 要素から抽出した証明書と毎回比較するために、IDP が必要です。
さて、送信者の証明書とキーストアに保存されている証明書を比較する標準的な方法はありますか?
次のコードを見ました。
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);
それは十分ですか?検証で例外がスローされない場合、送信者の身元が検証されますか?