我使用了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格式,这就是我想将前缀“ds:”添加到signedxml。
没有“ds”,我的sigature验证工作正常,其格式为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>
如果您在签名后添加该前缀,则无效。
所以,我已经阅读了有关这方面的所有问题,并且没有任何sollituon,
我真的需要带有“ds”前缀的xmlsignature。
有没有人帮我解决这个问题?
感谢。
答案 0 :(得分: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签名,其中包含:<Object http://www.w3.org/2000/09/xmldsig#>
,它将成为整个限定属性集的包,其中一些是签名的(signedProperties),其中一些是unsigned(unsignedProperties)。对于XAdES-BES案例,您必须在<xades:SigningCertificate xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
元素中添加<xades:SignedProperties>
。
这里我举一个XAdES-BES签名的例子&#34;没有&#34; 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>
希望这有帮助,