1

XMLDSigを使用して署名されたXMLメッセージを検証しようとしています。メッセージダイジェストを作成するには、最初にメッセージを正規化する必要があります。DOMNode :: C14N()が以下のコードから2番目の名前空間を削除することを除いて、正常に動作します。

<?xml version="1.0" encoding="UTF-8"?><DirectoryRes xmlns="http://www.idealdesk.com/ideal/messages/mer-acq/3.3.1" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" version="3.3.1">
    <createDateTimestamp>2012-10-29T17:04:56.374Z</createDateTimestamp>
    <Acquirer>
        <acquirerID>0050</acquirerID>
    </Acquirer>
    <Directory>
        <directoryDateTimestamp>2012-10-29T17:04:56.374Z</directoryDateTimestamp>
        <Country>
            <countryNames>Deutschland</countryNames>
            <Issuer>
                <issuerID>NLINGB2U152</issuerID>
                <issuerName>Issuer Simulator</issuerName>
            </Issuer>
        </Country>
    </Directory>
</DirectoryRes>

上記のXMLを正規化すると、次のXMLになります。

<DirectoryRes xmlns="http://www.idealdesk.com/ideal/messages/mer-acq/3.3.1" version="3.3.1">
    <createDateTimestamp>2012-10-29T17:04:56.374Z</createDateTimestamp>
    <Acquirer>
        <acquirerID>0050</acquirerID>
    </Acquirer>
    <Directory>
        <directoryDateTimestamp>2012-10-29T17:04:56.374Z</directoryDateTimestamp>
        <Country>
            <countryNames>Deutschland</countryNames>
            <Issuer>
                <issuerID>NLINGB2U152</issuerID>
                <issuerName>Issuer Simulator</issuerName>
            </Issuer>
        </Country>
    </Directory>
</DirectoryRes>

私がテストしているリモートサーバーは、メッセージダイジェストを計算するときにこの名前空間を保持しているため、検証は明らかに失敗します。メッセージに埋め込まれたダイジェストと比較するために独自のダイジェストを作成する前に、最初に名前空間を追加してこの問題を確認しました(投稿前に上記のXMLコードから署名が削除されました)。ただし、コードはさまざまなサーバーで動作する必要があり、その一部は名前空間を追加する場合と追加しない場合があります(これらは仕様の一部ではありませんが、私が知る限り、冗長な名前空間宣言を追加するだけで問題はありません)。これをW3CXMLC14N仕様で調べましたそして彼らは、ルート要素は空のデフォルトの名前空間を除いて、常に名前空間を保持するべきだと言っています。消える名前空間はデフォルトでも空でもないので、これがDOMNode :: C14N()のバグなのか、それとも重要なものを見落としているのかわかりません。

4

2 に答える 2

0

c14n 仕様では、余分な名前空間が正規化された形式にならないことが示唆されています。ns2 などを使用した場合は、->c14n によって出力されたドキュメントに取り込まれます。

于 2014-05-05T17:49:45.227 に答える
0

おそらくすでにこれを理解していると思いますが、iDEAL と通信しているので、「iDEAL メッセージに署名する」というコメントに従う必要があります。

メイン メッセージのダイジェストを生成するために、包括的正規化アルゴリズムを使用する必要があります6。メイン メッセージの正規化のこの方法は、(常に) iDEAL XML メッセージで明示的に示されているわけではありません。このため、この変換は、このドキュメントのメッセージ例には含まれていません。マーチャントは、メッセージでこの変換を明示的に示す必要はありません。

ソース: https://www.pronamic.eu/wp-content/uploads/sites/2/2016/06/Merchant-Integration-Guide-v3-3-1-ENG-February-2015.pdf

CanonicalizationMethod要素アルゴリズムが であるため、これは混乱を招く可能性がありhttp://www.w3.org/2001/10/xml-exc-c14n#ます。ただし、ダイジェストの場合は常に使用する必要がありますhttps://www.w3.org/TR/2001/REC-xml-c14n-20010315。この正規化方法のアルゴリズムもそのまま残しxmlns:ns2="http://www.w3.org/2000/09/xmldsig#"ます。

xmlseclibsiDEAL でよく使用されるライブラリでは、 正規http://www.w3.org/TR/2001/REC-xml-c14n-20010315化メソッドのアルゴリズムがデフォルトです。

https://github.com/simplesamlphp/xmlseclibs/blob/v1.3.2/xmlseclibs.php#L872

于 2016-06-01T19:08:38.037 に答える