XMLドキュメントの一部にデジタル署名する
-
06-07-2019 - |
質問
次のような構造の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のオプション部分であるため、すべての実装でサポートされているわけではありません)。
また、ドキュメントを再構築できる場合
<envelop>
<header>blaa</header>
<message>blaa blaa</message>
<Signature></Signature>
</envelop>
または
<envelop>
<signedEnvelope>
<header>blaa</header>
<message>blaa blaa</message>
</signedEnvelope>
<Signature></Signature>
</envelop>
エンベロープ署名変換を使用する(最初のケース)か、signedEnvelope要素に署名する(2番目のケース)ことで処理できます。
他のヒント
Microsoftのパートナーがこれにかなり適している可能性があります。 XML(および他のすべてのプラットフォーム)にデジタル署名を追加できます。 cosignと呼ばれる製品を確認することをお勧めします。
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では、署名データを Signature ノードに含める必要があることです。
これを行うには、独自に実装する必要があります。
.NET FrameworkのXAdESサポートを提供するライブラリを開発するプロジェクトに関与しています。
XAdES-BESの早期サポートを提供するバージョン1.0をリリースしました。
で見つけることができます。ソースコードが何らかの形で役立つことを願っています。
よろしく。