C#使用XAdES对XML文档进行签名

本文关键字:文档 XML 使用 XAdES | 更新日期: 2023-09-27 18:26:30

我需要使用XAdES模板对xml进行签名。我使用了2个参考资料。第二个问题是,如果我添加Transform,它将正常工作(signedXml.CheckSignature()返回True),如果没有此转换,它将返回False。

我的代码:

System.Security.Cryptography.Xml.Reference reference2; 
System.Security.Cryptography.Xml.SignedXml signedXml;
... 
reference2 = new Reference();
reference2.Type = "http://uri.etsi.org/01903/v1.1.1#SignedProperties";
reference2.Uri = "#SignedPropertiesId";
//reference2.AddTransform(new XmlDsigExcC14NTransform()); IF I COMMENT THIS LINE IT WONT WORK
signedXml.AddReference(reference2);
signedXml.ComputeSignature();
XmlElement xmlDigitalSignature = signedXml.GetXml();
xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
signedXml.CheckSignature(); //return false if dont use Transform in second REF
signedXml.ComputeSignature();
XmlElement xmlDigitalSignature = signedXml.GetXml();
xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));

签名的第二部分。

<ds:KeyInfo>
  <ds:X509Data>
    <ds:X509Certificate>cert...</ds:X509Certificate>
  </ds:X509Data>
</ds:KeyInfo>
<ds:Object>
  <xds:QualifyingProperties Target="#SignatureId">
    <xds:SignedProperties Id="SignedPropertiesId">
      <xds:SignedSignatureProperties>

这是.NET中的问题吗?

谢谢。

C#使用XAdES对XML文档进行签名

您做错了,XAdES的节点在Signature节点中,在对象节点之后,您需要正常计算签名,然后添加对象节点和必要的节点,这可以通过编程轻松完成,这取决于您要实现的XAdES级别。