sessions requests close auth async python ssl ssl-certificate python-requests sni

python - requests - el uso de solicitudes con TLS no da soporte SNI



requests python sessions (5)

Estoy usando solicitudes para comunicarme con una aplicación django pero

Cuando intento

requests.get(''https://mysite.com'', verify=True)

Me sale el error:

nombre de host ''mysite.com'' no coincide con ''* .myhost.com'', ''myhost.com''

Sin embargo, cuando miro el navegador, o http://www.digicert.com/help/ el certificado se ve bien y elegante.

Mi anfitrión sugirió que era la falta de soporte de SNI a partir de las solicitudes (y Github parece confirmar que https://github.com/kennethreitz/requests/issues/749 ). ¿Alguien ha encontrado una solución alternativa utilizando las solicitudes?


Instale un módulo de solicitudes como este. Esto instalará los extras del paquete de seguridad.

pip install requests[security]


La respuesta de @Lukasa es correcta con las solicitudes presentes (de github). Recuerde agregar OpenSSL en su sistema además de las dependencias de pip que menciona.

Si por razones de implementación prefiere una versión estable de solicitudes como 1.2.3 in pip, puede parchear el mono para trabajar con SNI de esta manera:

import requests def fileno(self): return self.socket.fileno() def close(self): return self.connection.shutdown() requests.pyopenssl.WrappedSocket.close = close requests.pyopenssl.WrappedSocket.fileno = fileno


La versión actual de las Solicitudes debería estar bien con SNI. Más abajo en el número de GitHub puede ver los requisitos:

Intenta instalar esos paquetes y luego dale otra oportunidad.

EDITAR : a partir de las Solicitudes v2.12.1, ndg-httpsclient y pyasn1 ya no son necesarios. La lista completa de paquetes requeridos ahora es:

  • pyOpenSSL
  • idna


Para poder obtener la respuesta aceptada para el trabajo, tuve que instalar muchos otros paquetes, en este orden:

  • yum instalar libffi-devel
  • yum install gcc
  • yum install openssl-devel
  • pip install urllib3
  • pip install pyopenssl
  • pip install ndg-httpsclient
  • pip install pyasn1