2012-02-21 74 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類驗證簽名
相關問題