2012-02-21 47 views
0

我试图实现需要封装XML数字签名(XMLDSIG)的行业规范。相反,符合例子(<Signature>)我的规格用自己的名义为签名元素:.NET不支持非标准XMLDSIG签名元素名称

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

所以该元素的名称不是“签名”,并在该领域的XML命名空间,而不是DSIG XML命名空间。

随着大量额外的工作,我可以在.NET中创建这个自定义签名。

  1. 使用.NET SignedXml类创建< DSIG:签名>元素
  2. 我操作DOM删除< DSIG:签名>并重新创建元素作为< myns名字:ensembleSignature >。

但似乎.NET无法验证传入< myns名字:ensembleSignature >,即使我重新命名传入的元素回< DSIG:签名>。

我已经在XMLDSIG规范多次,尽管他们所有的例子使用<签名>它似乎并没有明确要求这个元素的名称,即使是封装的变换。那么这是SignedXml中的一个错误,它只支持XMLDSIG规范中没有这种要求的单个元素名称?

回答

0

在.NET中不可能使用非标准元素名称。但签名元素名称不是摘要的一部分,因此您可以删除“自定义”签名元素并添加“标准”签名元素名称(<签名>),但请注意不要更改SignedInfo中的任何空格或名称空间元素,因为SignedInfo 的摘要部分。在规范化方法中,我使用空白是重要的,元素的命名空间也是如此。

  1. 加载XML到XmlDocument的
  2. 找到< customSignature的xmlns = “http://b-to-b.com/Namespace”>
  3. 创造新的元素<签名>
  4. 移动所有儿童< customSignature>至
    • 请注意不要打扰< SignedInfo>的空格或名称空间上下文。
  5. 替换< customSignature>使用<签名>
  6. 使用.NET SignedXml类验证签名
相关问题