C# 在c中向X509Certificate2添加对象标记#

C# 在c中向X509Certificate2添加对象标记#,c#,xml,soap,digital-signature,x509certificate2,C#,Xml,Soap,Digital Signature,X509certificate2,我在将Object标记添加到签名时遇到了一个问题,因为我们的参与者需要它位于签名的XML的签名中。 我需要将下面的对象标记添加到我的签名中: <ds:Object> <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#"> <xades:SignedProperties Id="_aba0ee84-5f37-499e-

我在将Object标记添加到签名时遇到了一个问题,因为我们的参与者需要它位于签名的XML的签名中。 我需要将下面的对象标记添加到我的签名中:

<ds:Object>
    <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
        <xades:SignedProperties Id="_aba0ee84-5f37-499e-a8e8-caa7f398341c-signedprops">
            <xades:SignedSignatureProperties>
                <xades:SigningTime>2019-02-15T21:09:10+13:00</xades:SigningTime>
            </xades:SignedSignatureProperties>
        </xades:SignedProperties>
    </xades:QualifyingProperties>
</ds:Object>

2019-02-15T21:09:10+13:00
我当前的签名看起来像:

    <MyElement xmlns="samples">Example text to be signed.
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
            <Reference URI="">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                <DigestValue>Kglqb8fjGmMi2n4W8qXldBIY7VBi0xbNn+dZml7H3xw=</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>Iz5LOjZGefMHvIYs/cr1Vmrg/9gXPDGpJetBEx+k/yzHVAdJf18P2/udFkeOoVMCpVUnNn+H4eVihD2idqg7SMosZeFA4LCQC2/Wn7GCE6k+y0mivCtFZTaXu0yUbwDGWDBvvqMUT87uaRx4o61cm7V3DH8wOUJ05mKtoVFpG20=</SignatureValue>
    </Signature>
</MyElement>
要签名的示例文本。
Kglqb8fjGmMi2n4W8qXldBIY7VBi0xbNn+dZml7H3xw=
Iz5LOjZGefMHvIYs/cr1Vmrg/9gXPDGpJetBEx+k/yzHVAdJf18P2/UDFKEOVMCPVUNN+H4EVIHD2IDQG7SMOSZEFA4 LCQC2/Wn7GCE6k+Y0MIVCTFZTAXU0YUBWDBVQMUT87UARX4O61CM7V3DH8WOUJ05MKTOVPG20=
我需要的最终签名应该是:

 <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
        <ds:Reference URI="#_33d232d2-4591-4b49-b28d-3cb825fbeaa4">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>uFw2hAp5tSL4VidzHtTvv3aziis=</ds:DigestValue>
        </ds:Reference>
        <ds:Reference Type="http://uri.etsi.org/01903/v1.3.2#SignedProperties" URI="#_aba0ee84-5f37-499e-a8e8-caa7f398341c-signedprops">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>X01eQjqcHvYtQbFkpNT7WcvBSxI=</ds:DigestValue>
        </ds:Reference>
        <ds:Reference>
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>OCCzP5CU0TAgyYSLMR+SIMchxrE=</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>b8AhGMpa+fK6Q5q/HXiPttGIKn2PMXc/GQSrxnI+jnW9Agg6E6R/q+cwMKiYkdlskI/P0UAdwxd+
KQ44k6r2OET4HjMyatG99HFQnS0C0awVO7CPF6cO9069DDmXplWIkHIoBPWSgXh7SQHMpaQihJYo
S9iVr5+qhYQBZYCVwHg=</ds:SignatureValue>
    <ds:KeyInfo Id="_33d232d2-4591-4b49-b28d-3cb825fbeaa4">
        <ds:X509Data>
            <ds:X509IssuerSerial>
                <ds:X509IssuerName>CN=Test CA, O=Test Institution, C=BD</ds:X509IssuerName>
                <ds:X509SerialNumber>12345678</ds:X509SerialNumber>
            </ds:X509IssuerSerial>
        </ds:X509Data>
    </ds:KeyInfo>
    <ds:Object>
        <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
            <xades:SignedProperties Id="_aba0ee84-5f37-499e-a8e8-caa7f398341c-signedprops">
                <xades:SignedSignatureProperties>
                    <xades:SigningTime>2019-02-15T21:09:10+13:00</xades:SigningTime>
                </xades:SignedSignatureProperties>
            </xades:SignedProperties>
        </xades:QualifyingProperties>
    </ds:Object>
</ds:Signature>

UFW2HAP5TSL4VIDZHTTV3Aziis=
X01eQjqcHvYtQbFkpNT7WcvBSxI=
OCCzP5CU0TAgyYSLMR+SIMchxrE=
b8AhGMpa+fK6Q5q/HXiPttGIKn2PMXc/GQSrxnI+JNW9AG6E6R/q+cwMKiYkdlskI/P0UAdwxd+
KQ44k6r2OET4HjMyatG99HFQnS0C0awVO7CPF6cO9069DDmXplWIkHIoBPWSgXh7SQHMpaQihJYo
S9iVr5+qhYQBZYCVwHg=
CN=测试CA,O=测试机构,C=BD
12345678
2019-02-15T21:09:10+13:00

您可以在链接中查看c代码:

这里是第一步:

        public static void CreateKeyInfo(XmlElement xSubject)
        {
            string keyinfo = "<ds:KeyInfo Id=\"_33d232d2-4591-4b49-b28d-3cb825fbeaa4\">"+
                                "<ds:X509Data>" +
                                   "<ds:X509IssuerSerial>" +
                                      "<ds:X509IssuerName>CN=Test CA, O=Test Institution, C=BD</ds:X509IssuerName>" +
                                      "<ds:X509SerialNumber>12345678</ds:X509SerialNumber>" +
                                   "</ds:X509IssuerSerial>"+
                                "</ds:X509Data>" +
                             "</ds:KeyInfo>";

            xSubject.InnerXml = keyinfo;
        }

        public static void CreateObject(XmlElement xSubject)
        {
            string keyObject = "<ds:Object>" +
                                  "<xades:QualifyingProperties xmlns:xades=\"http://uri.etsi.org/01903/v1.3.2#\">" +
                                     "<xades:SignedProperties Id=\"_aba0ee84-5f37-499e-a8e8-caa7f398341c-signedprops\">" +
                                        "<xades:SignedSignatureProperties>" +
                                           "<xades:SigningTime>2019-02-15T21:09:10+13:00</xades:SigningTime>" +
                                        "</xades:SignedSignatureProperties>" +
                                     "</xades:SignedProperties>" +
                                  "</xades:QualifyingProperties>" +
                               "</ds:Object>";

            xSubject.InnerXml = keyObject;
        }
publicstaticvoidcreatekeyinfo(xmlementxsubject)
{
字符串keyinfo=“”+
"" +
"" +
CN=测试CA,O=测试机构,C=BD+
"12345678" +
""+
"" +
"";
xSubject.InnerXml=keyinfo;
}
公共静态void CreateObject(XmlElement xSubject)
{
字符串keyObject=“”+
"" +
"" +
"" +
“2019-02-15T21:09:10+13:00”+
"" +
"" +
"" +
"";
xSubject.InnerXml=keyObject;
}

在这篇帖子上查看我的解决方案:我需要将此对象字段添加到我的签名中,但我在您的回答中没有找到任何相关内容!!!2019-02-15T21:09:10+13:00我的代码标签名称不同,但流程相同。您需要修改CreateSubject以创建所需的xml标记。调用SignXmlWithCertificate时,签名节点将被添加到XML中。但是这个Id如何?“(_aba0ee84-5f37-499e-a8e8-caa7f398341c-signedprops)”plz如果您可以自定义代码,它将非常有用。这只是添加了一些静态对象,我认为SignedProperties的Id属性来自其他地方。如果你解决了这个问题,我会记下你的答案。提前感谢,您需要将ID添加到CrtateObject的参数列表中。然后修改字符串keyObject,使ID使用参数列表中的值,而不是固定值。您还需要对其他属性(如SigningTime)执行类似的操作。添加对signedproperties和KeyInfo的引用是一项挑战,因为这是一个附加在末尾的静态对象。请查看我创建SOAP的链接。main方法构建xml。看看我调用方法CreateSubject(subject)的方式;我已经检查了你的代码,这是伟大的,但我需要添加对signedproperties和keyinfo元素的引用,就像这样。X01eQjqcHvYtQbFkpNT7WcvBSxI=