Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco (https://www.clubdelphi.com/foros/showthread.php?t=94264)

Neftali [Germán.Estévez] 05-10-2021 08:41:00

Cita:

Empezado por espinete (Mensaje 543321)
Después de firmarlo no he hecho ninguna modificación (salvo guardarlo con otro nombre).
Revisaré mañana el contenido del XML por si hay caracteres especiales, pero lo dudo mucho porque estoy usando datos de prueba muy básicos.


Hemos hablado antes de este error. Revisa mensajes anteriores.
Es posible que el contenido se esté modificando, aunque no sea de forma consciente. Revisa si después de firmar el XML hasta que lo envías ha cambiado el contenido (a veces simplemente se guarda con otra codificación). No porque lo hagas tú, sino porque lo haga el propio Delphi en alguno de los pasos (guardar, recuperar,...).

Band 05-10-2021 09:38:38

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 543331)
Hemos hablado antes de este error. Revisa mensajes anteriores.
Es posible que el contenido se esté modificando, aunque no sea de forma consciente. Revisa si después de firmar el XML hasta que lo envías ha cambiado el contenido (a veces simplemente se guarda con otra codificación). No porque lo hagas tú, sino porque lo haga el propio Delphi en alguno de los pasos (guardar, recuperar,...).


A eso es a lo que me refería antes, que una vez firmado, sea cual sea la acción que realices sobre el fichero no se puede modificar nada o habrá errores en la validación de firma. Como bien dice Neftali, no porque uno mismo lo haga, sino el propio delphi o lenguaje usado que pueden "dar por culo" en este sentido sin que uno lo sepa.

ermendalenda 05-10-2021 10:27:28

Cita:

Empezado por Band (Mensaje 543333)
A eso es a lo que me refería antes, que una vez firmado, sea cual sea la acción que realices sobre el fichero no se puede modificar nada o habrá errores en la validación de firma. Como bien dice Neftali, no porque uno mismo lo haga, sino el propio delphi o lenguaje usado que pueden "dar por culo" en este sentido sin que uno lo sepa.

Hemos coincidido todos

elcharlie 05-10-2021 10:39:59

Una duda que tengo, y a ver si alguien me sabe responder, ¿como haceis para saber si el servicio-url está activo? Lo digo porque ahora que está caido el servidor de Bizkaia de Pruebas, no tenga que estar esperando al Timeout siempre.
No sé si hay manera o simplemente es asi.

ermendalenda 05-10-2021 11:15:40

Cita:

Empezado por elcharlie (Mensaje 543336)
Una duda que tengo, y a ver si alguien me sabe responder, ¿como haceis para saber si el servicio-url está activo? Lo digo porque ahora que está caido el servidor de Bizkaia de Pruebas, no tenga que estar esperando al Timeout siempre.
No sé si hay manera o simplemente es asi.

Creo que no hay otra forma. Te puedes hacer un pequeño algottirmo que cada fallo aumente el tiempo del siguiente reintento, hasta un tope de 30min por ejemplo, y reinicies el temporizador cuando haya conexión. Teniendo en cuenta de que hay que mandarlas en orden en cuanto haya conexión.
Por otro lado puedes hacer una conexión previa con un fichero vacio(esta en este hilo unos cuantos posts atrás) y ponerle un timeout muy corto.
O combinar los 2.

Ramon88 05-10-2021 12:01:24

Cita:

Empezado por iMia (Mensaje 543320)


Si si, ya lo tengo, gracias!^\||/
Por mas que os leía no me funcionaba y era por que lo convertía SOLO para abrir el enlace ,sin calcular el CRC de nuevo.
Me ha sido un poco lioso, pero ya está!


Gracias!

elcharlie 05-10-2021 12:51:14

Cita:

Empezado por ermendalenda (Mensaje 543337)
Creo que no hay otra forma. Te puedes hacer un pequeño algottirmo que cada fallo aumente el tiempo del siguiente reintento, hasta un tope de 30min por ejemplo, y reinicies el temporizador cuando haya conexión. Teniendo en cuenta de que hay que mandarlas en orden en cuanto haya conexión.
Por otro lado puedes hacer una conexión previa con un fichero vacio(esta en este hilo unos cuantos posts atrás) y ponerle un timeout muy corto.
O combinar los 2.

Pues nada, así lo haré, era por si había alguna otra manera mas rápida de comprobarlo...
Muchas gracias por todo.

Eric Mtz 05-10-2021 13:30:24

Fechas de Batuz :)
 
Muy buenas señores del internete, sigo vivo, tan solo os quería compartir una respuesta de BATUZ que me ha hecho mucha gracia, el caso es que les he preguntado si tenemos algún servidor de pruebas en Bizkaia ahora que nos han cerrado el de siempre y el nuevo parece que le queda medio mes de cocción.

Respuesta:
Cita:

Kaixo,
El 30 de Septiembre se cerró el entorno de pruebas de los servicios web del LROE que llevaba habilitado desde noviembre de 2020. Está previsto habilitar a mediados de octubre el entorno real del LROE a modo de pruebas.

En este periodo, por labores de mantenimiento, no hay un entorno disponible para probar. Sentimos la molestias y quedamos a su disposición para realizar revisiones manuales de ficheros o contestar las dudas que pudieran surgirle.

Agur bat

Me turboflipa la decisión de quitar los servidores un par de semanas, de hecho me alaga, creo que piensan que somos tan buenos que podemos dedicar el tiempo a... nose cultivar olivos en nuestra finca en venus o a meditar sobre la ingeniosa e infravalorada característica de comprimir un archivo gzip dos veces, yo iría mas allá y publicaría el servidor a una semana de su obligatoriedad, total solo afectará a los nervios de cuatro programadores que como mucho les pondrán a parir en un foro perdido de la mano de Batuz.

Que opináis?, también os maravillan las nuevas medidas para aumentar el índice de motivación de los programadores?

Neftali [Germán.Estévez] 05-10-2021 14:01:20

Cita:

Empezado por Eric Mtz (Mensaje 543343)
Me turboflipa la decisión de quitar los servidores un par de semanas, de hecho me alaga, creo que piensan que somos tan buenos que podemos dedicar el tiempo a... nose cultivar olivos en nuestra finca en venus o a meditar sobre la ingeniosa e infravalorada característica de comprimir un archivo gzip dos veces, yo iría mas allá y publicaría el servidor a una semana de su obligatoriedad, total solo afectará a los nervios de cuatro programadores que como mucho les pondrán a parir en un foro perdido de la mano de Batuz.

Que opináis?, también os maravillan las nuevas medidas para aumentar el índice de motivación de los programadores?


:D:D:D:D
Creo que más o menos todos estamos pensando lo mismo...

¿Y si había alguien usando producción?
No se si se da el caso, pero si es así, ese si que debe estar flipando...

espinete 05-10-2021 14:41:18

Cita:

Empezado por ermendalenda (Mensaje 543312)
Tiene que quedar así:

Aquí te dejo un par de verificadores de xmls firmados, que están en el foro(No de ticketbai, son genéricos):
http://tools.chilkat.io/xmlDsigVerif...#generatedCode
https://web.uanataca.com/pe/servicio...ma-electronica

Según chilkat:

Signature Verified
Number of Reference Digests = 2
Reference 1 digest is valid.
Reference 2 digest is valid.


Según el otro (con la opción que permite comparar el archivo SIN firmar y el firmado):

"El documento no ha sido modificado después de la firma"
"Certificado de CA confiable"

espinete 05-10-2021 14:50:14

Cita:

Empezado por ermendalenda (Mensaje 543312)
Tiene que quedar así:
Código:

<?xml version="1.0" encoding="UTF-8"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">
<Cabecera>
<IDVersionTBAI>1.2</IDVersionTBAI>
</Cabecera>

.
.
.
.
<HuellaTBAI>
.
.
.
</HuellaTBAI>
<ds:Signature
.
.
..
</ds:Signature>
</T:TicketBai>


Así queda, salvo la primera línea, que en mi XML no existe:

<?xml version="1.0" encoding="UTF-8"?>

No obstante, eso no explica el error "El mensaje ha sido modificado en tránsito o la firma no está bien realizada".

De verdad que no sé en qué proceso se puede estar modificando el contenido del archivo.

A ver si va a ser porque yo estoy en Canarias y hay algún problema con la diferencia horaria...

Band 05-10-2021 15:15:26

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 543344)
:D:D:D:D
Creo que más o menos todos estamos pensando lo mismo...

¿Y si había alguien usando producción?
No se si se da el caso, pero si es así, ese si que debe estar flipando...


Sé que ya había alguien usando producción y no me imagino lo que estarán pensando (o si? :D)

Yo de verdad no entiendo cómo se pueden llegar a estas fumadas... pero viendo quienes están en el poder, no me sorprende nada :D:D:D

Band 05-10-2021 15:23:55

Cita:

Empezado por espinete (Mensaje 543347)
Así queda, salvo la primera línea, que en mi XML no existe:

<?xml version="1.0" encoding="UTF-8"?>

No obstante, eso no explica el error "El mensaje ha sido modificado en tránsito o la firma no está bien realizada".

De verdad que no sé en qué proceso se puede estar modificando el contenido del archivo.

A ver si va a ser porque yo estoy en Canarias y hay algún problema con la diferencia horaria...


Como envías el fichero? Lo digo porque yo lo hago con curl y si no usaba este parámetro:

--data-binary

Se enviaba con alguna modificación y me salía también este mensaje: "El mensaje ha sido modificado en tránsito o la firma no está bien realizada"

ermendalenda 05-10-2021 15:45:27

Cita:

Empezado por espinete (Mensaje 543347)
Así queda, salvo la primera línea, que en mi XML no existe:

<?xml version="1.0" encoding="UTF-8"?>

No obstante, eso no explica el error "El mensaje ha sido modificado en tránsito o la firma no está bien realizada".

De verdad que no sé en qué proceso se puede estar modificando el contenido del archivo.

A ver si va a ser porque yo estoy en Canarias y hay algún problema con la diferencia horaria...

No es descabellado Prueba a forzar la hora del pc a hora peninsular.
De todas formas la primera línea es necesaria. Y haz caso eel comentario de Band, lo puede modificar la aplicación que envía si no está bien parametrizada.

ermendalenda 05-10-2021 15:56:14

Cita:

Empezado por espinete (Mensaje 543346)
Según chilkat:

Signature Verified
Number of Reference Digests = 2
Reference 1 digest is valid.
Reference 2 digest is valid.


Según el otro (con la opción que permite comparar el archivo SIN firmar y el firmado):

"El documento no ha sido modificado después de la firma"
"Certificado de CA confiable"

Falta 1 digest value
Pueden ser varias cosas. Ve arreglando lo de la primera línea y si te sigue faltando 1 digest revisa paramettos de firma y si está bien edita el fichero con un editor hexadecimal para asegurarte y revisa cada carácter comparándolo con algún xml correcto de los que hayan puesto de ejemplo.

espinete 05-10-2021 15:57:39

El envío lo hago tal como indiqué en el primer mensaje, usando el código encontrado en este hilo:

Código Delphi [-]
    RequestBody := TFileStream.Create('firmado.xml', fmOpenRead);

    NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12];
    NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/xml';
    NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8';

    AResponse := NetHTTPClient1.Post('https://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta',RequestBody);

He probado a comentar la siguiente línea:

NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8';

y ocurre lo mismo.

También he añadido manualmente ANTES DE FIRMAR la línea...

<?xml version="1.0" encoding="UTF-8"?>

...al XML (Delphi no la añade al generar el xml con el databinding) y obtengo el mismo error.

Esta tarde probaré a cambiar la HORA al horario peninsular, a ver si es eso.

Ramon88 05-10-2021 16:50:53

Cita:

Empezado por espinete (Mensaje 543356)
El envío lo hago tal como indiqué en el primer mensaje, usando el código encontrado en este hilo:

Código Delphi [-] RequestBody := TFileStream.Create('firmado.xml', fmOpenRead); NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12]; NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/xml'; NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8'; AResponse := NetHTTPClient1.Post('https://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta',RequestBody);


He probado a comentar la siguiente línea:

NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8';

y ocurre lo mismo.

También he añadido manualmente ANTES DE FIRMAR la línea...

<?xml version="1.0" encoding="UTF-8"?>

...al XML (Delphi no la añade al generar el xml con el databinding) y obtengo el mismo error.

Esta tarde probaré a cambiar la HORA al horario peninsular, a ver si es eso.


Lo tienes en c#? si es así puedo mandarte mi código en .Net y si tienes alguna duda puedo ayudarte hasta donde pueda...
EDITO: Termino de ver que es delphi,,, pero reitero que yo tenia un problema parecido y era por que luego de firmar no mantenia los espacios. Estas mostrandonos el código donde envias el post, pero creo que el problema está al cargar el XML, o lo que hagas despues de firmarlo.

ermendalenda 05-10-2021 19:27:58

Cita:

Empezado por espinete (Mensaje 543356)
El envío lo hago tal como indiqué en el primer mensaje, usando el código encontrado en este hilo:

Código Delphi [-] RequestBody := TFileStream.Create('firmado.xml', fmOpenRead); NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12]; NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/xml'; NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8'; AResponse := NetHTTPClient1.Post('https://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta',RequestBody);


He probado a comentar la siguiente línea:

NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8';

y ocurre lo mismo.

También he añadido manualmente ANTES DE FIRMAR la línea...

<?xml version="1.0" encoding="UTF-8"?>

...al XML (Delphi no la añade al generar el xml con el databinding) y obtengo el mismo error.

Esta tarde probaré a cambiar la HORA al horario peninsular, a ver si es eso.

Parece que lo del UTf-8 y noBOM lo tienes bastante mirado y despues de ver que solo te genera 2 digest, me inclinaria por empezar a revisar los parametros de firma, no sé si SecureBlackBox no lo necesita, pero es raro que no haya que decirle por ejemplo que es tipo de firma XADES;
veo campos vacios:
firmante.r_ID := '';
firmante.r_Metodo_Canonicalization := '';

Y deberia haber un Algoritmo del Metodo canonizador, etc,etc..
...CanonicalizationMethod:="http://www.w3.org/TR/2000/WD-xml-c14n-20000710";
....EnableXAdES := True;
...XAdESVersion :=...
.XAdESForm :=...

espinete 05-10-2021 19:43:41

Cita:

Empezado por Ramon88 (Mensaje 543358)
Lo tienes en c#? si es así puedo mandarte mi código en .Net y si tienes alguna duda puedo ayudarte hasta donde pueda...
EDITO: Termino de ver que es delphi,,, pero reitero que yo tenia un problema parecido y era por que luego de firmar no mantenia los espacios. Estas mostrandonos el código donde envias el post, pero creo que el problema está al cargar el XML, o lo que hagas despues de firmarlo.

1. He probado lo de la hora peninsular y sigue igual.

2. No entiendo lo de "falta un digest". Si el problema está en el código de la firma (con SecureBlackBox), el código lo he sacado de este mismo hilo, y creo que es el mismo que se usaba para FacturaE (que, por cierto, publiqué yo mismo hace años)

3. He tenido que usar un editor HEX online para comparar ambos archivos: el firmado y el sin firmar, y he encontrado una diferencia:

Archivo SIN firmar (factura.xml):

<CabeceraFactura>
<SerieFactura></SerieFactura>
<NumFactura>164</NumFactura>

Archivo firmado (firmado.xml)

<CabeceraFactura>
<SerieFactura/>
<NumFactura>164</NumFactura>

¿A donde ha ido el </SerieFactura> que falta? ¿Acaso el proceso de firma quita ese dato?

A simple vista es lo único que falta, salvo eso de que me "falta un digest". Si el código que he usado es el que está en este hilo (aquí), no entiendo lo del digest.

espinete 05-10-2021 19:47:44

Cita:

Empezado por ermendalenda (Mensaje 543365)
Parece que lo del UTf-8 y noBOM lo tienes bastante mirado y despues de ver que solo te genera 2 digest, me inclinaria por empezar a revisar los parametros de firma, no sé si SecureBlackBox no lo necesita, pero es raro que no haya que decirle por ejemplo que es tipo de firma XADES;
veo campos vacios:
firmante.r_ID := '';
firmante.r_Metodo_Canonicalization := '';

Y deberia haber un Algoritmo del Metodo canonizador, etc,etc..
...CanonicalizationMethod:="http://www.w3.org/TR/2000/WD-xml-c14n-20000710";
....EnableXAdES := True;
...XAdESVersion :=...
.XAdESForm :=...

Esos campos están vacíos porque en el procedure de la firma con SecureBlackBox los relleno manualmente, usando las propias variables, etc. de SecureBlackBox:

sbxXAdESSigner1.SignatureType := cxstEnveloped;
sbxXAdESSigner1.CanonicalizationMethod := cxcmCanon;
sbxXAdESSigner1.HashAlgorithm := firmante.r_Hash_algorithm; // SHA256
sbxXAdESSigner1.XMLElement := ''; // Todo el documento
sbxXAdESSigner1.EnableXAdES := True;
sbxXAdESSigner1.XAdESVersion := xav132;
sbxXAdESSigner1.XAdESForm := xafEPES;
sbxXAdESSigner1.Config('SigPolicyID=' + firmante.r_SigPolicyID); // https://ticketbai.eus/politicafirma');
sbxXAdESSigner1.Config('SigPolicyHash=' + firmante.r_SigPolicyHash); // 39D59C038EBB3B7DF6C61ED2F740B318F0C50F93ADCD35E26BE8FF8E76D21DA8;
sbxXAdESSigner1.Config('SigPolicyHashAlgorithm=' + firmante.r_SigPolicyHashAlgorithm); //=SHA256;
sbxXAdESSigner1.Config('SigPolicyURI=' + firmante.r_SigPolicyURI); //https://ticketbai.eus/politicafirma;


La franja horaria es GMT +2. Ahora son las 04:28:34.

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