web-dev-qa-db-fra.com

Supprimer InsecureRequestWarning: une requête HTTPS non vérifiée est en cours de création dans Python2.6

J'écris des scripts en Python2.6 avec pyVmomi et en utilisant l'une des méthodes de connexion suivantes:

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

Je reçois l'avertissement suivant:

/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)

Ce qui est intéressant, c’est que je n’ai pas installé urllib3 avec pip (mais c’est là dans /usr/lib/python2.6/site-packages/request/packages/urllib3/).

J'ai essayé comme suggéré ici

import urllib3
...
urllib3.disable_warnings()

mais cela n'a rien changé.

257
Patryk

Vous pouvez désactiver tous les avertissements Python via la variable d'environnement PYTHONWARNINGS. Dans ce cas, vous voulez:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Pour désactiver l’utilisation de Python code (requests >= 2.16.0):

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

Pour requests < 2.16.0, voir la réponse originale ci-dessous.

Réponse originale

La raison pour laquelle urllib3.disable_warnings() n'a pas fonctionné pour vous est qu'il semble que vous utilisiez une instance distincte d'urllib3 vendored à l'intérieur des demandes.

Je rassemble ceci basé sur le chemin ici: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

Pour désactiver les avertissements dans l'urllib3 vendored des demandes, vous devez importer cette instance spécifique du module:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
639
shazow

C'est la réponse pour 2017. urllib3 ne fait plus partie de requests

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
91
Nayana Adassuriya

La bonne façon est de lire la section pertinente sur le lien fourni et faites comme il est dit. La manière spécifique pour requests (qui contient sa propre copie de urllib3), conformément à Certificats CA - Utilisation avancée - Documentation Requests 2.8.1 :

  • requests est livré avec son propre ensemble de certificats (mais il ne peut être mis à jour qu'avec le module)
  • il utilisera (depuis requestsv2.4.0) le package certifi s'il est installé

La mesure de sécurité relative à la vérification des certificats HTTPS ne doit pas être écartée avec légèreté. L’attaque Man-in-the-middle qu’elle évite vous protège de tiers, par exemple. en sirotant un virus dans ou en altérant ou en volant vos données.

Ce qui, avec les opérations de piratage mondiales soutenues par le gouvernement telles que Opérations d'accès personnalisées et le grand pare-feu de Chine cette infrastructure de réseau cible, est plus probable que vous ne le pensez.

26
ivan_pozdeev

Par ce github commentaire, on peut désactiver urllib3 demander des avertissements via requests dans une ligne:

requests.packages.urllib3.disable_warnings()

Cela supprimera tous les avertissements , pas seulement InsecureRequest (c’est-à-dire qu’il supprimera également InsecurePlatform etc). Dans les cas où nous voulons simplement que les choses fonctionnent, je trouve la concision pratique.

24
hamx0r

Pour les impatients, un moyen rapide de désactiver l'avertissement HTTPS non vérifié de python:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"
8
Wenbing Li

Pourquoi ne pas utiliser pyvmomi fonction originaleSmartConnectNoSSL. Ils ont ajouté cette fonction sur June 14, 2016 et l'ont nommée ConnectNoSSL, n jour après ils ont changé le nom en SmartConnectNoSSL, utilisez-le plutôt de en passant l'avertissement avec des lignes de code inutiles dans votre projet?

Fournit une méthode standard pour se connecter à un serveur spécifié sans vérification SSL. Utile lors de la connexion à des serveurs avec des certificats auto-signés ou lorsque vous souhaitez ignorer complètement SSL

service_instance = connect.SmartConnectNoSSL(Host=args.ip,
                                             user=args.user,
                                             pwd=args.password)
1
SpazaM

J'ai eu un problème similaire avec PyVmomi Client. Avec Python Version 2.7.9, j'ai résolu ce problème avec la ligne de code suivante:

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

Notez que, pour que cela fonctionne, vous avez besoin de Python 2.7.9 au moins.

1
Rajive Pai

La réponse acceptée ne fonctionne pas si certains vendeurs de paquets possèdent leur propre copie de urllib3, auquel cas cela fonctionnera toujours:

import warnings

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

Pour Python 2.7

Ajoutez la variable d’environnement PYTHONWARNINGS comme clé et la valeur correspondante à ignorer, par exemple:

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

0
Imran Al Noor