我正在尝试实现需要封装 XML 数字签名 (XMLDSIG) 的行业规范。我的规范不符合示例 ( <Signature>
),而是使用自己的名称作为签名元素:
<xs:element name="ensembleSignature" type="dsig:SignatureType" />
<!-- wish this was: <xs:element ref="dsig:Signature" /> -->
因此,该元素未命名为“Signature”,并且位于域的 XML 命名空间而不是 dsig XML 命名空间中。
通过大量额外的工作,我可以在 .NET 中创建这个自定义签名。
- 我使用 .NET SignedXml 类创建 <dsig:Signature> 元素
- 我操作 DOM 以删除 <dsig:Signature> 并将元素重新创建为 <myns:ensembleSignature>。
但似乎 .NET 无法验证传入的 <myns:ensembleSignature>,即使我将传入元素重命名回 <dsig:Signature>。
我已经多次阅读过 XMLDSIG 规范,尽管他们的所有示例都使用 <Signature> 它似乎并不特别需要这个元素名称,即使对于封装转换也是如此。那么这是 SignedXml 中的一个错误,即当 XMLDSIG 规范中没有这样的要求时,它只支持这个单个元素名称?