Генерация XADES-BES с префиксом "ds"
Я использовал подписанный класс для генерации подписи 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:" к подписанному XML.
без "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>
И если вы добавите этот префикс после подписи, он не будет работать.
Итак, я прочитал все вопросы об этом, и не было никаких солитонов,
Мне действительно нужно xmlsignature с префиксом "ds".
Есть ли кто-нибудь, чтобы помочь мне по этому вопросу???
Благодарю.
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 ...
В первом случае вы должны указать ds для элементов в пространстве имен http://www.w3.org/2000/09/xmldsig, во втором случае это пространство имен является пространством имен по умолчанию, поэтому каждый элемент в xml без объявленного префикса имеет вид из этого пространства имен.
Кроме того, вы говорите, что вам нужно добавить префикс ds, чтобы иметь XAdES-BES, и комментируете что-то о разнице между сигнатурами xmldsig и xades. Вы должны знать, что XAdES - это только спецификация, в которой говорится, какие атрибуты необходимы для подписи XMLDSIG, чтобы стать подписью XAdES. Грубо говоря, XAdES - это подпись XMLDSIG, которая включает в себя:<Object http://www.w3.org/2000/09/xmldsig#>
это будет мешок для всего набора квалифицирующих свойств, некоторые из которых подписаны (подписанные свойства), а некоторые - без знака (неподписанные свойства). Для случая XAdES-BES вы должны добавить <xades:SigningCertificate xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
внутри <xades:SignedProperties>
элемент.
Здесь я приведу пример подписи 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>
Надеюсь это поможет,