Недопустимая подпись XML при добавлении пространства имен

Я создаю подпись XML Xades. Мне нужно добавить пространство имен http://uri.etsi.org/01903/v1.3.2# в подписи TAG.

Если я добавлю этот ТЕГ после подписания документа, я получу ошибку неверной подписи.

Я не знаю, как добавить его раньше, потому что у меня есть TAG-подпись только после подписания ».

Это код для добавления пространства имен

void addNamespace(doc)
{

    NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");

    Node a = nl.item(0);

    Element sig = (Element)a;

sig.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:etsi","http://uri.etsi.org/01903/v1.3.2#");

}

Код для подписи:

signContext = new DOMSignContext(pk, parentElement);
signContext.putNamespacePrefix("http://uri.etsi.org/01903/v1.3.2#","etsi");
XMLSignature signature;
signature.sign(signContext);
addNamespace(doc);

XML:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>

ds: Signature xmlns: ds =" http://www.w3.org/2000/09/xmldsig# "Id =" Signature-830342 ">

 <ds:SignedInfo Id="SignedInfo-830342">
 <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:Reference URI="">
 <ds:Transforms>
 <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
 </ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>tKDaVHCywRrFbblaDIKZjUviXkI=</ds:DigestValue>
</ds:Reference>
<ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-830342">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>M/coSDm1tqC4DKkbCyXUP82fB58=</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#KeyInfo-830342">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>pInn5xZepngScAKAse0zZPuhyNU=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>

<ds:SignatureValue Id="SignatureValue843847">
PTJj6kXgDNRwXKQvDH5xr+FF5+naKjAo3bl70Wwlc6MAU2EgMTaCnh7Ml7wvfKvNWbPvTL+5bXYH FlSuC3PsDn2SguQ1vvWm1xI6cZAKh0w4sMiQiS9UDjxIifyZZqNwcZ7uCX2c6K+S7xNQZzcPi5HW oQ+6Pq8vtSZODxN6b0Y=
</ds:SignatureValue>

<ds:KeyInfo Id="KeyInfo-830342">
<ds:X509Data>
<ds:X509Certificate>
MIIDiTCCAnGgAwIBAgIBKjANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJFUzESMBAGA1UECBMJ QmFyY2Vsb25hMQ8wDQYDVQQKEwZpc2lnbWExFzAVBgNVBAMTDmlzaWdtYSByb290IENBMR8wHQYJ KoZIhvcNAQkBFhBpc2lnbWFAaXNpZ21hLmVzMB4XDTE0MDUzMDA4MjgxOFoXDTE5MDUyOTA4Mjgx OFowgZsxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwliYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9u YTEPMA0GA1UEChMGaXNpZ21hMQswCQYDVQQLEwJpdDETMBEGA1UEAxMKRGVtb3MgdXNlcjESMBAG A1UEBRMJMTIzNDU2NzhaMR0wGwYJKoZIhvcNAQkBFg5pbmZvQGlzaWdtYS5lczCBnzANBgkqhkiG 9w0BAQEFAAOBjQAwgYkCgYEAl+AvFwUL16YdzlPT42EMEBhvWQP5Cmt4RXFMKTZ7TXes0y/jT/l1 VF3evNuGI+RZCweUGVqzRWA3z+tV3qbVXuRKtNfXjGvhtG8RTX2SYwqvjDGsnR0XS8Gd1kGUGbeL fOE8vF3q5O2OiN5FF0xMg/0uEw2fZ3P9zONVLsT/A6kCAwEAAaOBiTCBhjAJBgNVHRMEAjAAMAsG A1UdDwQEAwIHgDAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw HQYDVR0OBBYEFCc/oVSDFtH46U81hILH78cwLnR9MB8GA1UdIwQYMBaAFLIkRa3EwPkvEabba+7h fY4FDjr9MA0GCSqGSIb3DQEBBQUAA4IBAQB1TpQ66zJL+69iooqSQIryzLykWqcXeVeJOAWbGwbP x2P5LVboqXRxj5j9jmlTyqQLRoHLS5BaExq+P+2sPd/BOU2/QV9yrv7uAFkxyQjcMip8eqj1pc0X gqW+JoIkeeqa+UWj+fVQg/YqHsFNgkSoxCf4aPWC2x5X33SH6D8QkXQw4FJcRppfmr4ljsbPmuvV V1uk34I6PTb3gRlVIiTvUWtRaOLQ0lDlFa5bO5rd9nQV7UsK2e7ghXZpUtdW6OAYIuP3ASweOlE1 6z2DiMlYMGJ8Ci/vdcG1eEhVQoV0+z2s78ybJXelTiuxHvuJLPTNk5eoG5zAOAz8oFoQi+51
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
<ds:Object Id="Signature20257-data545881">
<xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#"Target="#Signature-830342">
<xades:SignedProperties Id="SignedProperties-830342">
<xades:SignedSignatureProperties>
<xades:SigningTime>2014-07-08T12:40:02+02:00</xades:SigningTime>
<xades:SigningCertificate>
<xades:Cert>
<xades:CertDigest>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>ivK7JSJgkt1YHLuXeUphxagMGcI=</ds:DigestValue>
</xades:CertDigest>
</xades:Cert>
</xades:SigningCertificate>
<xades:SignaturePolicyIdentifier>
<xades:SignaturePolicyId>
<xades:SigPolicyId>
<xades:Identifier>
http://www.facturae.es/politica_de_firma_formato_facturae/politica_de_firma_formato_facturae_v3_1.pdf
</xades:Identifier>
<xades:Description>facturae31</xades:Description>
</xades:SigPolicyId>
<xades:SigPolicyHash>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>Ohixl6upD6av8N7pEvDABhEL6hM=</ds:DigestValue>
</xades:SigPolicyHash>
</xades:SignaturePolicyId>
</xades:SignaturePolicyIdentifier>
<xades:SignerRole>
<xades:ClaimedRoles>
<xades:ClaimedRole>supplier</xades:ClaimedRole>
</xades:ClaimedRoles>
</xades:SignerRole>
</xades:SignedSignatureProperties>
<xades:SignedDataObjectProperties/>
</xades:SignedProperties>
<xades:UnsignedProperties/>
</xades:QualifyingProperties>
</ds:Object>
</ds:Signature>
</note>

Мне нужно, чтобы пространство имен было в подписи TAG, а не в объекте TAG


person TimeStron    schedule 03.07.2014    source источник
comment
XMLSignature signature; signature.sign(signContext); должен потерпеть неудачу, не так ли?   -  person mkl    schedule 03.07.2014
comment
@mkl Я не понимаю о чем ты. Сейчас это не подводит нас. Метод подписи включает хэш документа, помещает ссылки ... и мне нужно установить пространство имен в середине процесса подписи   -  person TimeStron    schedule 04.07.2014
comment
Я не понимаю, что вы имеете в виду - я хотел сказать, что код, представленный в вашем вопросе, вызывает sign неназначенной переменной. Поскольку это не дает сбоев, я предполагаю, что вы просто не предоставили назначение объекта подписи.   -  person mkl    schedule 04.07.2014
comment
Да, вы правы, но не имеет значения это задание на решение вопроса.   -  person TimeStron    schedule 04.07.2014
comment
Ok. Можете ли вы предоставить образец подписанного документа до и после этого addNamespace звонка? Кроме того, какой верификатор выдает эту ошибку неверной подписи?   -  person mkl    schedule 04.07.2014
comment
Скорее всего, ответ @rzysia применим. Если бы вы предоставили образцы документов, этот ответ можно было бы еще проиллюстрировать.   -  person mkl    schedule 08.07.2014
comment
@mkl, хорошо, я сделаю это.   -  person TimeStron    schedule 08.07.2014
comment
Можете ли вы также предоставить XML после вашего addNamespace звонка? Потому что я не обязательно вижу добавление того, что нигде не используется идентификатор пространства имен etsi, изменяющий подписанную информацию.   -  person mkl    schedule 08.07.2014
comment
То же самое, что я добавил с пространством имен в теге подписи. Метод подписи Java API подписывает domsigncontext, который генерирует, подписывает и упорядочивает тег подписи, ссылки и подписываемый документ.   -  person TimeStron    schedule 09.07.2014


Ответы (1)


Пространства имен используются для вычисления хеш-значения. Канонизация должна добавить их в документ (дополнительно в алфавитном порядке). Добавление пространств имен в подписанный документ, очевидно, изменит его хэш

person rzysia    schedule 08.07.2014
comment
Да, но как я могу добавить это с помощью канонизации? - person TimeStron; 08.07.2014
comment
Я использую nu.xom.canonical.Canonicalizer, но он не добавляет пространства имен - я делаю это самостоятельно (после канонизации с помощью xom). При этом вы должны помнить о правилах канонизации - напр. об алфавитном порядке добавленных пространств имен. Лучшим источником канонизации является w3.org/TR/xml-c14n, но это ( di-mgt.com.au/xmldsig.html) был самым полезным для меня - person rzysia; 09.07.2014