1

Federated Security (具体的には Siteminder) と統合しようとしているアプリケーションがあります。ここにある PHP-SAML ツールキットを使用しています: https://github.com/onelogin/php-saml

アプリケーションに x509 証明書が含まれており、Siteminder 環境で暗号化がオンになるまで、すべて正常に動作します。これをオンにすると、ログインできなくなりました -- 次のメッセージを受け取りました: Invalid SAML response: Cannot locate Signature Node

Siteminder からアプリケーションに送信される SAML アサーションが暗号化されていることを確認できました。私はアサーションを見ることができます(サンプルは以下に含まれています)。残念ながら、そのメッセージを解読して、アプリケーションで解析して使用できるようにする方法がわかりません。

<Response xmlns="urn:oasis:names:tc:SAML:2.0:protocol"
      Destination="{VALUE HERE}"
      ID="_076e8f69ec4adb3b72f0cc76570527222e37"
      IssueInstant="2013-01-15T18:18:48Z"
      Version="2.0"
      >
<ns1:Issuer xmlns:ns1="urn:oasis:names:tc:SAML:2.0:assertion"
            Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity"
            >{VALUE HERE}</ns1:Issuer>
<Status>
    <StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</Status>
<ns2:EncryptedAssertion xmlns:ns2="urn:oasis:names:tc:SAML:2.0:assertion">
    <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
                        Type="http://www.w3.org/2001/04/xmlenc#Element"
                        >
        <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
                <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
                <xenc:CipherData>
                    <xenc:CipherValue>{VALUE HERE}</xenc:CipherValue>
                </xenc:CipherData>
            </xenc:EncryptedKey>
            <ds:X509Data>
                <ds:X509Certificate>
{CERTIFICATE HERE}
</ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
        <xenc:CipherData>
            <xenc:CipherValue>{VALUE HERE}</xenc:CipherValue>
        </xenc:CipherData>
    </xenc:EncryptedData>
</ns2:EncryptedAssertion>
</Response>

誰かが助けることができれば、それは素晴らしいことです.

4

3 に答える 3

1

lightsaml/lightsamlライブラリを使用することをお勧めします。そのクックブックには、SAML アサーションの復号化に関するエントリがあります http://www.lightsaml.com/LightSAML-Core/Cookbook/How-to-decrypt-Assertion/

これは、XML を Response データ モデル オブジェクトにデシリアライズし、キー ペアの資格情報を読み込み、平文のアサーションを返す EncryptedAssertion で復号化メソッドを呼び出すことによって行われます。

于 2015-12-15T07:27:46.773 に答える
1

SAML メッセージを復号化するには、simplesamlphpライブラリのコードを抽出できます。

lib/SAML2/Utils.phpの関数_decryptElementは、メッセージ要素を復号化します。

関数のヘッダー:

function _decryptElement(DOMElement $encryptedData, XMLSecurityKey $inputKey, array &$blacklist)

($blacklist には空の配列を使用します)

チェック:

http://code.google.com/p/simplesamlphp/source/browse/trunk/lib/SAML2/Utils.php#356

DOMElement を構築するには、 lib/SimpleSAML/Utilities.phpの次の関数を使用できます。

formatXMLStringformatDOMElement

http://code.google.com/p/simplesamlphp/source/browse/trunk/lib/SimpleSAML/Utilities.php#1577

于 2013-01-23T11:56:55.387 に答える
0

これは Onelogin PHP コードの問題であると思われます。同様の問題がログに記録されており、Ruby 実装にも同じ問題があります。

アップデート:

これを回避しようとしている場合は、証明書、つまり IP に送信した sp.xml メタデータにある証明書でこれを復号化する必要があります。

Onlelogin を使用したことはありませんが、SimpleSAMLphpコードに例があります。

于 2013-01-16T01:51:52.063 に答える