Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Registros de Facturacion y Eventos (XML) (https://www.clubdelphi.com/foros/forumdisplay.php?f=67)
-   -   chequeo de Firma de un Registro (https://www.clubdelphi.com/foros/showthread.php?t=97565)

Faneka 07-01-2025 08:42:20

Cita:

Empezado por razorxxx (Mensaje 561042)
Por cierto, ¿alguien ha conseguido firmar con AutoFirmaCommandline.exe y colocar el nodo <Signature> al final del documento?

Pues ahora que lo comentas yo tuve que mover la etiqueta de la firma a su sitio porque no la coloca donde indica la extructura del veri*factu.

newtron 13-01-2025 19:59:30

Ok. He integrado la forma que comentaba para montar el .xml en mi programa y me encuentro con un error al hacer el envío del fichero:





Lo que hago es interceptar el evento "Beforeexecute" del objeto HTTPRIO para cambiar el stream de la llamada por el fichero .xml montado con la cabecera+ficheros de facturas firmados y me da este mensaje.


¿Alguien sabe de qué puede ser?


Gracias y un saludo.

delphiGar 13-01-2025 20:12:04

Igual que cuando envias para verifactu necesitas el certificado para autenticarte en la aeat, en este caso por requerimiento.

newtron 14-01-2025 09:50:50

Cita:

Empezado por delphiGar (Mensaje 561147)
Igual que cuando envias para verifactu necesitas el certificado para autenticarte en la aeat, en este caso por requerimiento.


El caso es que el certificado ya se asigna al objeto HTTPRIO antes de hacer la llamada en el mismo procedimiento que uso para el modo VeriFactu y ahora lo único que estoy haciendo es sustituir el stream con el nuevo fichero .xml que monto.


En fin... seguiré haciendo pruebas a ver qué averiguo.


Gracias y un saludo.

razorxxx 14-01-2025 12:11:58

Cita:

Empezado por Faneka (Mensaje 561051)
Pues ahora que lo comentas yo tuve que mover la etiqueta de la firma a su sitio porque no la coloca donde indica la extructura del veri*factu.

Si le pasas en el config los parámetros necesarios, sí te la coloca donde es. Por ejemplo, yo hago:
Cita:

AutoFirmaCommandLine.exe sign -i "ejemplo.xml" -o "ejemplo_signed.xml" -format xades -config "format=XAdES Enveloped \nincludeOnlySignningCertificate=true \npolicyIdentifier=urnid:2.16.724.1.3.1.1.2.1.9 \npolicyIdentifierHash=Dkx2R3nMv8kWo7iSAh+/1SQ70hfseOEaQbpJnURk+pg= \npolicyIdentifierHashAlgorithm=http://www.w3.org/2001/04/xmlenc#sha256 \npolicyQualifier=https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf" -store pkcs12:"cert.pfx" -password XXXX -filter subject.contains:89890001K

Faneka 14-01-2025 12:18:00

Ah, perfecto, lo probare, gracias.

razorxxx 14-01-2025 12:27:32

Cita:

Empezado por Faneka (Mensaje 561161)
Ah, perfecto, lo probare, gracias.

No obstante, como ya comenté en otro hilo, a mi la firma del XML no me valida desde valide.redsara.es. Me devuelve el error "El hash de la política incluido en la firma no coincide con el hash real de la política de firma".

Si alguno lo ha conseguido y quiere compartirlo, agradecidísimo!

Neftali [Germán.Estévez] 14-01-2025 12:27:41

Cita:

Empezado por razorxxx (Mensaje 561160)
Si le pasas en el config los parámetros necesarios, sí te la coloca donde es. Por ejemplo, yo hago:


Actualizado mensaje#2 con códigos útiles.
Gracias.

razorxxx 14-01-2025 14:56:55

Cita:

Empezado por newtron (Mensaje 561154)
El caso es que el certificado ya se asigna al objeto HTTPRIO antes de hacer la llamada en el mismo procedimiento que uso para el modo VeriFactu y ahora lo único que estoy haciendo es sustituir el stream con el nuevo fichero .xml que monto.


En fin... seguiré haciendo pruebas a ver qué averiguo.

Gracias y un saludo.

Si los objetos HTTPRIO los arrastraste desde el Palette, tienes que tener uno por cada unit que utilices con HTTPRIO. Esto es porque desde que se haga una llamada a un método de una unit, se crea un contexto sobre dicha interface, y luego no hay manera de eliminar ese contexto para hacer una llamada a un método de otra unit (nos daría el error "interface not supported").

La otra opción es crearlos a pelo desde código mediante un Create y destruirlos tras la petición al WebService.

delphiGar 14-01-2025 17:52:50

Cita:

Empezado por razorxxx (Mensaje 561160)
Si le pasas en el config los parámetros necesarios, sí te la coloca donde es. Por ejemplo, yo hago:

Aunque yo no utilizo Autofirma para firmar los ficheros.

El codigo correcto para autofrima seria este:
Código:

AutoFirmaCommandLine.exe sign -i "c:\envio_firmado.xml" -o "c:\envio_firmado_a.xsig" -format xades -config "format=XAdES Enveloped \nincludeOnlySignningCertificate=true \npolicyIdentifier=urn:oid:2.16.724.1.3.1.1.2.1.9 \npolicyIdentifierHash=G7roucf600+f03r/o0bAOQ6WAs0= \npolicyIdentifierHashAlgorithm=http://www.w3.org/2000/09/xmldsig#sha1 \npolicyQualifier=https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf" -store auto -certgui

newtron 16-01-2025 11:32:09

Ok. Creo que ya he conseguido enviar facturas en modo NO Verifactu. Resumo un poco lo que he hecho por si a alguien le viene bien.


Partimos de la base de que las facturas las tengo en una carpeta del disco duro firmadas. Para generar los ficheros de las facturas de forma simple lo que hago es rellenar el objeto SOAP igual que si lo fuera a enviar en modo Verifactu y desde ahí lo paso a un string que firmo y guardo en formato .XML en el disco. Tengo un fichero por cada factura. El código para guardar el fichero a partir del objeto SOAP lo saqué de por aquí, la verdad es que no recuerdo el hilo. La firma la hago con una dll que me hicieron en .net y parece que firma correctamente para Verifactu. Si a alguien le viene bien se la puedo pasar.


Una vez que tengo los ficheros con las facturas en el disco lo que hago es crear un fichero .XML "a pelo", le meto los datos de la cabecera, luego voy abriendo los ficheros XML de las facturas y los voy añadiendo a este fichero y al final cierro los nodos de la cabecera. Luego hago una llamada "tontuna" al HTTPRIO e intercepto el evento "OnBeforeExecute" sustituyendo el stream que envía por un stream creado a partir de este fichero .XML (código más arriba) y... ¡voilá! me da resultado correcto de todas las facturas que he metido en el fichero .XML que he creado.


Un problema que me he encontrado es que al guardar el fichero de cada factura con las llamadas SOAP algunos de los nodos no los nombra bien, les pone <item> y he tenido que localizarlos y cambiarlos por su valor correcto según iba creando el fichero .XML


Igual me he complicado mucho la vida pero no encontraba por aquí ningún ejemplo de envío NO Verifactu, si alguien sabe una forma más fácil será bien recibido.


Saludos.

elcharlie 29-01-2025 10:25:57

Hola, a alguien le sale la firma con Secure Black Box?, en ticketbai he podido realizarlo sin problema, pero en No verifactu, no me sale de ninguna de las maneras.
Al enviar el fichero a hacienda, no me da error, pero en cambio si lo intento validar en https://valide.redsara.es/valide/val.../ejecutar.html, me da error.

el código que tengo es este:

Código Delphi [-]
//FIRMO EL FICHERO DE LA FACTURA
    sbxXAdESSigner := TsbxXAdESSigner.Create(nil);
    sbxXAdESSigner.InputFile := FicheroFactura;
    sbxXAdESSigner.OutputFile := FicheroFacturaFirmado;

    GDWinCertStorage := TsbxCertificateStorage.Create(nil);
    if GDWinCertStorage.Opened then
      GDWinCertStorage.Close(True);

    GDWinCertStorage.Open(CERTIFICATE_STORAGE_LOCAL);
    GDWinCertStorage.Refresh;

    for var I := 0 to GDWinCertStorage.Certificates.Count - 1 do
    begin
      if BinToStr(GDWinCertStorage.Certificates[i].SerialNumber) = GDSerialCertificado then
      begin
        Cert := GDWinCertStorage.Certificates[i];
        Break;
      end;
    end;



    sbxXAdESSigner.SigningCertificate := Cert;
    sbxXAdESSigner.NewSignature.SignatureType := cxstEnveloped;
    sbxXAdESSigner.NewSignature.CanonicalizationMethod := cxcmCanon;
    sbxXAdESSigner.NewSignature.HashAlgorithm := 'SHA256';
    sbxXAdESSigner.NewSignature.XMLElement := 'RegistroAlta';
    sbxXAdESSigner.NewSignature.XAdES := True;
    sbxXAdESSigner.NewSignature.XAdESVersion := TsbxXAdESVersions.xav132;
    sbxXAdESSigner.NewSignature.XAdESForm := TsbxXAdESForms.xafEPES;
    sbxXAdESSigner.Config('IncludeKey=true');
    sbxXAdESSigner.Config('KeyInfoDetails=certificate,issuerserial,subjectname');

    //DATOS DE POLITICA DE LA FIRMA ESTATAL
    sbxXAdESSigner.Config('SigPolicyID=' + SIG_POLICY_ID_ESTATAL); // 'urn:oid:2.16.724.1.3.1.1.2.1.9'
    sbxXAdESSigner.Config('SigPolicyHash=' + SIG_POLICY_HASH_ESTATAL); // '1BBAE8B9C7FAD34F9FD37AFFA346C0390E9602CD'; //BASE64=G7roucf600+f03r/o0bAOQ6WAs0=
    sbxXAdESSigner.Config('SigPolicyHashAlgorithm=' + SIG_POLICY_HASH_ALGORITHM_ESTATAL); // 'SHA1'
    sbxXAdESSigner.Config('SigPolicyURI=' + SIG_POLICY_URI_ESTATAL); //'https://sede.administracion.gob.es/politica_de_firma_anexo_1.pdf'


    sbxXAdESSigner.Sign();
    sbxXAdESSigner.Free;

    if GDWinCertStorage.Opened then
        GDWinCertStorage.Close(True);

    Cert.Free;
    Cert := nil;

Gracias

Neftali [Germán.Estévez] 29-01-2025 15:57:27

Cita:

Empezado por elcharlie (Mensaje 561521)
Hola, a alguien le sale la firma con Secure Black Box?, en ticketbai he podido realizarlo sin problema, pero en No verifactu, no me sale de ninguna de las maneras.
Al enviar el fichero a hacienda, no me da error, pero en cambio si lo intento validar en https://valide.redsara.es/valide/val.../ejecutar.html, me da error.


¿Y si pruebas con las herramientas de firma que hay aquí?

Revisa también este mensaje, si no lo has hecho. Hay varios códigos referentes a la firma del XML.

elcharlie 30-01-2025 07:49:57

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561539)
¿Y si pruebas con las herramientas de forma que hay aquí?

Revisa también este mensaje, si no lo has hecho. Hay varios códigos referentes a la firma del XML.

Gracias Germán. no conocía esta herramienta. Algo le pasa que no acaba de cargar la web, lo mirare estos días por si lo arreglan.

Neftali [Germán.Estévez] 30-01-2025 09:26:55

Cita:

Empezado por elcharlie (Mensaje 561554)
Algo le pasa que no acaba de cargar la web, lo mirare estos días por si lo arreglan.

A mi me pasa que a veces también se bloquea.
Entra en la pagina "Home" (https://servicios.izenpe.com/home/mostrarWelcome.do) y desde ahí accede "Herramientas de firma de documentos" y desde ahí a "Validar firmas".

elcharlie 30-01-2025 09:43:43

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561561)
A mi me pasa que a veces también se bloquea.
Entra en la pagina "Home" (https://servicios.izenpe.com/home/mostrarWelcome.do) y desde ahí accede "Herramientas de firma de documentos" y desde ahí a "Validar firmas".

Haciéndolo así, si que funciona la web.
Gracias.

Por cierto, ayer me puse en contacto con la AEAT, y me dijeron, que iban a publicar un nuevo servicio de validación de firmas electrónicas de documentos, para que podamos probarlo.
Se anunciara en el tablón de anuncios, en https://www.agenciatributaria.es/AEA...Novedades.html
para el que le interese....

Neftali [Germán.Estévez] 30-01-2025 10:20:33

Cita:

Empezado por elcharlie (Mensaje 561563)
Por cierto, ayer me puse en contacto con la AEAT, y me dijeron, que iban a publicar un nuevo servicio de validación de firmas electrónicas de documentos, para que podamos probarlo.
Se anunciara en el tablón de anuncios, en https://www.agenciatributaria.es/AEA...Novedades.html
para el que le interese....

Ambas noticias están publicadas en el foro de General/Noticias.
Parece que lo que hay hasta ahora es el de consulta de facturas.
Ya estaban los de remisión de facturas de forma voluntaria o por requerimiento (con certificado):

elcharlie 30-01-2025 11:23:02

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 561564)
Ambas noticias están publicadas en el foro de General/Noticias.
Parece que lo que hay hasta ahora es el de consulta de facturas.
Ya estaban los de remisión de facturas de forma voluntaria o por requerimiento (con certificado):

Perfecto, gracias Germán, esta vez con el VERI*Factu me esta pillando un poco el toro. Toda la ayuda es buena.
Se agradece, Muchas Gracias.

xapusoft 07-04-2025 08:32:36

Buenos días.


Soy nuevo por aquí y en primer lugar quería agradeceros todas las aportaciones que hacéis.


Estamos en proceso de implantación de NO VeriFactu y me surge una duda. ¿Cómo estáis probando que la firma es correcta? En las especificaciones indican que hay que usar sha256 pero al firmar con autofirma siempre me firma con sha512 por mucho que he intentado forzarlo. El caso es que he mandado un requerimiento de factura firmada con sha512 al entorno de validación y me lo ha dado por correcto, pero luego he intentado a mandarlo con la firma incorrecta, incluso sin firma, cuando ahí es obligatorio, y me lo sigue dando por bueno. Entiendo que en ese entorno te valida sólo la factura y no la firma. ¿Hay algún sitio o alguna forma de asegurarme que la firma que estoy creando es correcta?

razorxxx 07-04-2025 11:48:10

Cita:

Empezado por xapusoft (Mensaje 563482)
Buenos días.


Soy nuevo por aquí y en primer lugar quería agradeceros todas las aportaciones que hacéis.


Estamos en proceso de implantación de NO VeriFactu y me surge una duda. ¿Cómo estáis probando que la firma es correcta? En las especificaciones indican que hay que usar sha256 pero al firmar con autofirma siempre me firma con sha512 por mucho que he intentado forzarlo. El caso es que he mandado un requerimiento de factura firmada con sha512 al entorno de validación y me lo ha dado por correcto, pero luego he intentado a mandarlo con la firma incorrecta, incluso sin firma, cuando ahí es obligatorio, y me lo sigue dando por bueno. Entiendo que en ese entorno te valida sólo la factura y no la firma. ¿Hay algún sitio o alguna forma de asegurarme que la firma que estoy creando es correcta?

Tengo entendido que los de AEAT iban a sacar un servicio online de validación de firma de registros. En cuanto a la firma estoy igual que tú, el AutoFirma siempre le manda el sha512 y la validación de la firma en ValiDe es correcta, pero no sé si también lo será para VeriFactu.

jlmoli_67 11-04-2025 12:58:07

xades-epes verifactu y facturae
 
Buenas,


La firma en Facturae requiere XADES-EPES al igual que en verifactu. Se podria emplear la firma que se usa en facturae para verifactu?


gracias

mmm 30-06-2025 11:10:55

Nodo = RegistroAlta
 
Buenos días,

¿Alguien a firmado con AutoFirmaCommandLine el nodo RegistroAlta? ¿Cual seria el comando?

Un Saludi

Neftali [Germán.Estévez] 30-06-2025 11:50:37

Cita:

Empezado por mmm (Mensaje 565923)
¿Alguien a firmado con AutoFirmaCommandLine el nodo RegistroAlta? ¿Cual seria el comando?

Por favor, a ver si realizamos búsqueda en los foros antes de preguntar sobre cosas que ya se han preguntado y contestado.
Hay varios hilos sobre las firmas y ya está respondida la pregunta que realizáis.

Revisad la guía de estilo de los foros.
Revisad hilos:
https://www.clubdelphi.com/foros/showthread.php?t=97451
https://www.clubdelphi.com/foros/showthread.php?t=97119

En el Mensaje numero #2 también hay varias referencias a la firma.

mmm 30-06-2025 13:31:36

AutoFirmaCommandLine
 
Buenos días

En todos los ejemplos de firmas que he visualizado, se firma el documento cumpleto, no se hace referencia a un nodo especifico.
En este caso en Verifactu es necesario firmar cada nodo "RegistroAlta" incluido dentro del documento XML.

Alguien a utilizado el parametro insertEnvelopedSignatureOnNodeByXPath en AutoFirmaCommandLine, no he encontrado ningún ejemplo.

Gracias

Neftali [Germán.Estévez] 01-07-2025 09:16:44

Cita:

Empezado por mmm (Mensaje 565931)
En este caso en Verifactu es necesario firmar cada nodo "RegistroAlta" incluido dentro del documento XML.

Tal vez no te he entendido bien, pero en los ficheros XML a firmar sólo puede haber 1 nodo <RegistroAlta> o <RegistroAnulacion>.
Revisa en este mensaje las referencia a la firma:
https://www.clubdelphi.com/foros/sho...92&postcount=2

bmfranky 01-07-2025 09:19:51

Cita:

Empezado por mmm (Mensaje 565931)
Buenos días

En todos los ejemplos de firmas que he visualizado, se firma el documento cumpleto, no se hace referencia a un nodo especifico.
En este caso en Verifactu es necesario firmar cada nodo "RegistroAlta" incluido dentro del documento XML.

Alguien a utilizado el parametro insertEnvelopedSignatureOnNodeByXPath en AutoFirmaCommandLine, no he encontrado ningún ejemplo.

Gracias

Hola, en Veri*Factu, no se ha de firmar nada.
En NoVeri*Factu, se guardan unicamente los nodos de alta o baja, que son los que van firmados,seguro que no se esta confundiendo?

Neftali [Germán.Estévez] 01-07-2025 13:32:05

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 565954)
Tal vez no te he entendido bien, pero en los ficheros XML a firmar sólo puede haber 1 nodo <RegistroAlta> o <RegistroAnulacion>.
Revisa en este mensaje las referencia a la firma:
https://www.clubdelphi.com/foros/sho...92&postcount=2

Cita:

Empezado por bmfranky (Mensaje 565956)
Hola, en Veri*Factu, no se ha de firmar nada.

Correcto, gracias por la aclaración.
Daba eso por supuesto.

ilisoft21 04-07-2025 12:20:39

chequeo de Firma de un Registro
 
Buenos días!!!

Estamos con el proceso de chequeo de registros.
He estado bien algún ejemplo de VS para validar una firma.
¿tenéis alguna información para poder hacerlo desde Delphi?

Gracias.

gcqZW 04-07-2025 12:23:50

Mírate el post justo anterior al tuyo, ahí hablan de ello.

Neftali [Germán.Estévez] 04-07-2025 13:51:17

Por favor, hagamos un búsqueda en los foros antes de crear nuevos hilos.
Revisad la Guía de estilo de los foros.

Muevo hilo...

Por no decir que aparte de este ya hay otros similares:
https://www.clubdelphi.com/foros/showthread.php?t=97119
https://www.clubdelphi.com/foros/showthread.php?t=97192
https://www.clubdelphi.com/foros/showthread.php?t=97451


La franja horaria es GMT +2. Ahora son las 19:34:09.

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