Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Errores (relacionados con al AEAT) (https://www.clubdelphi.com/foros/forumdisplay.php?f=78)
-   -   Windows 7 y TLS 1.2 (https://www.clubdelphi.com/foros/showthread.php?t=97823)

ermendalenda 09-11-2025 20:10:39

Cita:

Empezado por josejava (Mensaje 569637)
Yo lo que he hecho es que un ordenador encendido las 24 horas en mi casa reciba las facturas de las tiendas y desde mi casa las envíe directamente a la AEAT.

Así me quito dolores de cabeza de que si el cliente tiene windows XP o tiene un móvil.

Y si hay algún error me entero antes que nadie.

Buena idea, pero para disitintos OT, me obliga a tenrr todos los certificados o hacerme colaborador social,.
Tendras u a buena instalacion con SAI, doble conexion de internet con un multplexor o al menos un backup de internet y 2 entradas por si falla una...no? O te la juegas todo a una?
Al menos considera que los datos se suban a un cloud seguro vigilado 24×365 y desee ahi lo rescatas y subes

ermendalenda 21-11-2025 15:47:22

Cita:

Empezado por emailesc (Mensaje 569639)
Sí, es cierto lo que dices. No obstante creo que esta configuración no accede a los certificados del almacén de certificados del equipo, los tienes que tener como archivo, ¿no?. Si es un equipo tuyo y controlado por ti puede ser una solución, pero para meterselo a un cliente por salvar el windows 7 yo no lo haría.

No, curl tiene opciones de obtener y usar los certificados de almacenes, es un poco tiquismiquis pero sabiendolo hacer se puede,

emailesc 21-11-2025 18:52:11

Cita:

Empezado por ermendalenda (Mensaje 570106)
No, curl tiene opciones de obtener y usar los certificados de almacenes, es un poco tiquismiquis pero sabiendolo hacer se puede,

Por lo que yo he visto curl viene con dos compilaciones principales: curl + openssl y curl + schannel.
Curl + openssl no accede a los certificados del equipo, o al menos yo no he visto como hacerlo.
Curl + schannel sí accede a los certificados del equipo, pero no logra la conexión en Windows 7 CON HACIENDA (ojo, con hacienda, si con otros endpoints, y sí en las versiones posteriores de windows). La razón es que Hacienda envía al establecer la conexión un "ServerHello" con suites de cifrado TLS1.2 que Schannel en Windows 7 / 2012 no soporta, ni aunque tú las habilites desde el registro. Y a partir de aquí copy paste:
Cita:

En todas las conexiones a AEAT el servidor de Hacienda obliga a usar:
Ciphers modernos TLS1.2 basados en ECDHE-RSA + AES-GCM + SHA256

Ejemplos:
  • ECDHE-RSA-AES128-GCM-SHA256
  • ECDHE-RSA-AES256-GCM-SHA384
Además, el servidor pide:
  • TLS1.2 como mínimo
  • Intercambio de claves ECDHE moderno
  • Firmas SHA256
  • Curvas P-256 o P-384
¿Por qué Schannel fallaba aunque habilitases TLS1.2 y AES-GCM?


Porque tu Windows Server 2012 tiene estas limitaciones intrínsecas:
a) Implementación antigua de ECDHE en Schannel

→ No soporta las curvas o métodos modernos usados por la AEAT.
b) Matriz de cifrados de AES-GCM incompleta

→ Aunque aparezcan como “habilitados”, Schannel no implementa completamente los suites ECDHE-RSA-AES256-GCM-SHA384 ni ECDHE-RSA-AES128-GCM-SHA256.
c) Schannel NO permite usar --ciphers en curl

→ Las opciones de curl no pueden forzar nada.
Schannel decide por sí mismo la lista de suites aplicables.


Yo lo estuve probando en un windows server 2012 y no fui capaz de hacerlo (aunque quizá otro sí sepa claro). En Windows server 2012 R2 tengo entendido que sí funciona porque ya tiene implementado estos métodos, aunque por ahora no lo he probado. La verdad no se como será en Windows 7, si alguna actualización final los habrá implementado o no.
Por cierto esta limitación no la hay en Ticketbai, son menos exigentes con los cifrados.

ermendalenda 21-11-2025 22:07:32

Cita:

Empezado por emailesc (Mensaje 569639)
Sí, es cierto lo que dices. No obstante creo que esta configuración no accede a los certificados del almacén de certificados del equipo, los tienes que tener como archivo, ¿no?. Si es un equipo tuyo y controlado por ti puede ser una solución, pero para meterselo a un cliente por salvar el windows 7 yo no lo haría.

Sí accede al almacen de window xp, 7( 10, 11 no recuerdo si lo probé pero creo que igual, ya que el certificado es el mismo y se importan igual en todos estas versiones de windows)
Pero tiene su historia, me tuve que romper la cabeza un pelín, pero seguro que la versión chatgpt 0.1 en pre ya lo dice, ;)
Cuando tenga un hueco lo busco, es cierto que fi almente yo lo hago por fichero por que lo controlo y para actualizarlos es mas rapido, existen parametroa de curl para que funcione, hay que tener en cuenta alguna cosita extra pero va bien

emailesc 21-11-2025 22:16:27

Cita:

Empezado por ermendalenda (Mensaje 570118)
Sí accede al almacen de window xp, 7( 10, 11 no recuerdo si lo probé pero creo que igual, ya que el certificado es el mismo y se importan igual en todos estas versiones de windows)
Pero tiene su historia, me tuve que romper la cabeza un pelín, pero seguro que la versión chatgpt 0.1 en pre ya lo dice, ;)
Cuando tenga un hueco lo busco, es cierto que fi almente yo lo hago por fichero por que lo controlo y para actualizarlos es mas rapido, existen parametroa de curl para que funcione, hay que tener en cuenta alguna cosita extra pero va bien

A ver si tu lo consigues: windows 7 o server 2012 (no R2), accediendo al almacén de certificados y conectando con Hacienda, por ejemplo para verificar un NIF, por ejemplo (ojo, que con otros si vas a poder conectar, pero hacienda son más tocapelotas, como no puede ser menos)

ermendalenda 21-11-2025 22:17:30

Por otro lado aqui teneis la traza importante de conexiin curl probados en XP, W7, W10 y W11:
Info: TLSv1.3 (IN),.TLS handshake, Server hello(2) Recv SSL data, 91 bytes (0×5b)
No, es para enseñaros que incluso con xp usa el tlsv1.3, pero funcionaria igual con certificadks de almacen

emailesc 21-11-2025 22:20:10

Cita:

Empezado por ermendalenda (Mensaje 570120)
Por otro lado aqui teneis la traza importante de conexiin curl probados en XP, W7, W10 y W11:
Info: TLSv1.3 (IN),.TLS handshake, Server hello(2) Recv SSL data, 91 bytes (0×5b)

¿con Hacienda? ¿con certificado de almacén de certificados?

ermendalenda 21-11-2025 22:22:22

Cita:

Empezado por emailesc (Mensaje 570119)
A ver si tu lo consigues: windows 7 o server 2012 (no R2), accediendo al almacén de certificados y conectando con Hacienda, por ejemplo para verificar un NIF, por ejemplo (ojo, que con otros si vas a poder conectar, pero hacienda son más tocapelotas, como no puede ser menos)

El truco estaba, si no recuerdo mal, es que habia que indicarle el certificado del almacen con alguna cadena incluida en el mismo que sea unica, y ... que mejor que el NIF del emisor o de reprrsentante que ademas lo puedes parametrizar, con lo cual hay que tener en cuenta que no puedes tener instalado certificados caducados y que sean solo los validos para evitar errores para que no te pille uno malo A ver si lo busco, es que las pruebas las hice rato 2021-2022

emailesc 21-11-2025 22:26:41

Cita:

Empezado por ermendalenda (Mensaje 570122)
El truco estaba, si no recuerdo mal, es que habia que indicarle el certificado del almacen con alguna cadena incluida en el mismo que sea unica, y ... que mejor que el NIF del emisor o de reprrsentante que ademas lo puedes parametrizar, con lo cual hay que tener en cuenta que no puedes tener instalado cerrificados caducados y validos para evitar errores. A ver si lo busco, es que las pruebas las hice rato 2021-2022

Como veas, de todas formas con certificado en archivo funciona correctamente, así que tampoco merece la pena complicarse la vida, que es viernes y son las 22:26. YO me voy a cenar que ya es hora :):):)

daniloversion 22-11-2025 01:38:03

Hay una aplicación que facilita muchísimo toda esta configuración de protocolos y Cyphers. Se llama IIS Crypto por si a alguno le puede ayudar.


Yo he probado ya todas las configuraciones, y nada.. desde una máquina Windows Server 2012 R2 no lo consigo. Nosotros tenemos que usar ahora mismo .net si o si, asi que supongo que tocará migrar el servidor. El fallo se ve facil desde un comando de PowerShell:

Código:

Invoke-WebRequest -Uri URLDelServicioVerifactu
Devuelve:
Código:

Invoke-WebRequest : Anulada la solicitud: No se puede crear un canal seguro SSL/TLS.
En línea: 1 Carácter: 1
+ Invoke-WebRequest -Uri URLDelServicioVerifactu  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand


ermendalenda 22-11-2025 06:01:36

Cita:

Empezado por daniloversion (Mensaje 570124)
Hay una aplicación que facilita muchísimo toda esta configuración de protocolos y Cyphers. Se llama IIS Crypto por si a alguno le puede ayudar.


Yo he probado ya todas las configuraciones, y nada.. desde una máquina Windows Server 2012 R2 no lo consigo. Nosotros tenemos que usar ahora mismo .net si o si, asi que supongo que tocará migrar el servidor. El fallo se ve facil desde un comando de PowerShell:

Código:

Invoke-WebRequest -Uri URLDelServicioVerifactu
Devuelve:
Código:

Invoke-WebRequest : Anulada la solicitud: No se puede crear un canal seguro SSL/TLS.
En línea: 1 Carácter: 1
+ Invoke-WebRequest -Uri URLDelServicioVerifactu  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand


Interesante, otro método alternativo a curl para enviar a Verifactu
Quedando algo así, por si alguien quiere imvestigar
Código:

Invoke-WebRequest -Uri "https://www1.agenciatributaria.gob.es/wlpl/VERI_FACTU/registro" -Method POST -ContentType "text/xml;charset=UTF-8" -Certificate (Get-PfxCertificate "C:\certs\certificado.pfx") -Body ([System.Text.Encoding]::UTF8.GetBytes((Get-Content "C:\verifactu\soap.xml" -Raw)))

ermendalenda 22-11-2025 06:41:54

Ponngo ejemplo, sin haberlo probado, con endpoint de entorno de pruebas por ai alguien quiere probar
Código PHP:

powershell -Command "Invoke-WebRequest -Uri 'https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VeriFactuSOAP' -Method POST -ContentType 'text/xml;charset=UTF-8' -Certificate (Get-PfxCertificate 'C:\certs\certificado.pfx') -Body ([System.Text.Encoding]::UTF8.GetBytes((Get-Content 'C:\verifactu\soap.xml' -Raw))) | Out-File "C:\verifactu\respuesta.xml

Gracias por el aporte de invoke-...

ermendalenda 22-11-2025 08:41:34

Cita:

Empezado por emailesc (Mensaje 570123)
Como veas, de todas formas con certificado en archivo funciona correctamente, así que tampoco merece la pena complicarse la vida, que es viernes y son las 22:26. YO me voy a cenar que ya es hora :):):)

Ya he repasado los apuntes de 2022
Efectivamente no es posible usar directamente certificados, pero desde w7 si lo puedes automatizar, con ceutil extraes el certificado del almacen (indicandole la huella del certificado) y despues lo usas con curl.
Lo que si se podia usar directamente es con autofirmacommandline.exe, pudiendo apuntar directamente al certificado que quieres sin que te muestre la pantalla de selección.
El autofirmacommandline.exe no es recomendable para firmar cuando son ventas rapidas (comercio retail) por que puede tardar unos cuantos segundos en ocasiones.

emailesc 22-11-2025 09:36:38

Cita:

Empezado por daniloversion (Mensaje 570124)
Hay una aplicación que facilita muchísimo toda esta configuración de protocolos y Cyphers. Se llama IIS Crypto por si a alguno le puede ayudar.


Yo he probado ya todas las configuraciones, y nada.. desde una máquina Windows Server 2012 R2 no lo consigo. Nosotros tenemos que usar ahora mismo .net si o si, asi que supongo que tocará migrar el servidor. El fallo se ve facil desde un comando de PowerShell:

Código:

Invoke-WebRequest -Uri URLDelServicioVerifactu
Devuelve:
Código:

Invoke-WebRequest : Anulada la solicitud: No se puede crear un canal seguro SSL/TLS.
En línea: 1 Carácter: 1
+ Invoke-WebRequest -Uri URLDelServicioVerifactu  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
 + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand



Desde Windows Server 2012 R2 tenía entendido que sí funcionaba, pero no lo he probado aun. No obstante, puedes salvarte de cambiar el servidor, o al menos no tener que hacerlo deprisa y corriendo, puedes enviar desde .NET con curl + openssl, la compilación que lleva ambas, y el certificado en archivo, no en el almacén de certificados de windows. Curl + Openssl usan sus propias librerías, no las de Schannell y funciona bien.


La franja horaria es GMT +2. Ahora son las 15:49:10.

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