Sopprimere InsecureRequestWarning: la richiesta HTTPS non verificata viene effettuata in Python2.6


345

Sto scrivendo script in Python2.6 con l'uso di pyVmomi e mentre utilizzo uno dei metodi di connessione:

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

Ricevo il seguente avviso:

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

La cosa interessante è che non ho urllib3 installato con pip (ma è disponibile in /usr/lib/python2.6/site-packages/requests/packages/urllib3/ ).

Ho provato come suggerito qui

import urllib3
...
urllib3.disable_warnings()

ma questo non ha cambiato nulla.


Si potrebbe provare a impostare il livello di log per quel modulo specifico, come descritto in questa risposta stackoverflow.com/questions/7234262/...
Reina Abolofia

Una soluzione globale e completamente di lavoro è lì: stackoverflow.com/questions/14463277/...
jmcollin92

2
ATTENZIONE: disabilita la validazione del certificato solo se non ti importa di qualcuno che si spaccia per il server remoto!
ivan_pozdeev,

4
bene, l'avvertimento non impedisce davvero qualsiasi cosa accada. Non sta disabilitando la validazione, sta disabilitando l'avvertimento sulla mancanza di validazione.
Dwanderson

Risposte:


795

Puoi disabilitare tutti gli avvisi di Python tramite la PYTHONWARNINGSvariabile d'ambiente. In questo caso, vuoi:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Per disabilitare utilizzando il codice Python ( requests >= 2.16.0):

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

Per requests < 2.16.0, vedere la risposta originale di seguito.

Risposta originale

Il motivo per cui urllib3.disable_warnings()non ha funzionato per te è perché sembra che tu stia utilizzando un'istanza separata di urllib3 venduta all'interno delle richieste.

Lo raccolgo in base al percorso qui: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

Per disabilitare gli avvisi nell'urllib3 venduta delle richieste, dovrai importare quell'istanza specifica del modulo:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

Scrivo un blog sullo sviluppo che faccio su pyvmomi e ho trattato questo problema nell'ottobre 2014. Sto solo condividendo questo link per aiutare gli altri a trovare utili informazioni pyvmomi in futuro: errr-online.com/index.php/tag/pyvmomi
Michael Rice

37
PYTHONWARNINGS="ignore:Unverified HTTPS request"
Rahul Patil,

2
Per completezza:from requests.packages.urllib3.exceptions import InsecureRequestWarning
propjk007,

2
Questa risposta è obsoleta. Per una versione moderna, vedi la risposta di Nayana Adassuriya.
Dakkaron,

3
Copiato da risposta di Nayana Adassuriya: import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Samuel,

117

Questa è la risposta nel 2017. urllib3Non fa requestspiù parte

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

7
L'anno è meno importante del numero di revisione di Python in uso.
CodeMonkey,

3
Sì, revisione più importante dell'anno. Questo è perrequests >= 2.16.0
dwanderson il

qualcuno può pubblicare la versione di urllib3, quando provo questo, dice che urllib3 non ha alcun attributo 'disable_warnings'
steff_bdh

1
Sono confuso da questa risposta. La mia requestsversione è 2.21.0e ha urllib3. Ho provato 2.16.0, `2.16.1 , and 2.17.0` e tutti avevano urllib3. Ci ho provato 2.4.0e quello non ce l'aveva, però. L'hanno aggiunto di nuovo?
Mike Furlender,

35

Per questo commento su github , è possibile disabilitare gli urllib3avvisi di richiesta tramite requestsin 1-liner:

requests.packages.urllib3.disable_warnings()

Questo eliminerà tutti gli avvertimenti, non solo InsecureRequest(cioè sopprimerà anche InsecurePlatformecc.). Nei casi in cui vogliamo solo che le cose funzionino, trovo la concisione a portata di mano.


4
Questa è l'opzione migliore per 2.7 in quanto non ho bisogno di importare urllib3 solo per sopprimere l'avviso
CodeMonkey,

3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)sembra funzionare.
Mattalxndr

29

Il modo corretto è leggere la sezione pertinente sul collegamento fornito e fare come indicato. Il modo specifico per requests(che raggruppa con una propria copia di urllib3), come da Certificati CA - Uso avanzato - Richieste 2.8.1 documentazione :

  • requests viene fornito con il proprio pacchetto di certificati (ma può essere aggiornato solo insieme al modulo)
  • utilizzerà (dal requests v2.4.0) invece il certifipacchetto se è installato

La misura di sicurezza per la verifica del certificato HTTPS non è qualcosa da scartare a cuor leggero. L'attacco man-in-the-middle che impedisce di proteggerti da una terza parte, ad esempio sorseggiando un virus o manomettendo o rubando i tuoi dati.

Il che, con le operazioni di hacking globali sostenute dal governo di oggi come Tailored Access Operations e il Great Firewall of China che prendono di mira le infrastrutture di rete, è più probabile di quanto si pensi.


Ho richieste 2.8.1 e certifi 2015.11.20.1 e ricevo ancora l'avviso.
Alex Bartiş,

3
@ AlexBartiş questo può essere se tu (o qualche codice che chiami) passi verify=False.
Ivan_pozdeev il

2
Perché ci sono così pochi voti per questa risposta? In realtà è sicuro ignorare questi avvisi?
sgryzko,

1
@sgryzko Solo se non ti importa di qualcuno che si spaccia per il server remoto. Probabilmente, molti non si preoccupano e / o non leggono oltre la prima risposta, contribuendo al ciclo di feedback positivo. Questa risposta è stata pubblicata anche quasi un anno dopo.
ivan_pozdeev,

2
Sì, dovresti fare la cosa giusta in un ambiente di produzione e sopprimere ciecamente l'errore è negativo. Ma è una cosa del tutto valida voler eliminare questi errori in un ambiente di test.
Vroo,

12

Per impazienti, un modo rapido per disabilitare l'avviso HTTPS non verificato di Python:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Per PowerShell il comando è$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au,

10

La risposta accettata non funziona se alcuni fornitori di pacchetti sono la propria copia di urllib3, nel qual caso funzionerà comunque:

import warnings

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

1

Ho avuto un problema simile con PyVmomi Client. Con Python versione 2.7.9, ho risolto questo problema con la seguente riga di codice:

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

Si noti che, affinché funzioni, è necessario almeno Python 2.7.9.


1

Perché non usare la funzione originale di pyvmomi SmartConnectNoSSL. Hanno aggiunto questa funzione June 14, 2016e l'hanno chiamata ConnectNoSSL, un giorno dopo aver cambiato il nome in SmartConnectNoSSL, usarla invece di passare l'avvertimento con righe di codice non necessarie nel tuo progetto?

Fornisce un metodo standard per la connessione a un server specificato senza verifica SSL. Utile quando ci si collega a server con certificati autofirmati o quando si desidera ignorare del tutto SSL

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

0

Per Python 2.7

Aggiungi la variabile d'ambiente PYTHONWARNINGS come chiave e il valore corrispondente da ignorare come:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.