viernes, 13 de noviembre de 2015

Comando WGET funciona y CURL NO :`(

Hace poco tuve que obtener el descriptor de un webservice (wsdl) con autentificación por certificado, pero lo raro es que con wget funcionaba y con curl no!!!!!!!!!!!!! porque!!!!!!!!
Esto era porque el formato de la clave privada del certificado (.PEM) tenia el encabezado
-----BEGIN ENCRYPTED PRIVATE KEY-----

Y al parecer curl no entendía este encabezado y por eso siempre obtenía el error:

curl: (58) Unable to load client cert -8018.

Bueno ademas si no das correctamente la ubicación del certificado puede darte el error:

curl: (35) NSS: client certificate not found: certificado.pem

No basta cambiarle el encabezado directo a mano, hay que generar correctamente la llave primaria, para eso ejecutamos:

openssl rsa -in certificado.pem -out private.key
Enter pass phrase for localhost.wget.pem:

Luego pide la frase mágica, que debemos introducir y se genera el fichero private.key con el encabezado:
-----BEGIN RSA PRIVATE KEY-----
.
.
-----END RSA PRIVATE KEY-----

Esta llave la remplazamos en el fichero certificado.pem y ejecutamos:

curl -k --cert ./certificado.curl.pem https://host:1000/webService?wsdl

Ahora ya no pide la "palabra magica" y obtiene el descriptor del servicio. tomar en cuenta que certificado.curl.pem es el fichero de certificado PEM y "./" es para que lo obtenga de la ubicación actual.