Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Errores (relacionados con al AEAT)
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2025
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.759
Poder: 7
ermendalenda Va por buen camino
Angry Ésto da miedín (caducidad PEM de envios)

Aquí os dejo la Caducidad del cacert.pem de Curl, que es común para muchos programas y de momento este es el último de curl:

Common Name : Entrust Root Certification Authority
  • Organization : Entrust, Inc.
  • Country : US
  • Valid From : Nov 27,2006
  • Valid To : Nov 27,2026
  • Issuer : Entrust, Inc.
  • Serial Number : 1164660820



Esto afectará a muchos y a más de uno les va a tirar la conexión para enviar a Aeat, comprobar NIFS...
Minimo a estos:
Curl.exe
Apache-php


Los lenguajes que integren de "alguna forma" funcionalidad curl, probablemente tendrán problemas a partir de esa fecha si no están actualizados o se saltan las comprobaciones de certificados.

Saludos
Responder Con Cita
  #2  
Antiguo 16-11-2025
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.759
Poder: 7
ermendalenda Va por buen camino
Seguimos con la investigación:
Resulta que curl.exe, puede tener un bundle (certificado) distinto del oficial, por que? por que curl para windows necesita trabajar out-of-the-box (para que el usuario no tenga que descargar actualizaciones por un largo perido).
La recomendación de curl es usar su certificado.
Por ejemplo el certificado que viene en mi instalacion es:
Common Name : GlobalSign Root CA
Organization : GlobalSign nv-sa
Organization Unit : Root CA
Country : BE
Valid From : Sep 01,1998
Valid To : Jan 28,2028
Issuer : GlobalSign nv-sa
Serial Number : 4835703278459707669005204

Como veis con una fecha superior a la del original de curl, que puse en el anterior post.
Y como podeis comprobar la caducidad del vuestro?
pues con un comando de openssl:
openssl x509 cacert.pem -noout -dates
o más bien:
openssl x509 curl-ca-bundle.crt -noout -dates
por que en la carpeta bin de curl, el .pem , se copia con ese nombre:curl-ca-bundle.crt

o aún más facil:
copiais el certificado pem a txt, lo abrís y copiais el contenido en el box de la siguiente web:
https://www.seidonet.com/clientes/ss...cal=es#results


Hay que tener en cuenta que aunque de la página oficial se descargue como cacert.pem en la instalación de curl en la carpeta bin, hay que renombrarla a curl-ca-bundle.crt
Si decidís usar el certificado original, adseguraos de hacer copia del anterior antes de machacarlo, por si hay alguna incompatibilidad con vuestra versión de curl y si os va bien hay que ir revisando periodicamente (lo podeis automatizar), la ultima version del bundle(certificado pem) en:
https://curl.se/ca/cacert.pem
el comando curl para descargarlo automaticamente sería:
curl.exe https://curl.se/ca/cacert.pem -o [pathdestino\cacert.pem]
y despues copiarlo y pegarlo en vuestra carpeta curl/bin como curl-ca-bundle.crt (moviendo por seguridad el anterior antes)

En definitiva, la decision es:
-Tienes un curl auto-actualizable (windows lo actualiza automáticamente), comprueba la caducidad y mira si se actualiza automaticamente antes de esa fecha.
-Tienes un curl instalado y no se actualiza automáticamente: piensa seriamente en lo que he puesto en el post, por que usar la opción -k en las llamadas puede que no sea siempre efectiva, y a la aeat algún día le dé por regularizar ésto.

Última edición por ermendalenda fecha: 16-11-2025 a las 10:23:08.
Responder Con Cita
  #3  
Antiguo 16-11-2025
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.759
Poder: 7
ermendalenda Va por buen camino
No olvideis que la principal inseguridad de no verificar cerificados al enviar radica en que intercepten los envios y usen esa conexion para hacer otro tramite.
La otta razon es que alguien consiga a traves de servidores dns trampear la resoluxion de donde se envia la informacion y eso se puede hacer tambien desde la red local y no es complicado que te metan algun troyano que te camvien esa resolucion de nombres.
Responder Con Cita
  #4  
Antiguo 16-11-2025
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.759
Poder: 7
ermendalenda Va por buen camino
Sigo:
El bundler es un conjunto de certificsdos, xon lo cual lo que devuelva una verificacion web, como la que puse antes, solo te enseña uno de ellos.
Por lo tanto refuerza lo de tener actualizado el bundler de certificados, sobre todo teniendo en cuenta que no controlamoscuando la aeat renueva.
Por tanto:
Creo que es aconsejable quitar el -k y tener el bundler actualizado.
Tener un parametro de emergencia por si el bundler ofixcial tarda mas en actualizarse que el nuevo de la aeat. O incluso que pregunte al emisor si quiere trabajar en modo de envio inseguro(no se si esto le gusta mucho a la aeat, tendria que ser algo temporal)

Tambien existe la posibilidad de que curl apunte al almacen de certificados de windows y creo que es una buena opción, ¿sabeis si windows autorenueva esos certificados del almacen?
Responder Con Cita
  #5  
Antiguo 17-11-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Gracias por compartir la investigación.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 17-11-2025
emailesc emailesc is offline
Miembro
 
Registrado: jul 2023
Posts: 281
Poder: 3
emailesc Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Sigo:
El bundler es un conjunto de certificsdos, xon lo cual lo que devuelva una verificacion web, como la que puse antes, solo te enseña uno de ellos.
Por lo tanto refuerza lo de tener actualizado el bundler de certificados, sobre todo teniendo en cuenta que no controlamoscuando la aeat renueva.
Por tanto:
Creo que es aconsejable quitar el -k y tener el bundler actualizado.
Tener un parametro de emergencia por si el bundler ofixcial tarda mas en actualizarse que el nuevo de la aeat. O incluso que pregunte al emisor si quiere trabajar en modo de envio inseguro(no se si esto le gusta mucho a la aeat, tendria que ser algo temporal)

Tambien existe la posibilidad de que curl apunte al almacen de certificados de windows y creo que es una buena opción, ¿sabeis si windows autorenueva esos certificados del almacen?
Eres un crack !!! a mi esto me sobrepasa, así que le he preguntado al primo de zumosol y esto es lo que dice:
Cita:
1. ¿Windows “autorenueva” el almacén de certificados raíz?

Sí, Windows mantiene actualizado el almacén de certificados raíz de confianza de forma automática, a través de:
  1. Actualizaciones de Windows Update (paquetes de “Actualización de certificados raíz”).
  2. El mecanismo de “Automatic Root Certificates Update” (cuando un certificado intermedio o servidor encadena a una CA que no está localmente, pero es de la lista de confianza de Microsoft, Windows puede descargar el root correspondiente bajo demanda).
En la práctica:
  • Tú no tienes que ir descargando a mano cacert.pem ni bundles, si las aplicaciones usan la pila de TLS de Windows (Schannel).
  • Cuando una CA caduca, se revoca o se añade una nueva, el propio sistema, vía Windows Update, incorpora o retira esos certificados del almacén raíz.
Eso sí:
  • Dependes de que el servidor tenga Windows Update razonablemente al día (o al menos reciba los paquetes de certificados).
  • Si tienes servidores aislados, sin actualizaciones o con WSUS mal configurado, el almacén puede quedarse desactualizado.
2. ¿curl “puede” usar el almacén de Windows?

Aquí la matización importante:
  • curl en Windows no es una única cosa.
    Puede estar compilado con distintos “backends” de TLS:
    • OpenSSL
    • Schannel (WinSSL)
    • (menos habitual: mbedTLS, etc.)
Según cómo esté compilado:
a) curl compilado con Schannel (WinSSL)
  • Usa el almacén de certificados de Windows.
  • No necesita curl-ca-bundle.crt ni cacert.pem.
  • La verificación de certificados la hace directamente el sistema operativo.
  • Por tanto, se beneficia de la actualización automática de certificados de Windows.
En este caso, muchas de las preocupaciones sobre renovar a mano el bundle desaparecen. Sigues teniendo que preocuparte por no usar -k, pero no por el fichero PEM.
b) curl compilado con OpenSSL (lo que parece tu caso)
  • No usa el almacén de Windows, salvo que se haga algo muy específico en tiempo de compilación.
  • Necesita un bundle de CA propio, normalmente curl-ca-bundle.crt o cacert.pem.
  • La ruta por defecto y el nombre del archivo dependen de cómo se haya compilado e instalado.
Ahí entra todo lo que has pegado:
  • Descargar cacert.pem de https://curl.se/ca/cacert.pem.
  • Renombrarlo a curl-ca-bundle.crt y sustituir el que tienes en bin.
  • Revisar fechas de caducidad con openssl x509 -noout -dates.
En este escenario, todo lo que has copiado tiene mucho sentido: tú eres responsable de que ese bundle esté actualizado.
3. ¿Lo que has leído es razonable?

En esencia sí, pero con matices importantes:
Lo que es correcto
  • Que el bundle de CA de curl para Windows (cuando usa OpenSSL) no se actualiza solo si tú no actualizas curl o no machacas curl-ca-bundle.crt.
  • Que es mala idea vivir eternamente con -k (insecure), sobre todo hablando con AEAT (o con cualquier administración) por:
    • Riesgo de MITM (ataque de intermediario).
    • Riesgo de DNS spoofing o manipulación de resolución de nombres dentro de una red comprometida.
  • Que tiene sentido:
    • Quitar -k en operación normal.
    • Dejar un “modo emergencia” manual muy controlado (y logado) por si hay un incidente puntual de certificado en AEAT.
Lo que conviene matizar
  • Ese “bundle” no es “un certificado” sino un conjunto de certificados raíz; lo que ves al abrirlo en un visor puede ser uno concreto, pero dentro hay muchos.
  • La caducidad que miras con openssl x509 sobre curl-ca-bundle.crt depende de cómo extraigas el certificado. Si pasas el fichero entero de golpe al comando, el comportamiento no es exactamente “mira todos y dime la global”, sino que irá certificado a certificado.
4. ¿Qué haría yo en tu caso (entorno Verifactu/AEAT)?

Opción 1 – Si puedes elegir compilación de curl
  • Preferiría usar curl con backend Schannel (WinSSL) siempre que sea posible:
    • Aprovecha el almacén de certificados de Windows.
    • Se beneficia de actualizaciones automáticas.
    • Simplifica muchísimo la gestión de CA.
Para comprobarlo:
  • Ejecuta curl -V
    • Si ves algo como SSL: Schannel → usa el almacén de Windows.
    • Si ves SSL: OpenSSL → está usando su propio bundle.
Opción 2 – Si ya estás atado a curl + OpenSSL con bundle
  1. Eliminar -k en condiciones normales.
  2. Mantener curl-ca-bundle.crt actualizado:
    • Un pequeño script o tarea programada que:
  3. Implementar en tu código un:
    • Modo normal: verificación estrica de certificado.
    • Modo emergencia: parámetro de configuración que permita usar -k solo temporalmente, dejando trazas claras (log) de cuándo se ha activado y por qué.
Opción 3 – Migrar a Schannel a medio plazo

Dado que ya estás muy pegado a entornos Windows y tienes control de clientes y servidores, migrar todo a Schannel (ya sea vía curl compilado con WinSSL, o usando directamente HttpClient/.NET con Ssl/TLS sobre Schannel) reduce bastante fricción:
  • Dejas en manos de Windows la gestión de raíces.
  • Aprovechas las actualizaciones de MS (que, para temas de CAs, suelen ir razonablemente al día).
5. Respuesta directa a tu pregunta
“¿Sabéis si Windows autorenueva esos certificados del almacén?”
:
  • Windows actualiza automáticamente el almacén de certificados raíz de confianza a través de Windows Update y del mecanismo de actualización automática de raíces.
  • Por tanto, si usas curl con backend Schannel (WinSSL), no necesitas gestionar a mano cacert.pem.
  • Si usas curl con OpenSSL, el bundle no usa ese almacén y tienes que cuidar tú la actualización del curl-ca-bundle.crt.
Responder Con Cita
  #7  
Antiguo 17-11-2025
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.759
Poder: 7
ermendalenda Va por buen camino
Cita:
Empezado por emailesc Ver Mensaje
Eres un crack !!! a mi esto me sobrepasa, así que le he preguntado al primo de zumosol y esto es lo que dice:
Mae mia, no sigas alimentando a Chatgpt que nos quita el curro
Gracias por confirmar. Entonces iré viendolo a ver que hago.
Responder Con Cita
  #8  
Antiguo 30-11-2025
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.759
Poder: 7
ermendalenda Va por buen camino
Post

Ya por fin lo tengo claro y curl funcionando 100% sin bloqueos.

Que ocurre con curl -k
Que a veces (poquisimas veces peroocurre) los servidores de la AEAT detectan actividades raras que realiza el curl con -k y banea la conexión, esa conexión no salta ni con los timeouts, por que queda en una especie de "limbo", aunque podeis hacer que salte añadiendo el parametro --no-keepalive y así no se mantiene viva esos 5 minutos.
El problema es que llegue un día que esas conexiones no entren nunca y estaba preocupado de que un día me pille en "Cincinati" y empiece a recibir errores de todo tipo, y tampoco quiero dejar de aprovechar esta caracteristica, PEROO, también puede pasar que los CA de LA AEAT+ ROOT + INTERMEDIOS que tiene curl en su bundle, para conectarse a la AEAT, caduquen, por lo que he visto, tendrian que caducar todos, ya que he probado a dejar cada uno de ellos solos en el bundle y funcionaría bien la conexión, no siendo así si están todos caducados, pero con -k se saltaria esa restricción.
Entonces, por que no asegurarselo todo?

Os dejo lo que he hecho por si os viene bien:
Cita:
Crear un bundle.pem con un editor wordpad, notepad, notepad++, o lo que tengais a mano
Pegar el contenido de los ".crt" descargados de la aeat,
actualmente aqui:
https://sede.agenciatributaria.gob.e...ributaria.html
y añadis el de Sectigo que es el propio del servidor de la Aeat
http://www.tbs-x509.com/USERTrustRSA...nAuthority.crt

Tambien os lo podeis exportar desde el navegador:
1.entrar en httpw://www1.agenciatributaria.gob.es
2. Pinchar candado certificado
3. View certificate
4. Pestaña detalles
Exportar
Sectigo es el que usa actualmente por que es el que ha contratado, y también lo usa en las conexiones si los Intermedios y CARoot están caducados, aunque puede cambiar de proveedor cuando caduque el año que viene y que en vez de Sectigo sea "Pepito", por eso a los que usan curl les conviene tenerlo actualizado el bundle, yo no me fiaria mucho de dejarle a windows que se actualizacen solos.

Código PHP:
Declarar variable Controlar_server como booleana
Funcion Inicio Programa
     Variable Controlar_Server
=True
Fin Funcion

Timer_envio
()
LLamar a enviar()



Fin Timer

Funcion Enviar
()
**
Si Controlar_Server=True Entonces Enviar sin -k Si no Enviar con -**

Si Controlar_server True
Entonces
curl 
--cacert [pathmicertificadocurl]\bundle.pem --no-keepalive --speed-time 10 --speed-limit 1 --connect-timeout 40 -m 40 ---"@[path_soap]\misoap.xml" -"[path_respuesta]/respuesta.xml"  --cert-type P12 --cert [pat_certificado]\certificado.pfx:[Contraseñahttps://xxxxxx.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP 
Si no (con -k sin verificar pem)
curl --no-keepalive  --speed-time 10 --speed-limit 1 --connect-timeout 40 -m 40 ----d  "@[path_soap]\misoap.xml" -"[path_respuesta]/respuesta.xml"   --cert-type P12 --cert [pat_certificado]\certificado.pfx:[Contraseña]  https://xxxxxx.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP

Si respuesta=Error y Controlar_Server=True y No Devuelve xml de respuesta ni de confirmacion ni de errores
Entonces Controlar_server
=false
Si no
Controlar_server
=True  (En cualquier caso de que estuviera en false haya sido correcta la conexion o no)
                      
Fin Enviar 
De esta forma me aseguro un camino u otro, y tengo más margen de tranquilidad.

Saludos

Última edición por ermendalenda fecha: 30-11-2025 a las 08:54:40.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
caducidad de contraseña en oracle cd.rafael Oracle 3 21-02-2013 14:55:34
Manejar Caducidad de productos darkerbyte SQL 14 09-12-2010 23:08:03
Como chequear la fecha de caducidad de mi aplicacion JoAnCa Varios 2 11-03-2009 14:52:17
Caducidad Demos capo979 Varios 2 09-05-2008 16:59:30
Caducidad de InterBase 7 Giasl Firebird e Interbase 5 06-06-2003 21:19:59


La franja horaria es GMT +2. Ahora son las 06:56:04.


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
Copyright 1996-2007 Club Delphi