【问题标题】:Generating XADES-BES with “ds” prefix生成带有“ds”前缀的 XADES-BES
【发布时间】:2012-05-29 13:12:13
【问题描述】:

我使用signedxml 类来生成xml 签名。结果 xml 如下所示;

  <Signature Id="orderSignature" 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/2000/09/xmldsig#rsa-sha1"/>
           .............
           ......
           ...
    </Signature>
    <Object>....</Object>

我需要生成 XADES-BES xml 格式,这就是我想在signedxml 中添加前缀“ds:”。

没有“ds”,我的签名验证工作正常,如您所知,它的格式是 XMLDSIG,

当我想生成 XADES-BES 时,我们必须为所有签名和子元素添加“ds”前缀,如下所示;

<ds:Signature Id="orderSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
                            <ds:SignedInfo>
                                <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                                <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
               .............
               ......
               ...
        </ds:Signature>
        <ds:Object>....</ds:Object>

如果你在签名后加上那个前缀,它就不起作用了。

所以,我已经阅读了所有关于此的问题,并且没有任何问题,,

我真的需要带有“ds”前缀的xmlsignature。

有人帮我解答这个问题吗???

谢谢。

【问题讨论】:

标签: xml digital-signature xml-signature electronic-signature signedxml


【解决方案1】:

我真的不明白为什么要在命名空间中添加 ds 前缀。

有这个:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature">
  <ds:SignedInfo Id="SignedInfo">
 <ds:CanonicalizationMethod ...

完全等同于:

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="Signature">
   <SignedInfo Id="SignedInfo">
 <CanonicalizationMethod ...

在第一种情况下,您必须为 http://www.w3.org/2000/09/xmldsig# 命名空间中的元素指定 ds,在第二种情况下,此命名空间是默认命名空间,因此 xml 中没有声明前缀的每个元素都来自此命名空间。

此外,您说您需要添加 ds 前缀才能获得 XAdES-BES,并且您评论了 xmldsig 和 xades 签名之间的区别。您必须知道 XAdES 只是一个规范,它说明 XMLDSIG 签名需要哪些属性才能成为 XAdES 签名。 XAdES 大致是一个 XMLDSIG 签名,其中包含:&lt;Object http://www.w3.org/2000/09/xmldsig#&gt;,它将成为整套合格属性的包,其中一些是签名的 (signedProperties) 和一些是未签名的 (unsignedProperties)。对于 XAdES-BES 案例,您必须在 &lt;xades:SignedProperties&gt; 元素中添加 &lt;xades:SigningCertificate xmlns:xades="http://uri.etsi.org/01903/v1.3.2#"&gt;

这里我给你一个 XAdES-BES 签名“没有”ds 前缀的例子。

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="Signature">
<SignedInfo Id="SignedInfo">
    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
    <Reference Id="SignedProperties-Reference" Type="http://uri.etsi.org/01903/v1.2.2#SignedProperties" URI="#SignedProperties">
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <DigestValue>fiKTaqJzLSmC73cMXZSzjhd877w=</DigestValue>
    </Reference>
    <Reference Id="SignedDataObject-Reference-1" URI="DetachedObjectReference-1">
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <DigestValue>8ruIS/4MRp2wAwVX4/pTCYxTyWc=</DigestValue>
    </Reference>
</SignedInfo>
<SignatureValue Id="DocumentSignatureValue">
    R40YdEEEl0YIZVdl4pm3yyF7qGAG8ZN8PPf0aBRXbvRgdIcvJZtI5AS5NexaO5T4O0gMHWRIKjNb
    2QzlfwxlQ3/KqMW4W0QkMLpF4csBpXt9bJ3t+smEeTnxkBcQRXAw5v9kwf20mfz1LtIUhbsU/PMd
    YwaGCsItF2rzl3rtcq4=
</SignatureValue>
<KeyInfo Id="KeyInfo">
    <X509Data>
        <X509Certificate>
            MIIIUTCCBzmgAwI...
        </X509Certificate>
    </X509Data>
    <KeyValue>
        <RSAKeyValue>
            <Modulus>
              pb0cJiodddCDVe/t+7...
            </Modulus>
            <Exponent>AQAB</Exponent>
        </RSAKeyValue>
    </KeyValue>
</KeyInfo>
<Object>
    <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Id="QualifyingProperties" Target="#Signature">
        <xades:SignedProperties Id="SignedProperties">
            <xades:SignedSignatureProperties>
                <xades:SigningCertificate>
                    <xades:Cert>
                        <xades:CertDigest>
                            <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                            <DigestValue>UZq4NIL9eVVA7aJixPeiUTM3nOM=</DigestValue>
                        </xades:CertDigest>
                        <xades:IssuerSerial>
                            <X509IssuerName>XXXXXXXXXXXX....</X509IssuerName>
                            <X509SerialNumber>705964899...</X509SerialNumber>
                        </xades:IssuerSerial>
                    </xades:Cert>
                </xades:SigningCertificate>
            </xades:SignedSignatureProperties>
            <xades:SignedDataObjectProperties/>
        </xades:SignedProperties>
    </xades:QualifyingProperties>
</Object>

希望这会有所帮助,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2012-09-26
    相关资源
    最近更新 更多