Suprimir InsecureRequestWarning: la solicitud HTTPS no verificada se está realizando en Python2.6

345

Estoy escribiendo scripts en Python2.6 con el uso de pyVmomi y mientras uso uno de los métodos de conexión:

service_instance = connect.SmartConnect(host=args.ip,
                                        user=args.user,
                                        pwd=args.password)

Me sale la siguiente advertencia:

/usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py:734: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)

Lo interesante es que no tengo urllib3 instalado con pip (pero está allí en /usr/lib/python2.6/site-packages/requests/packages/urllib3/ ).

He intentado como se sugiere aquí

import urllib3
...
urllib3.disable_warnings()

Pero eso no cambió nada.

Patryk
fuente
Puede intentar establecer el nivel de registro para ese módulo específico como se describe en esta respuesta stackoverflow.com/questions/7234262/…
Reina Abolofia
Existe una solución global y completamente funcional: stackoverflow.com/questions/14463277/…
jmcollin92
2
ADVERTENCIA: ¡ solo deshabilite la validación de certificados si no le importa que alguien se haga pasar por el servidor remoto!
ivan_pozdeev
44
bueno, la advertencia realmente no previene lo que sea ​​que esté sucediendo. No está deshabilitando la validación, está deshabilitando la advertencia sobre la falta de validación.
dwanderson

Respuestas:

794

Puede deshabilitar cualquier advertencia de Python a través de la PYTHONWARNINGSvariable de entorno. En este caso, quieres:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Para deshabilitar el uso del código Python ( requests >= 2.16.0):

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

Para requests < 2.16.0, vea la respuesta original a continuación.

Respuesta original

La razón por la urllib3.disable_warnings()que no funcionó es porque parece que está utilizando una instancia separada de urllib3 vendida dentro de las solicitudes.

Recojo esto basado en el camino aquí: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

Para deshabilitar las advertencias en urllib3 vendida de las solicitudes, deberá importar esa instancia específica del módulo:

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
shazow
fuente
Escribo sobre el desarrollo que hago en pyvmomi y cubrí este problema en octubre de 2014. Solo comparto este enlace para ayudar a otros a encontrar información útil sobre pyvmomi en el futuro: errr-online.com/index.php/tag/pyvmomi
Michael Rice
37
PYTHONWARNINGS="ignore:Unverified HTTPS request"
Rahul Patil
2
Para completar:from requests.packages.urllib3.exceptions import InsecureRequestWarning
propjk007
2
Esta respuesta está desactualizada. Para una versión moderna, vea la respuesta de Nayana Adassuriya.
Dakkaron
3
Copiado de la respuesta de Nayana Adassuriya: import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Samuel
117

Esta es la respuesta en 2017. urllib3No es una parte de requestsmás

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Nayana Adassuriya
fuente
77
El año es menos importante que el número de revisión de Python que está utilizando.
CodeMonkey
3
Sí, la revisión es más importante que el año. Esto es pararequests >= 2.16.0
dwanderson
alguien puede publicar la versión de urllib3, cuando intento esto, dice que urllib3 no tiene el atributo 'disable_warnings'
steff_bdh
1
Estoy confundido por esta respuesta. Mi requestsversión es 2.21.0y tiene urllib3. Intenté 2.16.0, '2.16.1 , and 2.17.0' y todos lo hicieron urllib3. 2.4.0Sin embargo, lo intenté y ese no lo tenía. ¿Lo agregaron nuevamente?
Mike Furlender
¡¡trabajó para mi!!
DeepDive
35

Según este comentario de github , uno puede deshabilitar las urllib3advertencias de solicitud a través requestsde 1 línea:

requests.packages.urllib3.disable_warnings()

Sin embargo, esto suprimirá todas las advertencias, no solo InsecureRequest(es decir, también suprimirá, InsecurePlatformetc.). En los casos en que solo queremos que las cosas funcionen, la concisión es útil.

hamx0r
fuente
44
Esta es la mejor opción para 2.7 ya que no necesito importar urllib3 solo para suprimir la advertencia
CodeMonkey
3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)parece funcionar.
mattalxndr
29

La forma correcta es leer la sección correspondiente en el enlace proporcionado y hacer lo que dice. La forma específica para requests(que se agrupa con su propia copia de urllib3), según los certificados de CA - Uso avanzado - Solicitudes 2.8.1 documentación :

  • requests se envía con su propio paquete de certificados (pero solo se puede actualizar junto con el módulo)
  • utilizará (desde requests v2.4.0) el certifipaquete en su lugar si está instalado

La medida de seguridad de verificación del certificado HTTPS no es algo que deba descartarse alegremente. El ataque Man-in-the-middle que evita protegerte de un tercero, por ejemplo, tomar un virus o manipular o robar tus datos.

Lo cual, con las operaciones de pirateo global respaldadas por el gobierno de hoy en día, como Tailored Access Operations y el Gran Firewall de China que apuntan a la infraestructura de red, es más probable de lo que piensas.

ivan_pozdeev
fuente
Tengo solicitudes 2.8.1 y certifi 2015.11.20.1 y todavía recibo la advertencia.
Alex Bartiş
3
@ AlexBartiş esto puede ser si usted (o algún código que llame) pasa verify=False.
ivan_pozdeev
2
¿Por qué hay tan pocos votos para esta respuesta? ¿Es realmente seguro ignorar estas advertencias?
sgryzko
1
@sgryzko Solo si no te importa que alguien se haga pasar por el servidor remoto. Probablemente, a muchos realmente no les importa y / o no leen más allá de la primera respuesta, lo que contribuye al ciclo de retroalimentación positiva. Esta respuesta también se publicó casi un año después.
ivan_pozdeev
2
Sí, debe hacer lo correcto en un entorno de producción y suprimir ciegamente el error es malo. Pero es algo completamente válido querer suprimir estos errores en un entorno de prueba.
Vroo
12

Para impacientes, una forma rápida de deshabilitar la advertencia HTTPS no verificada de Python:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"
Wenbing Li
fuente
Para powershell, el comando es$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au
10

La respuesta aceptada no funciona si algunos proveedores de paquetes son su propia copia de urllib3, en cuyo caso esto seguirá funcionando:

import warnings

warnings.filterwarnings('ignore', message='Unverified HTTPS request')
Yigal
fuente
1

Tuve un problema similar con PyVmomi Client. Con Python Versión 2.7.9, he resuelto este problema con la siguiente línea de código:

default_sslContext = ssl._create_unverified_context()
self.client = \
                Client(<vcenterip>, username=<username>, password=<passwd>,
                       sslContext=default_sslContext )

Tenga en cuenta que, para que esto funcione, necesita Python 2.7.9 al menos.

Rajive Pai
fuente
1

¿Por qué no usar la función original de pyvmomi SmartConnectNoSSL? Se añaden a esta función en June 14, 2016y lo llamaron ConnectNoSSL, un día después se cambió el nombre a SmartConnectNoSSL, el uso que en lugar de pasar por el aviso con líneas innecesarias de código en su proyecto?

Proporciona un método estándar para conectarse a un servidor específico sin verificación SSL. Útil cuando se conecta a servidores con certificados autofirmados o cuando desea ignorar SSL por completo

service_instance = connect.SmartConnectNoSSL(host=args.ip,
                                             user=args.user,
                                             pwd=args.password)
SpazaM
fuente
0

Para Python 2.7

Agregue la variable de entorno PYTHONWARNINGS como clave y el valor correspondiente a ignorar como:

os.environ['PYTHONWARNINGS']="ignore:Unverified HTTPS request"

Imran Al Noor
fuente