4

私たちの IdP は Salesforce.com 組織です。SP はサードパーティの .Net アプリケーションです。開発中に、送信された SAML 応答を検証できないとサード パーティから報告がありました。

ComponentSpaceを使用して SAML 応答を検証することにしました。以下は私たちが試したことです:

// Load the certificate from the file: certInFile
// Load the SAML in an XMLElement: samlXml
// Retrieve the certificate from the SAML: certInSaml

Console.WriteLine("SAML is valid ? " + SAMLResponse.IsValid(samlXml));
Console.WriteLine("Is SAML signed? " + SAMLMessageSignature.IsSigned(samlXml));
Console.WriteLine("Certificate found in SAML is same as certificate file? " + certInFile.Equals(certInSaml));
Console.WriteLine("Validated SAML with certificate found in SAML" + SAMLMessageSignature.Verify(samlXml, certInSaml));
Console.WriteLine("Validated SAML with certificate file" + SAMLMessageSignature.Verify(samlXml, certInFile));

最後の2つを除いて、上記のすべてに当てはまります。そう:

  1. SAML は有効です
  2. SAML には有効な署名があります
  3. SAML の公開鍵証明書は、私たちが持っている証明書ファイルと同じです
  4. SAML は、証明書ファイルの秘密鍵でも SAML で送信された公開鍵でも署名されていません

3,4 から、Salesforce が署名しているが、別の証明書を使用しているが、応答で間違った公開鍵を送信していると結論付けることができますか?!

編集:サンプルSAMLはこちらhttp://pastebin.com/J8FTxnhJ

私は何が欠けていますか?

4

3 に答える 3

4

署名後に XML が変更されたか、署名の検証に間違った証明書が使用されているために、XML 署名の検証が失敗します。最も可能性の高いシナリオは、間違った証明書が使用されていることです。

Salesforce は、秘密鍵を使用して SAML 応答に署名します。Salesforce 管理コンソールを使用して、署名検証の実行に使用する必要がある対応する公開鍵/証明書をダウンロードできます。

を呼び出すときに、検証を実行するために使用するSAMLMessageSignature.Verifyを指定できますX509Certificate。これは通常、行う必要があります。

ただし、base-64 でエンコードされた X.509 証明書も XML 署名に埋め込まれています。この埋め込み証明書を使用して、署名が検証されるかどうかを確認できます。

これを行うには、X509Certificate を に渡さないでくださいSAMLMessageSignature.Verify

例えば:SAMLMessageSignature.Verify(samlXml, null);

それが機能するが、証明書のダウンの指定が機能しない場合、これは間違った証明書が使用されていることを示しています。

を呼び出しSAMLMessageSignature.GetCertificateて XML 署名から X.509 証明書を取得し、使用されている証明書と比較できます。

また、補足として、XML 署名は XML に適用されます。HTTP Post データで送信される base-64 でエンコードされた SAML 応答を使用して直接検証することはできません。XML 署名を検証する前に、投稿データを XML にデコードする必要があります。

于 2015-05-09T00:54:37.333 に答える
1

これは、生成された base64 でエンコードされた SAML をデコードせずに直接検証しようとしたときに機能しました。ただし、デコードされた文字列に対して ComponentSpace メソッドが異なる方法で報告した理由はまだわかりません。

于 2014-01-18T08:35:34.680 に答える