C# 如何通过USB Token生成指定结构的XAdES格式XML签名
我正尝试通过USB Token对XML文件进行XAdES格式签名。
System.Security.Cryptography.Xml相关的文档十分稀缺,我仅能找到使用基础/默认选项签署XML的教程。
该方案可正常运行,但生成的签名缺少多个必要元素,例如部分References、Transforms以及Object元素。
我需要的XAdES XML结构如下:
<?xml version='1.0' encoding='utf-8'?> <MyRootTag xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <MainElement> <!--xml_payload_goes_here--> </MainElement> <ds:Signature xmlns:xadesv1410="http://uri.etsi.org/01903/v1.4.1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Id="signature-5743-9455-8953-3682"> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/> <ds:Reference URI=""> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2"> <dsig-xpath:XPath xmlns:dsig-xpath="http://www.w3.org/2002/06/xmldsig-filter2" Filter="subtract">/descendant::ds:Signature</dsig-xpath:XPath> </ds:Transform> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue><!--Base64--></ds:DigestValue> </ds:Reference> <ds:Reference URI="#signed-properties-0967-6800-5986-4853" Type="http://uri.etsi.org/01903#SignedProperties"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue><!--Base64--></ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue Id="signature-value-3400-3038-9836-4335"><!--Base64--></ds:SignatureValue> <ds:KeyInfo Id="key-info-3540-2157-4472-8413"> <ds:X509Data> <ds:X509Certificate><!--Base64--></ds:X509Certificate> </ds:X509Data> <ds:KeyValue> <ds:RSAKeyValue> <ds:Modulus><!--Base64--></ds:Modulus> <ds:Exponent>AQAB</ds:Exponent> </ds:RSAKeyValue> </ds:KeyValue> </ds:KeyInfo> <ds:Object Id="signature-object-0000-0000-0000-0000"> <xades:QualifyingProperties Target="#signature-0000-0000-0000-0000"> <xades:SignedProperties Id="signed-properties-0000-0000-0000-0000"> <xades:SignedSignatureProperties> <xades:SigningTime>2021-11-03T08:25:08Z</xades:SigningTime> <xades:SigningCertificate> <xades:Cert> <xades:CertDigest> <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> <ds:DigestValue><!--Base64--></ds:DigestValue> </xades:CertDigest> <xades:IssuerSerial> <ds:X509IssuerName>Issuer_Name</ds:X509IssuerName> <ds:X509SerialNumber>000000000000000000000000000000000000000</ds:X509SerialNumber> </xades:IssuerSerial> </xades:Cert> </xades:SigningCertificate> </xades:SignedSignatureProperties> </xades:SignedProperties> </xades:QualifyingProperties> </ds:Object> </ds:Signature> </MyRootTag>
我需要明确如何通过AddReference(搭配AddTransform)、AddObject等方法为SignedXml添加上述元素,请问哪里可以找到XAdES签名相关的C#代码示例,尤其是涉及不同SignedXml格式配置选项的实现?
内容的提问来源于stack exchange,提问作者Dalmo
相关产品推荐
相关产品推荐

