0

エンベロープ XML デジタル署名 (XMLDSIG) を必要とする業界仕様を実装しようとしています。例 ( ) に準拠する代わりに、<Signature>私の仕様では署名要素に独自の名前を使用しています。

<xs:element name="ensembleSignature" type="dsig:SignatureType" />
<!-- wish this was:  <xs:element ref="dsig:Signature" />  -->

したがって、要素は「署名」という名前ではなく、dsig XML 名前空間ではなく、ドメインの XML 名前空間にあります。

多くの余分な作業を行うことで、このカスタム シグネチャを .NET で作成できます。

  1. .NET SignedXml クラスを使用して <dsig:Signature> 要素を作成します
  2. DOM を操作して <dsig:Signature> を削除し、要素を <myns:ensembleSignature> として再作成します。

しかし、着信要素の名前を <dsig:Signature> に戻しても、.NET は着信 <myns:ensembleSignature> を検証できないようです。

私は何度も XMLDSIG 仕様を検討してきました。すべての例で <Signature> が使用されていますが、エンベロープされた変換であっても、この要素名は特に必要ないようです。これは、XMLDSIG 仕様にそのような要件がない場合に、この単一の要素名しかサポートしないという SignedXml のバグですか?

4

1 に答える 1

0

.NET では、非標準の要素名を使用することはできません。ただし、署名要素名はダイジェストの一部ではないため、「カスタム」署名要素を削除して「標準」署名要素名 (<Signature>) を追加できますが、SignedInfo の空白や名前空間を変更しないように注意してください。 SignedInfo はダイジェストの一部であるためです。私が使用している正規化方法では、空白が重要であり、要素の名前空間も重要です。

  1. XML を XmlDocument に読み込む
  2. <customSignature xmlns="http://b-to-b.com/Namespace"> を見つけます
  3. 新しい要素 <Signature> を作成する
  4. <customSignature> のすべての子を移動
    • <SignedInfo> の空白や名前空間のコンテキストを乱さないように注意してください。
  5. <customSignature> を <Signature> に置き換えます
  6. .NET SignedXml クラスを使用して署名を検証する
于 2012-03-12T20:39:10.193 に答える