InsecureRequestWarning unterdrücken: In Python2.6 wird eine nicht überprüfte HTTPS-Anforderung gestellt

345

Ich schreibe Skripte in Python2.6 unter Verwendung von pyVmomi und unter Verwendung einer der Verbindungsmethoden:

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

Ich erhalte folgende Warnung:

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

Interessant ist, dass ich urllib3 nicht mit pip installiert habe (aber es befindet sich dort in /usr/lib/python2.6/site-packages/requests/packages/urllib3/ ).

Ich habe es wie hier vorgeschlagen versucht

import urllib3
...
urllib3.disable_warnings()

aber das hat nichts geändert.

Patryk
quelle
Sie können versuchen, die Protokollstufe für dieses bestimmte Modul festzulegen,
Reina Abolofia
Eine globale und vollständig funktionierende Lösung gibt es: stackoverflow.com/questions/14463277/…
jmcollin92
2
WARNUNG: Deaktivieren Sie die Zertifikatsüberprüfung nur, wenn Sie sich nicht für jemanden interessieren, der sich als Remote-Server ausgibt!
ivan_pozdeev
4
Nun, die Warnung verhindert nicht wirklich , was auch immer passiert. Es deaktiviert nicht die Validierung, sondern die Warnung vor fehlender Validierung.
Dwanderson

Antworten:

794

Sie können alle Python-Warnungen über die PYTHONWARNINGSUmgebungsvariable deaktivieren . In diesem Fall möchten Sie:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

So deaktivieren Sie mit Python-Code ( requests >= 2.16.0):

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

Für requests < 2.16.0sehen, ursprüngliche Antwort unten.

Ursprüngliche Antwort

Der Grund, warum dies urllib3.disable_warnings()bei Ihnen nicht funktioniert hat, ist, dass Sie anscheinend eine separate Instanz von urllib3 verwenden, die innerhalb von Anforderungen verkauft wird.

Ich sammle dies basierend auf dem Pfad hier: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

Um Warnungen in Vendored Urllib3 von Anforderungen zu deaktivieren, müssen Sie diese bestimmte Instanz des Moduls importieren:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
shazow
quelle
Ich blogge über die Entwicklung, die ich auf pyvmomi mache, und habe dieses Problem bereits im Oktober 2014 behandelt. Ich teile nur diesen Link, um anderen zu helfen, in Zukunft nützliche pyvmomi-Informationen zu finden: errr-online.com/index.php/tag/pyvmomi
Michael Rice
37
PYTHONWARNINGS="ignore:Unverified HTTPS request"
Rahul Patil
2
Der Vollständigkeit from requests.packages.urllib3.exceptions import InsecureRequestWarning
halber
2
Diese Antwort ist veraltet. Eine moderne Version finden Sie in der Antwort von Nayana Adassuriya.
Dakkaron
3
Aus der Antwort von Nayana Adassuriya kopiert : import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Samuel
116

Dies ist die Antwort im Jahr 2017. urllib3nicht requestsmehr Teil von

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Nayana Adassuriya
quelle
7
Das Jahr ist weniger wichtig als die Versionsnummer der von Ihnen verwendeten Python.
CodeMonkey
3
Ja, Revision wichtiger als Jahr. Dies ist fürrequests >= 2.16.0
dwanderson
Kann jemand die Version von urllib3 posten, wenn ich dies versuche, heißt es, dass urllib3 kein Attribut 'disable_warnings' hat
steff_bdh
1
Diese Antwort verwirrt mich. Meine requestsVersion ist 2.21.0und es hat urllib3. Ich habe versucht 2.16.0, "2.16.1 , and 2.17.0" und sie alle hatten urllib3. Ich habe es versucht 2.4.0und dieser hatte es aber nicht. Haben sie es wieder hinzugefügt?
Mike Furlender
hat für mich gearbeitet !!
Deepdive
35

Per dieser Github Kommentar kann man deaktivieren urllib3Anfrage Warnungen über requestsin einem 1-Liner:

requests.packages.urllib3.disable_warnings()

Dies unterdrückt jedoch alle Warnungen, nicht nur InsecureRequest(dh es werden auch InsecurePlatformusw. unterdrückt ). In Fällen, in denen wir nur wollen, dass Dinge funktionieren, finde ich die Prägnanz praktisch.

hamx0r
quelle
4
Dies ist die beste Option für 2.7, da ich urllib3 nicht importieren muss, nur um die Warnung zu unterdrücken
CodeMonkey
3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)scheint zu funktionieren.
Mattalxndr
29

Der richtige Weg ist, den entsprechenden Abschnitt auf dem bereitgestellten Link zu lesen und zu tun, was er sagt. Die Art und Weise, für requestsdie urllib3gemäß CA-Zertifikaten - Erweiterte Verwendung - Anforderungen 2.8.1 Dokumentation spezifisch ist (die mit einer eigenen Kopie gebündelt wird ) :

  • requests Wird mit einem eigenen Zertifikatspaket geliefert (kann jedoch nur zusammen mit dem Modul aktualisiert werden).
  • Es wird stattdessen (seit requests v2.4.0) dem certifiPaket verwendet, wenn es installiert ist

Die Sicherheitsmaßnahme zur Überprüfung des HTTPS-Zertifikats sollte nicht unbeschwert verworfen werden. Der Man-in-the-Middle-Angriff, der verhindert, schützt Sie vor Dritten, z. B. indem Sie einen Virus einstecken oder Ihre Daten manipulieren oder stehlen .

Was angesichts der heutigen von der Regierung unterstützten globalen Hacking-Operationen wie Tailored Access Operations und der Great Firewall of China , die auf die Netzwerkinfrastruktur abzielen, wahrscheinlicher ist als Sie denken.

ivan_pozdeev
quelle
Ich habe Anfragen 2.8.1 und Zertifikat 2015.11.20.1 und erhalte immer noch die Warnung.
Alex Bartiş
3
@ AlexBartiş Dies kann sein, wenn Sie (oder ein Code, den Sie aufrufen) bestehen verify=False.
ivan_pozdeev
2
Warum gibt es so wenige Stimmen für diese Antwort? Ist es tatsächlich sicher, diese Warnungen zu ignorieren?
Sgryzko
1
@sgryzko Nur wenn Sie sich nicht für jemanden interessieren, der sich als Remote-Server ausgibt. Wahrscheinlich ist es vielen in der Tat egal und / oder sie lesen nicht über die erste Antwort hinaus, was zum positiven Feedback-Zyklus beiträgt. Diese Antwort wurde auch fast ein Jahr später veröffentlicht.
ivan_pozdeev
2
Ja, Sie sollten in einer Produktionsumgebung das Richtige tun, und es ist schlecht, den Fehler blind zu unterdrücken. Es ist jedoch völlig gültig, diese Fehler in einer Testumgebung unterdrücken zu wollen.
Vroo
12

Für ungeduldige, schnelle Möglichkeit, die nicht überprüfte HTTPS-Warnung von Python zu deaktivieren:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"
Wenbing Li
quelle
Für Powershell lautet der Befehl$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au
10

Die akzeptierte Antwort funktioniert nicht, wenn einige Paketanbieter eine eigene Kopie von urllib3 haben. In diesem Fall funktioniert dies weiterhin:

import warnings

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

Ich hatte ein ähnliches Problem mit PyVmomi Client. Mit Python Version 2.7.9 habe ich dieses Problem mit der folgenden Codezeile gelöst:

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

Beachten Sie, dass Sie mindestens Python 2.7.9 benötigen, damit dies funktioniert.

Rajive Pai
quelle
1

Warum nicht mit pyvmomi ursprüngliche Funktion SmartConnectNoSSL . Sie fügten diese Funktion hinzuJune 14, 2016 und nannten sie ConnectNoSSL: einen Tag , nachdem sie den Namen zu ändern SmartConnectNoSSL, verwenden , die statt durch die Warnung mit unnötigen Zeilen Code in Ihrem Projekt vorbei?

Bietet eine Standardmethode für die Verbindung zu einem angegebenen Server ohne SSL-Überprüfung. Nützlich, wenn Sie eine Verbindung zu Servern mit selbstsignierten Zertifikaten herstellen oder wenn Sie SSL vollständig ignorieren möchten

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

Für Python 2.7

Fügen Sie die Umgebungsvariable PYTHONWARNINGS als Schlüssel und den entsprechenden zu ignorierenden Wert wie folgt hinzu:

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

Imran Al Noor
quelle