2

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);

それは十分ですか?検証で例外がスローされない場合、送信者の身元が検証されますか?

4

1 に答える 1

4

これは、OpenSAML で署名の検証を解決した方法です

https://blog.samlsecurity.com/2012/11/verifying-signatures-with-opensaml.html

A Guide to OpenSAMLという本も書いています。ここでは、OpenSAML を使用した暗号化と署名などについて詳しく説明しています。

OpenSAML 検証方法で重要なのは、署名の暗号化の有効性のみを検証することです (内容が変更されていないこと)。ただし、送信者が信頼できる人物であることは確認されません。

署名バリデーターは、送信者の公開鍵に対して検証する送信者の公開鍵でインスタンス化されます。これは通常、SAML メタデータを使用した ID フェデレーションの設定で交換されます

于 2013-01-30T12:59:01.997 に答える