Crear un certificado OpenSSL para superar el error de validación del certificado SSLError de Python

1

Tengo una aplicación cliente / servidor donde el servidor usa el protocolo HTTPS y tiene la dirección y el puerto localhost:44301 .

La aplicación cliente utiliza Python 2.7.13 en la plataforma Windows para conectarse con el servidor. Este es el código del fragmento:

import platform, os
import requests, json, certifi, urllib3

def main():

my_c_folder = os.path.dirname('C:\Users\Admin\Desktop\cert')
my_pem = os.path.join('C:\Users\Admin\Desktop\cert', 'ce-lh.pem')
my_crt = os.path.join('C:\Users\Admin\Desktop\cert', 'ce-lh.crt')
my_key = os.path.join('C:\Users\Admin\Desktop\cert', 'ce.key')

http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',ca_certs=my_crt)

h = http.request('GET','https://localhost:44301/api/myData',auth=('myUser', 'myPass'))
print h
r = requests.get('https://localhost:44301/api/myData',auth=('myUser', 'myPass'),  verify=my_crt)
print r


if __name__ == "__main__": 
    main()

Tanto las llamadas a enlace como fallan al devolver este error

raise SSLError(e)
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

Con OpenSSL (versión 1.0.2k) anteriormente he creado el certificado de esta manera:

  1. Genere el RSA: openssl genrsa -aes256 -out ce.key 2048 -config c:\Program Files\OpenSSL-Win 64\bin\openssl.cfg
  2. Cree la solicitud de firma de certificado: openssl req -new -key ce.key -out ce.csr
    Usando este parámetro: Nombre común (por ejemplo, FQDN del servidor o SU nombre) []: localhost *
  3. Crea el certificado: openssl x509 -req -days 365 -in ce.csr -signkey ce.key -out ce.crt
  4. Exportar en formato pem: openssl x509 -in ce.crt -out ce.pem -outform PEM

¿En qué me equivoco? ¿Cómo superar el error del certificado? (Sé que puedo deshabilitar para verificar el certificado, pero no es el objetivo).

¿Es un error de implementación de Python? ¿O he usado OpenSSL con comandos incorrectos? O que mas Gracias de antemano

    
pregunta Cyr 22.03.2017 - 12:55
fuente

0 respuestas

Lea otras preguntas en las etiquetas