Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Envío de registros y sus respuestas (https://www.clubdelphi.com/foros/forumdisplay.php?f=66)
-   -   La AEAT no me acepta el certificado digital (https://www.clubdelphi.com/foros/showthread.php?t=97537)

FacilIng 18-06-2025 12:55:03

La AEAT no me acepta el certificado digital
 
2 Archivos Adjunto(s)
Buenos días a tod@s :) ...

Estoy intentando hacer mi primer envío de un RdF a la AEAT y, lo que menos me esperaba yo, es que me devolviese un error en HTML indicando que el certificado no es válido.
He cogido el código HTML que me devuelve la AEAT en "responseFromServer" y lo he metido en un WebBrowser. Podéis verlo en la imagen adjunta.
También adjunto todo el texto devuelto en la variable "responseFromServer".
Básicamente lo que me dice es que el certificado electrónico no es válido ... ¡pero sí lo es! :confused:
Es el certificado electrónico (micertificado.p12) emitido por la FNMT que utilizamos en mi empresa para conectarnos a la Seguridad Social, a Hacienda, etc.

El código que uso es el siguiente:

Código:

      'Establecemos el protocolo TLS 1.2 ...
      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
      '4) Realizamos el envío al Webservice de la AEAT --------------------------------------------------------------------------
      '4.1) Definimos el objeto "request" par conectarnos al webservice ...
      varError = 40
      Dim DireccionWebService As String = "https :// prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP" 'TEST (sin los espacios, que no me deja poner enlaces)
      Dim request As HttpWebRequest = HttpWebRequest.Create(DireccionWebService)
      request.Method = "POST"
      request.ContentType = "text/xml; charset=utf-8"
      request.Accept = "text/xml"
      request.Timeout = 60000 'Le damos 60 segundos al servidor para contestar ...
      '4.2) Añadimos el certificado de autenticación para la AEAT al objeto "request" ...
      varError = 50
      Dim miCertificado As String = "micertificado.p12"
      Dim miContraseña As String = "micontraseña"
      Dim cert As New System.Security.Cryptography.X509Certificates.X509Certificate2
      cert.Import(miCertificado, miContraseña, System.Security.Cryptography.X509Certificates.X509KeyStorageFlags.DefaultKeySet)
      request.ClientCertificates.Add(cert)
      '4.3) Preparamos la petición al webservice ...
      varError = 60
      Dim byteArray As Byte() = Encoding.UTF8.GetBytes(lSOAPEnvelope)
      request.ContentLength = byteArray.Length
      Dim dataStream As Stream = request.GetRequestStream()
      dataStream.Write(byteArray, 0, byteArray.Length)
      dataStream.Close()
      '4.4) Envío la petición y obtengo la respuesta ...
      varError = 70
      Dim response As HttpWebResponse = request.GetResponse()
      dataStream = response.GetResponseStream()
      Dim reader As New StreamReader(dataStream)
      Dim responseFromServer As String = reader.ReadToEnd()
      reader.Close() : reader = Nothing
      dataStream.Close() : dataStream = Nothing
      response.Close() : response = Nothing

      '5) Devolvemos la respuesta -----------------------------------------------------------------------------------------------
      varError = 90
      pMSGRetorno = responseFromServer
      Return True

¿Alguien me podría decir en qué me estoy equivocando o qué estoy haciendo mal?
La verdad es que no es la primera vez que hago peticiones con certificado a un WS y no me había pasado esto nunca.

Muchísimas gracias! :)

novatico 18-06-2025 13:00:01

Cita:

Empezado por FacilIng (Mensaje 565641)
Buenos días a tod@s :) ...

Estoy intentando hacer mi primer envío de un RdF a la AEAT y, lo que menos me esperaba yo, es que me devolviese un error en HTML indicando que el certificado no es válido.
He cogido el código HTML que me devuelve la AEAT en "responseFromServer" y lo he metido en un WebBrowser. Podéis verlo en la imagen adjunta.
También adjunto todo el texto devuelto en la variable "responseFromServer".
Básicamente lo que me dice es que el certificado electrónico no es válido ... ¡pero sí lo es! :confused:
Es el certificado electrónico (micertificado.p12) emitido por la FNMT que utilizamos en mi empresa para conectarnos a la Seguridad Social, a Hacienda, etc.

El código que uso es el siguiente:

Código:

      'Establecemos el protocolo TLS 1.2 ...
      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
      '4) Realizamos el envío al Webservice de la AEAT --------------------------------------------------------------------------
      '4.1) Definimos el objeto "request" par conectarnos al webservice ...
      varError = 40
      Dim DireccionWebService As String = "https :// prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP" 'TEST (sin los espacios, que no me deja poner enlaces)
      Dim request As HttpWebRequest = HttpWebRequest.Create(DireccionWebService)
      request.Method = "POST"
      request.ContentType = "text/xml; charset=utf-8"
      request.Accept = "text/xml"
      request.Timeout = 60000 'Le damos 60 segundos al servidor para contestar ...
      '4.2) Añadimos el certificado de autenticación para la AEAT al objeto "request" ...
      varError = 50
      Dim miCertificado As String = "micertificado.p12"
      Dim miContraseña As String = "micontraseña"
      Dim cert As New System.Security.Cryptography.X509Certificates.X509Certificate2
      cert.Import(miCertificado, miContraseña, System.Security.Cryptography.X509Certificates.X509KeyStorageFlags.DefaultKeySet)
      request.ClientCertificates.Add(cert)
      '4.3) Preparamos la petición al webservice ...
      varError = 60
      Dim byteArray As Byte() = Encoding.UTF8.GetBytes(lSOAPEnvelope)
      request.ContentLength = byteArray.Length
      Dim dataStream As Stream = request.GetRequestStream()
      dataStream.Write(byteArray, 0, byteArray.Length)
      dataStream.Close()
      '4.4) Envío la petición y obtengo la respuesta ...
      varError = 70
      Dim response As HttpWebResponse = request.GetResponse()
      dataStream = response.GetResponseStream()
      Dim reader As New StreamReader(dataStream)
      Dim responseFromServer As String = reader.ReadToEnd()
      reader.Close() : reader = Nothing
      dataStream.Close() : dataStream = Nothing
      response.Close() : response = Nothing

      '5) Devolvemos la respuesta -----------------------------------------------------------------------------------------------
      varError = 90
      pMSGRetorno = responseFromServer
      Return True

¿Alguien me podría decir en qué me estoy equivocando o qué estoy haciendo mal?
La verdad es que no es la primera vez que hago peticiones con certificado a un WS y no me había pasado esto nunca.

Muchísimas gracias! :)


¿ Puedes ser que hayas renovado el certificado y no hayas desinstalado el caducado ?

FacilIng 18-06-2025 13:06:04

Cita:

Empezado por novatico (Mensaje 565642)
¿ Puedes ser que hayas renovado el certificado y no hayas desinstalado el caducado ?

El certificado es válido hasta el 27/09/2025 ...
Y no lo tengo instalado en Windows, ni éste ni ninguno ...
Como se ve en el código, lo cojo directamente de disco (archivo "micertificado.p12") ...

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

Yo probaría con los certificados "de prueba" de la AEAT.
Puedes solicitarlos.

Más que nada para descartar.
a) Si con el de prueba falla, es que hay algo en el código que no está bien.
b) Si con el de prueba funciona, es que es algo del certificado que estás utilizando.

rci 18-06-2025 15:44:22

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 565658)
Yo probaría con los certificados "de prueba" de la AEAT.
Puedes solicitarlos.

Es una buena idea pero ten en cuenta que están apunto de caducar, en concreto el 02/07/2025 y el 11/07/2025.
De momento no los han renovado, pero ya nos han dicho que se tendrán que volver a solicitar...

Neftali [Germán.Estévez] 18-06-2025 16:17:16

Cita:

Empezado por rci (Mensaje 565661)
Es una buena idea pero ten en cuenta que están apunto de caducar, en concreto el 02/07/2025 y el 11/07/2025.
De momento no los han renovado, pero ya nos han dicho que se tendrán que volver a solicitar...

También habrá que ver qué hacen cuando envíes con uno caducado.
En el caso de TicketBai, por ejemplo, al principio las aceptaban con errores y te avisaban de que tenías que renovarlo. Durante un tiempo te iba saliendo este aviso.

FacilIng 18-06-2025 16:58:06

Buenas tardes de nuevo :) y muchas gracias por vuestras respuestas ...

Después de probar y probar :D ¡MAGIA! :D simplemente cambiando código de lugar, creando un par de funciones, pero sin cambiar nada en operativa de la programación :rolleyes: el WS de la AEAT me acaba de responder con un XML tal y como yo esperaba ...

Sinceramente, después de 30 años en el mundillo, aún sigo flipando con cosas como estas :p ...
Esperemos que no haya muchas más ...

Lo dicho, ¡muchas gracias a todos! :)

Toñico 08-07-2025 10:19:25

Cita:

Empezado por FacilIng (Mensaje 565664)
Buenas tardes de nuevo :) y muchas gracias por vuestras respuestas ...

Después de probar y probar :D ¡MAGIA! :D simplemente cambiando código de lugar, creando un par de funciones, pero sin cambiar nada en operativa de la programación :rolleyes: el WS de la AEAT me acaba de responder con un XML tal y como yo esperaba ...

Sinceramente, después de 30 años en el mundillo, aún sigo flipando con cosas como estas :p ...
Esperemos que no haya muchas más ...

Lo dicho, ¡muchas gracias a todos! :)

Buenos dias FacilIng.

Yo tengo el mismo problema. Estoy usando delphi 10.3 y me estoy volviendo loco. No hay forma de enviar un registro y que me responda bien.

Podrías poner la parte del código que estás usando para el envío, por favor.

Te estaría muy muy agradecido.

Gracias.

aposi 15-07-2025 17:27:21

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 565658)
Yo probaría con los certificados "de prueba" de la AEAT.
Puedes solicitarlos.

Más que nada para descartar.
a) Si con el de prueba falla, es que hay algo en el código que no está bien.
b) Si con el de prueba funciona, es que es algo del certificado que estás utilizando.



Donde se puede pedir el certificado de prueba?

Nada. he encontrado el correo electronico: [email protected]

Neftali [Germán.Estévez] 16-07-2025 08:32:18

https://www.clubdelphi.com/foros/sho...d.php?p=562700

Una rápida búsqueda en los foros...
"Se piden a este correo, pides un certificado de pruebas, te mandaran un formulario, lo rellenas y ya te mandaran el certificado.
[email protected]"

Fernando_58 01-09-2025 18:03:53

Pregunta de novato en problemas
 
Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 565658)
Yo probaría con los certificados "de prueba" de la AEAT.
Puedes solicitarlos.

Más que nada para descartar.
a) Si con el de prueba falla, es que hay algo en el código que no está bien.
b) Si con el de prueba funciona, es que es algo del certificado que estás utilizando.

Dónde se solicita el certificado de pruebas?

Neftali [Germán.Estévez] 02-09-2025 09:28:41

Cita:

Empezado por Fernando_58 (Mensaje 567378)
Dónde se solicita el certificado de pruebas?

Busca en los foros.
Hay un hilo dedicado a ello.
Mandas un correo, te envían un formulario, lo rellenas, lo devuelves y te los envían.

novatico 09-09-2025 15:17:15

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 567385)
Busca en los foros.
Hay un hilo dedicado a ello.
Mandas un correo, te envían un formulario, lo rellenas, lo devuelves y te los envían.

Perdona la duda, me han enviado el formulario, lo relleno pero no puedo firmarlo para enviarlo. ¿ Cómo lo haceis ?

Neftali [Germán.Estévez] 09-09-2025 15:31:59

Cita:

Empezado por novatico (Mensaje 567558)
Perdona la duda, me han enviado el formulario, lo relleno pero no puedo firmarlo para enviarlo. ¿ Cómo lo haceis ?

Lo imprimes, lo firmas, lo escaneas y lo devuelves. :o:(:(
Burocracia, que esperábamos...
Meteorito ya!

novatico 09-09-2025 15:42:25

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 567559)
Lo imprimes, lo firmas, lo escaneas y lo devuelves. :o:(:(
Burocracia, que esperábamos...
Meteorito ya!

Lo intento así. Muchas gracias.

novatico 10-09-2025 17:34:02

Acabo de instalar el certificado de prueba que me ha enviado la AEAT.
Aparentemente se ha instalado correctamente y puedo comprobar todos sus datos.

¿ Es posible que este certificado de pruebas de la AEAT no se pueda usar para comprobar el NIF/CIF de los clientes ?

Faneka 10-09-2025 17:38:38

Cita:

Empezado por novatico (Mensaje 567572)
Acabo de instalar el certificado de prueba que me ha enviado la AEAT.
Aparentemente se ha instalado correctamente y puedo comprobar todos sus datos.

¿ Es posible que este certificado de pruebas de la AEAT no se pueda usar para comprobar el NIF/CIF de los clientes ?

No funciona, tienes que seleccionar uno "bueno". Yo el otro día tambien tenía el de prueba activo y me estaba volviendo loco, hasta que me di cuenta.

Neftali [Germán.Estévez] 10-09-2025 17:59:23

Cita:

Empezado por novatico (Mensaje 567572)
¿ Es posible que este certificado de pruebas de la AEAT no se pueda usar para comprobar el NIF/CIF de los clientes ?

Para eso necesitas uno "real". Los de prueba no funcionan.

novatico 10-09-2025 17:59:53

Cita:

Empezado por Faneka (Mensaje 567573)
No funciona, tienes que seleccionar uno "bueno". Yo el otro día tambien tenía el de prueba activo y me estaba volviendo loco, hasta que me di cuenta.

Muchas gracias !!!


La franja horaria es GMT +2. Ahora son las 14:55:29.

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