次のような構造のXMLドキュメントがあります
<envelop>
<header>blaa</header>
<message>blaa blaa</message>
<footer></footer>
</envelop>
ヘッダー要素とメッセージ要素にデジタル署名し、フッター要素に署名を追加したいと思います。
要素に署名し、後で署名を検証するにはどうすればよいですか(.net c#を使用)?
次のような構造のXMLドキュメントがあります
<envelop>
<header>blaa</header>
<message>blaa blaa</message>
<footer></footer>
</envelop>
ヘッダー要素とメッセージ要素にデジタル署名し、フッター要素に署名を追加したいと思います。
要素に署名し、後で署名を検証するにはどうすればよいですか(.net c#を使用)?
XPath-Transformを署名に追加できるはずです。次のようになります。
<Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<XPath xmlns:dsig="&dsig;">
...
</XPath>
</Transform>
私はXPathに精通していませんが、Footer要素を除外するXPath式を簡単に作成できるはずです。(ただし、XPathはXML-DSIGのオプション部分であるため、すべての実装がXPathをサポートしているわけではないことに注意してください)。
または、ドキュメントを次のように再構築できる場合
<envelop>
<header>blaa</header>
<message>blaa blaa</message>
<Signature></Signature>
</envelop>
また
<envelop>
<signedEnvelope>
<header>blaa</header>
<message>blaa blaa</message>
</signedEnvelope>
<Signature></Signature>
</envelop>
Enveloped Signature Transformを使用するか(最初のケース)、signedEnvelope要素に署名する(2番目のケース)ことで処理できます。
これにはかなり良いMicrosoftパートナーがいます。XML(および他のすべてのプラットフォーム)のデジタル署名を追加できます。私は彼らの製品をチェックすることをお勧めします、それはコサインと呼ばれています。
XML署名に関するw3の推奨事項に従ってみませんかhttp://www.w3.org/2000/09/xmldsig#基本的な構造があります。
<Signature>
<SignedInfo>
<SignatureMethod />
<CanonicalizationMethod />
<Reference>
<Transforms>
<DigestMethod>
<DigestValue>
</Reference>
<Reference /> etc.
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
より高度な機能が必要な場合は、XAdESについてお読みください-C#で利用できると思います。
この投稿は古いと思いますが、おそらく誰かが今同じニーズを持っています。必要なのは、XMLDSIGのエンベロープ署名のようなものです。違いは、XMLDSIGでは、署名ノードに署名データを含める必要があることです。
これを実行したい場合は、独自に実装する必要があります。
私は、.NETFrameworkのXAdESサポートを提供するライブラリを開発するプロジェクトに携わっています。
XAdES-BESの早期サポートを提供するバージョン1.0をリリースしました。
XAdES.NETプロジェクトで見つけることができます
ソースコードが何らかの形で役立つことを願っています。
よろしく。