1

私はxml署名を使用してsamlリクエストを検証しています:

署名する前の最初のsamlリクエスト:

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID
="abc" Version="2.0" IssueInstant="2012-04-14T8:55:05:31" ProtocolBinding="urn:o
asis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="http://l
ocalhost:8080/consumer.jsp"><saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0
:assertion">http://localhost:8080/saml/SProvider.jsp</saml:Issuer></samlp:AuthnR
equest>

xmlドキュメントに署名し、それを文字列に変換した後(トランスフォーマーを使用)、次のようになります。

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><samlp:AuthnReques
    t xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceURL
    ="http://localhost:8080/consumer.jsp" ID="abc" IssueInstant="2012-04-14T8:55:05:
    31" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.
    0"><saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://localh
    ost:8080/saml/SProvider.jsp</saml:Issuer><Signature xmlns="http://www.w3.org/200
    0/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/
    TR/2001/REC-xml-c14n-20010315#WithComments"/><SignatureMethod Algorithm="http://
    www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI=""><Transforms><Transform A
    lgorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><
    DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>J
    QV+Gff3C0PDb5zbaB62ItqWaJ/yIFgOVfANUehlJpQ=</DigestValue></Reference></SignedInf
    o><SignatureValue>PJCFgkGUlQiOVn6g0hTgbbHkqOGAKB5sA8QjcdKrR5R9zuyn9ymfFZMo1jqpxU
   //#here 3UOCz1BcxsWt6+ 
    CSFSAS0SaQstuN8ns/5ltIYu3LFUrpIT4eRHxbYEjf+CFj0c08lFB+BLK3Tx3vEi7nQF+X1rUvZX
    XZEUmaAMLqNdhRSqurY=</SignatureValue></Signature></samlp:AuthnRequest>


ご覧のとおり、最初の文字列の最初の属性はIDですが、署名後の最初の属性はAssertionConsumerServiceURLです。なぜごちゃごちゃしているのですか?さらに、署名された文書#here(最後から3行目)を参照してください、改行があります。なぜ改行があるのですか。暗号化された値に改行が含まれているとは思いません。何が起こっているのかわかりません。助けてください。

4

2 に答える 2

2

署名を計算するには、XMLファイルを正規化する必要があります。受信側のアプリケーションが署名を検証するには、標準形式である必要があります。

しかし、正規化して送信する必要はないと思います。受信側のアプリケーションは、検証用の署名を計算するためにXMLも正規化する必要があるためです。したがって、署名した後で再フォーマットを試みることができます。しかし、それがうまくいくかどうかはわかりませんので、徹底的にテストしてください。

于 2012-04-14T03:31:22.593 に答える
1

このリンクを参照してください。xml 署名によるエラー。ほとんどの場合、xml 署名は xml タグの順序を保証できないと書かれています。また、これは正規化によるものであるとも述べています。しかし、私はそれについて確信が持てません。私が知ったことの 1 つは、xml 署名を使用する場合は珍しいことではないということです。

于 2012-04-18T05:23:00.317 に答える