1

我需要使用 c# 签署 UBL 2.1 发票。问题是,签名后我需要Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"嵌入

一个 UBLExtensions 元素,像这样

<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2">

我稍后尝试添加这些元素,但签名被认为无效。

我没有任何签署 XML 文件的经验,因此非常感谢任何帮助

编辑

初始 XML 文件是

<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2">
   ... Invoice Elements
</Invoice>

我需要制作类似的东西

<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2">
   <ext:UBLExtensions>
      <ext:UBLExtension xmlns:sac="urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2" xmlns:sbc="urn:oasis:names:specification:ubl:schema:xsd:SignatureBasicComponents-2" xmlns:sig="urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2">
         <ext:ExtensionContent>
            <sig:UBLDocumentSignatures>
               <sac:SignatureInformation>
                  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
                     ... signature contents produced by signed xml class
                  </Signature>
               </sac:SignatureInformation>
            </sig:UBLDocumentSignatures>
         </ext:ExtensionContent>
      </ext:UBLExtension>
   </ext:UBLExtensions>
    ... Invoice Elements
</Invoice>

如果我稍后添加这些元素,签名将被视为无效。

同样,任何帮助都将受到高度赞赏。

实际签名文件的链接是这个: signed_xml

4

2 回答 2

1

问题是扩展元素必须在签名过程之前放置在文档上。真丢人!谢谢你的时间!

于 2019-01-22T18:10:08.147 回答
0

这个怎么样...

var nodes = xmlDoc.GetElementsByTagName("Invoice");
nodes(0).AppendChild(signature);
xmlDoc.Save(xmlFilePath);
于 2019-09-20T08:49:16.387 回答