https handshake con keystores en Python

Tengo un servidor web configurado que niega las conexiones sin un certificado .p12 válido. Necesito acceder a una API REST que se ejecuta en el servidor en un script de Python, pero no puedo encontrar nada sobre cómo hacerlo. Si alguien tiene un buen tutorial sobre cómo realizar un protocolo de enlace SSL con certificados .p12 en Python, hágamelo saber.

Los mismos métodos descritos en las respuestas a esta pregunta , que preguntan acerca de la verificación de un certificado de servidor durante la conexión HTTPS (esto no se realiza de manera predeterminada por urllib o httplib ) deberían permitirle especificar un certificado de cliente además de la CA listas de certificados

  • Si elige la opción basada en ssl.wrap_socket , pase un parámetro cerfile / cerfile como se describe en la documentación.
  • Utilizando PycURL, debería poder llamar a setopt(pycurl.SSLCERT, "/path/to/cert.pem") y setopt(pycurl.SSLKEY, "/path/to/key.pem") . Los nombres de las opciones se basan en la sección SSL y OPCIONES DE SEGURIDAD de la documentación de cURL (también hay una opción para la contraseña).

Es probable que tenga que convertir su archivo PKCS # 12 ( .p12 ) al formato PEM. Para hacerlo

 # Extract the certificate: openssl pkcs12 -in filename.p12 -nokeys -out certificate.pem # Extract the private key: openssl pkcs12 -in filename.p12 -nocerts -out privkey.pem