![]() |
Firma de XML
Buenas.
Os cuento lo que estoy haciendo, y las dudas que tengo respecto a la firma de los XML que se envían a los WS. Estoy generando ficheros XML, por el momento con una sola factura cada vez, y controlando la respuesta. Envio altas de registros, subsanaciones y borrados, y todo bien. Genero los XML y los envio tal cual al entorno de pruebas, mediante TIdHTTP y TIdSSLIOHandlerSocketOpenSSL. Todo perfecto. Ahora vienen las dudas. Es obligatorio firmar los XML? Me explico, puedo generar el XML y firmarlo con openssl, eso ya lo tengo hecho, pero realmente es necesario? Ahora los envio sin firmar y va bien, y se me genera la duda. Y otra cosa más. En las descripciones de los XML, viene un campo llamado "Signature". Yo no lo estoy poniendo y no me da problemas. Aun así, puedo generar una firma en Base64, aunque no lo estoy poniendo porque no sé si hay que ponerlo o no. En fin, que tengo dudas con estas dos cosas, si hay que hacerlo o no, en qué orden, etc. Os agradecería algo de luz en este tema. Gracias. |
Cita:
La firma de registros es obligatoria en el modo no-veri*factu (cuando no se envían los registros de firma voluntaria, sino bajo requerimiento). Cita:
|
Ok, gracias.
El sistema deberá de funcionar en modo VeriFactu y NoVerifactu, por lo que necesito la posibilidad de firmar los XML, ya sea con algún componente, o llamando a alguna utilidad externa, o ... Y en eso estoy atascado, buscando informacion pero no consigo dar con la tecla. Esa es la ayuda que necesito del foro. Gracias anticipadas. |
generacion manual de la firma
Bueno, al final he optado por generar la firma de manera manual, siguiendo una serie de pasos, y he conseguido generar los XML firmados. Cuando consiga hacerlo de otra manera, ampliaré el hilo. Yo uso os componentes de Devart Securebridge, pero este caso concreto no lo he conseguido hacer, por eso opto por generación "artesana".
Os cuento los pasos que he seguido, por si a alguien le sirve, o si incluso se le ocurre alguna mejora. A mi, de esta manera, me funciona. - Generamos valor para el elemento <ds:DigestValue>, hash SHA-256 del XML completo (lógicamente sin la firma) - Con eso ya tenemos el nodo <ds:SignedInfo> - Ese nodo <ds:SignedInfo>, lo firmamos. En mi caso, lo hago con openssl, utilizando el certificado (de momento el de pruebas proporcionado por la AEAT) - El resultado lo paso a Base64 (1). - Pasamos a Base64, el certificado, para tener el elemento <ds:X509Certificate> del nodo <ds:SignatureValue> (2). - Para terminar, con la firma en base64 (1) y el certificado, montamos el nodo <ds:SignatureValue> - Ya teniendo los nodos <ds:SignedInfo> y <ds:SignatureValue>, se monta el nodo <ds:Signature> que se incrusta en el XML inicial y ya está listo para el envio. Un poco artesanal, pero a mi al menos me funciona perfectamente. El nodo <ds:RSAKeyValue> que aparece en la documentación, no lo envío ya que parece que es opcional y no se suele usar. |
| La franja horaria es GMT +2. Ahora son las 13:45:03. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi