![]() |
Pasar certificado pfx a pem para CURL
Hola a todos y especialmente a los que utilizáis CURL para comunicar con AEAT.
He estado haciendo las pruebas con mi certificado (p12) y va estupendo. Pues bien, empiezo con los clientes y el formato del certificado del primero (e imagino que habrán muchos así) que me encuentro es pfx, que directamente no lo soporta CURL. He estado leyendo que hay que pasarlo a pem mediante OPENSSL para poderlo utilizar con CURL, pues bien me pongo a ello. Ejecuto desde el sistema: openssl pkcs12 -in certificado.pfx -out certificado.pem -nodes Al ejecutar esto me solicita una contraseña: Enter Import Password: Y el cursor para, se supone, introducir la contraseña. Pues bien, por mucho que pulso teclas no me pilla nada y, por supuesto al pulsar intro me dice: Mac Verify error: invalid password? A ver si alguno que se mueva con esto me puede echar un cable, porque nunca me he tenido que pelear ni con CURL (esto ya más o menos lo he pillado) ni con los certificados (con esto ando perdidísimo). Igual hago preguntas bastante estúpidas, disculpadme si esd así... pero ya digo, el tema de certificados estoy super verde. Os agradecería infinito que me echaseis un cable. Gracias!! |
Cita:
Te deberia funcionar Renombralo a ver |
Cita:
Gracias por el cable, ermendalenda, como siempre aportando y ayudando!!! |
Los archivos PFX puede contener en un solo archivo, el certificado de dominio, la clave privada y todos los certificados intermedios y/o el certificado de raiz. Por eso es normal que estén protegidos con contraseña, si no te notificaron la contraseña es muy posible que esté vacía, pero openssl te la va a preguntar de todas maneras, pero no debes ingresar ningún valor. (enter, enter)
Saludos. |
Nada, lo hago en el ordenador del cliente un no va... el CURL me devuelve el siguiente error:
Curl (35): schannel: AcquireCredentials Handle failed: SEC_E_NO_CREDENTIALS (0x8009030E) - No hay credenciales disponibles en el paquete de seguridad En mi equipo está visto que no lo puedo probar porque se lo traga todo, y no sé por qué. Me pregunto si es necesario que los navegadores (Chrome y Edge) tengan importado el certificado y si puede ser eso. Lamento preguntar cosas que igual son muy básicas, pero es que para mi esto es como dar palos de ciego :( Si alguien fuese tan amable de detallarme los pasos que hay que seguir para instalar un certificado en un equipo y que luego me permita utilizarlo con CURL le estaría agradecido hasta el infinito |
Cita:
Tienes idea de por qué no me genera el fichero KEY???... para generar el fichero PEM ejecuto en la línea de comandos esto: openssl pkcs12 -in certificado.pfx -out certificado.pem -nodes |
Cita:
Código:
# Sin cifrar, que no se protege con contraseña: |
Agregale el parametro -k y si no va pon la llamada completa excluyendo contraseñas
|
Cita:
La instrucción curl que estoy intentando es simplemente para verificar un DNI y es la siguiente: curl.exe --connect-timeout 300 -m 300 -S -L -d "@DNI_CIF.xml" -o DNI_CIF_Respuesta.xml --cert certificado.pem --key certificado.key https://www1.agenciatributaria.gob.e.../ws/VNifV2SOAP En la que probé antes era lo mismo pero con --cert certificado.pem --key certificado.pem |
Cita:
El curl que mando, cuando es con p12, es el siguiente: curl.exe --connect-timeout 300 -m 300 -S -L -d "@DNI_CIF.xml" -o c:\sgb\xml\DNI_CIF_Respuesta.xml --cert-type P12 --cert Certificado.p12:pass https://www1.agenciatributaria.gob.e.../ws/VNifV2SOAP Ahí dices que lo meta???... Y qué hace exactamente ese parámetro?? Gracias por tu interés y paciencia |
Cita:
Para que quede... -k -S -L -d... Te va aquitar algunos dolores de cabeza. Ten en cuenta que algunos antivirus bloquean las llamadas ssl al puerto 443, como es wl caso de kaspersky. Tienes que verificar que tengas deaactivado ese filtro. |
Cita:
|
Cita:
a curl le da igual la extensión y nombre de archivo que tengas, por poner un nivel mas de seguridad, cuando alojes el archivo cambiale a una extensión (o sin extensión) a otra que no tenga que ver con certificados. Con "-cert-type P12 --cert ...." ya te va a mirar el contenido del archivo sin mirar que extensión tiene. Yo suelo poner el path completo de los archivos de envios y respuestas para no tener que estar pendiente desde donde ejecuto la llamada. si al final de la llamada le agregas "--trace "C:\...respuesta_trace.txt" en ese archvio de logs te hace un trace completo que te va a dar más pistas de donde puede estar el problema. Además te recomiendo que te acostumbres a usar este trace, por que a veces curl no da respuestas cuando hay probelmas de conexion y con lo que te devuelva trace puedes "apañar" el control. |
Más cosas,
Puede que en algún cliente te encuentres que no hay forma dd usar curl y esto es, muy probablemente por que el proveedor de servicios lo ha puesto en CG-NAT y la unica solucion es que el proveedor te saque(desactive) de cg-nat que ddben hacerlo obligatoriamente si se lo solicitas. Esto hace unos años ocurria con provedores asequibles, pero ya se han subido al carro todos. También me he encontrado algún router con filtros desde el operador, resetean parametros y a funcionar. |
Cómo comprobar si tienes CG-NAT
1. Busca tu IP pública: Entra en whatismyip.com o pon en Google: “cuál es mi IP”. Apunta ese número (ejemplo: 84.123.45.67). 2. Mira la IP que te da tu router: Entra en la configuración del router (suele ser 192.168.1.1 o 192.168.0.1). Busca en “Estado de conexión WAN” o “Internet”. Verás la dirección IP asignada por el operador. 3. Compara las dos: Si son iguales : tienes IP pública (no CG-NAT). |
Muchas gracias ermendalenda y delphi.com.ar por vuestro interés y aportaciones. A ver si voy probando cosas y os digo. ;)
|
Bueno, pues seguimos... Generé en mi equipo el pem y el key sin aparente problema, me pidió la contraseña, se la puse y me generó los dos ficheros. Paso los ficheros al equipo del cliente y pruebo a lanzar el curl siguiente:
curl.exe --connect-timeout 300 -m 300 -k -S -L -d "@c:\sgb\xml\DNI_CIF.xml" -o c:\sgb\xml\DNI_CIF_Respuesta.xml --cert c:\sgb\certificado.pem --key c:\sgb\certificado.key https://www1.agenciatributaria.gob.e.../ws/VNifV2SOAP --trace "C:\SGB\XML\TRACE.TXT" Y nada, me da error siguiente: curl: (58) schannel: Failed to import cert file c:\sgb\certificado.pem Y el contenido del trace es el siguiente: == Info: Host www1.agenciatributaria.gob.es:443 was resolved. == Info: IPv6: (none) == Info: IPv4: 195.77.198.17 == Info: Trying 195.77.198.17:443... == Info: Connected to www1.agenciatributaria.gob.es (195.77.198.17) port 443 == Info: schannel: disabled automatic use of client certificate == Info: schannel: Failed to import cert file c:\sgb\marysierra.pem, last error is 0x80092002 == Info: Closing connection No sé si el problema puede estar aquí ("schannel: disabled automatic use of client certificate"), por lo que he buscado y me dice que "la configuración de seguridad de Windows (Schannel) no está configurada para seleccionar automáticamente un certificado de cliente para la autenticación en un sistema operativo Windows"... Y la pregunta sería cómo hago para configurar eso???? (Vaya pesadilla, macho... no me esperaba ni por asomo encontrarme esto al empezar con los clientes, cuando yo ya llevo varios meses enviando mis registros de facturación a producción sin problemas :() |
Chicos, buenas noticias (creo)
Me acaba de funcionar en el cliente la verificación del DNI que he lanzado con curl, y funciona tanto renombrando el pfx a p12 como usando los ficheros pem y key. He estado leyendo y buscando por ahí y he terminado encontrando que la versión de curl de windows 10 ha venido dando estos problemas, con lo que he actualizado curl a la versión 8.16.0 y va (parece) perfecto De todas formas sigo haciendo pruebas y os confirmo cómo queda la cosa |
Cita:
|
Cita:
|
| La franja horaria es GMT +2. Ahora son las 19:39:36. |
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