[Py-ES] Uso de certificado FNMT con Python requests

Juan Luis Cano juanlu001 at gmail.com
Sat Jun 7 14:17:13 CEST 2014


Hola a todos, a ver si alguien me puede echar una mano con mi consulta. 
Probablemente tiene más que ver con OpenSSL que con Python pero como es 
una cosa particular española tal vez alguien en la lista tenga experiencia.

Tengo un certificado digital expedido por la FNMT. Lo uso en Firefox sin 
problemas, quiero usarlo desde un script Python con requests.

Estoy probando a meterme en esta página:

https://w2.seg-social.es/ProsaInternet/OnlineAccess?ARQ.SPM.ACTION=LOGIN&ARQ.SPM.APPTYPE=SERVICE&ARQ.IDAPP=XV20R100&URL=239&LANG=1&ESTILO=1

(Si la abrís en el navegador debería pedir un certificado).

Pues bien, lo que he hecho ha sido exportar el certificado en formato 
.p12 desde Firefox. Con esta línea en requests:

 >>> requests.get(URL, cert="ruta/completa/cert.p12")
SSLError: [SSL] PEM lib (_ssl.c:2511)

Lo cual me hace sospechar que debería convertirlo a formato .pem. Pruebo 
esto primero:

$ openssl pkcs12 -in cert.p12 -out cert.pem
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Todo correcto (creo). Si ahora hago esto:

 >>> requests.get(URL, cert="ruta/completa/cert.pem")
Enter PEM pass phrase:
ConnectionError: HTTPSConnectionPool(host='w2.seg-social.es', port=443): 
Max retries exceeded with url: 
/ProsaInternet/OnlineAccess?ARQ.SPM.ACTION=LOGIN&ARQ.SPM.APPTYPE=SERVICE&ARQ.IDAPP=XV20R100&URL=239&LANG=1 
(Caused by <class 'OSError'>: [Errno 22] Invalid argument)

¿Quiere esto decir que estoy haciendo mal o que me he pasado de intentos 
por hoy? :)

He intentado también convertirlos en un par crt/key:

$ openssl pkcs12 -in CERTIFICADO.p12 -nocerts -out cert.key
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
$ openssl pkcs12 -in CERTIFICADO.p12 -clcerts -nokeys -out cert.crt
Enter Import Password:
MAC verified OK
 >>> requests.get(URL, cert=("/ruta/completa/cert.crt", 
"/ruta/completa/cert.key"))
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 
(_ssl.c:598)

Me he asegurado que no me equivoco con la pass phrase. ¿Me estoy 
equivocando en algo?

Si me apuntáis a algún sitio donde pueda encontrar cómo hacer esto se 
agradece también - y si pensáis que debo preguntar en StackOverflow 
decidlo también :)

Gracias de antemano, un saludo

Juanlu


More information about the general mailing list