Pomiń InsecureRequestWarning: W Python2.6 powstaje niezweryfikowane żądanie HTTPS


345

Piszę skrypty w Python2.6 przy użyciu pyVmomi i przy użyciu jednej z metod połączenia:

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

Otrzymuję następujące ostrzeżenie:

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

Co ciekawe, nie mam zainstalowanego urllib3 z pipem (ale jest on w /usr/lib/python2.6/site-packages/requests/packages/urllib3/ ).

Próbowałem zgodnie z sugestią tutaj

import urllib3
...
urllib3.disable_warnings()

ale to nic nie zmieniło.


Możesz spróbować ustawić poziom dziennika dla tego konkretnego modułu zgodnie z opisem w odpowiedzi stackoverflow.com/questions/7234262/...
Reina Abolofia

Dostępne jest globalne i całkowicie działające rozwiązanie: stackoverflow.com/questions/14463277/…
jmcollin92

2
OSTRZEŻENIE: wyłącz sprawdzanie poprawności certyfikatu tylko wtedy, gdy nie obchodzi Cię, że ktoś podszywa się pod zdalny serwer!
ivan_pozdeev

4
no cóż, ostrzeżenie tak naprawdę nie przeszkadza, co się dzieje. Nie wyłącza sprawdzania poprawności, wyłącza ostrzeżenie o braku sprawdzania poprawności.
dwanderson

Odpowiedzi:


795

Możesz wyłączyć wszelkie ostrzeżenia w języku Python za pomocą PYTHONWARNINGSzmiennej środowiskowej. W takim przypadku chcesz:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Aby wyłączyć za pomocą kodu Python ( requests >= 2.16.0):

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

Dla requests < 2.16.0, zobaczyć oryginalne odpowiedź poniżej.

Oryginalna odpowiedź

Powód robienia urllib3.disable_warnings() dla którego to nie działało, jest to, że wygląda na to, że używasz osobnej instancji urllib3 sprzedawanej w żądaniach.

Zbieram to na podstawie ścieżki tutaj: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

Aby wyłączyć ostrzeżenia w sprzedawanym urllib3 żądań, musisz zaimportować tę konkretną instancję modułu:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

Piszę na blogu o rozwoju, który robię na pyvmomi, i opisałem ten problem w październiku 2014 roku. Po prostu udostępniam ten link, aby pomóc innym znaleźć przydatne informacje o pyvmomi w przyszłości: errr-online.com/index.php/tag/pyvmomi
Michael Rice

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

2
Dla kompletności:from requests.packages.urllib3.exceptions import InsecureRequestWarning
propjk007

2
Ta odpowiedź jest nieaktualna. Aby uzyskać nowoczesną wersję, zobacz odpowiedź Nayana Adassuriya.
Dakkaron

3
Skopiowane z odpowiedzią nayana Adassuriya za: import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Samuel

117

Jest to odpowiedź w 2017 roku urllib3nie jest częścią requestsjuż

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

7
Rok jest mniejszy niż importowana liczba wersji python, którego używasz.
CodeMonkey

3
Tak, zmiana ważniejsza niż rok. To jest dlarequests >= 2.16.0
dwanderson

czy ktoś może opublikować wersję urllib3, gdy spróbuję tego, mówi, że urllib3 nie ma atrybutu „
disable_warnings

1
Jestem zdezorientowany tą odpowiedzią. Moja requestswersja jest 2.21.0i ma urllib3. Próbowałem 2.16.0, `2.16.1 , and 2.17.0` i wszystkie miały urllib3. Próbowałem jednak 2.4.0i tego nie miałem. Czy dodali go ponownie?
Mike Furlender,

35

Zgodnie z tym komentarzem github można wyłączyć urllib3ostrzeżenia o żądaniach za requestspomocą 1-liniowej linii:

requests.packages.urllib3.disable_warnings()

Spowoduje to jednak usunięcie wszystkich ostrzeżeń, nie tylko InsecureRequest(tj. To również pominie InsecurePlatformitp.). W przypadkach, gdy po prostu chcemy, aby rzeczy działały, uznaję zwięzłość za przydatną.


4
Jest to najlepsza opcja dla wersji 2.7, ponieważ nie muszę importować urllib3 tylko po to, aby ukryć ostrzeżenie
CodeMonkey

3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)wydaje się działać.
mattalxndr

29

Prawidłowym sposobem jest przeczytanie odpowiedniej sekcji na podanym linku i zrobienie tego, co mówi. Sposób specyficzny dla requests(który dołączany jest do własnej kopii urllib3), zgodnie z certyfikatami CA - Zaawansowane użycie - Żądanie dokumentacji 2.8.1 :

  • requests jest dostarczany z własnym pakietem certyfikatów (ale można go aktualizować tylko wraz z modułem)
  • będzie korzystał (ponieważ requests v2.4.0) z certifipakietu zamiast jeśli jest zainstalowany

Środek bezpieczeństwa weryfikacji certyfikatu HTTPS nie należy lekceważyć. Atak typu Man-in-the-middle, który zapobiega, chroni cię przed osobami trzecimi, np. Wyciekiem wirusa, manipulacją lub kradzieżą danych.

Co przy dzisiejszych wspieranych przez rząd globalnych operacjach hakerskich, takich jak Dostosowane operacje dostępu i Wielka zapora ogniowa Chin ukierunkowana na infrastrukturę sieci, jest bardziej prawdopodobne niż myślisz.


Mam wnioski 2.8.1 i certifi 2015.11.20.1 i nadal otrzymuję ostrzeżenie.
Alex Bartiş,

3
@ AlexBartiş może to być, jeśli zdasz (lub jakiś kod, który wywołujesz) zdasz verify=False.
ivan_pozdeev

2
Dlaczego jest tak mało głosów na tę odpowiedź? Czy rzeczywiście bezpiecznie jest zignorować te ostrzeżenia?
sgryzko

1
@sgryzko Tylko wtedy, gdy nie obchodzi Cię ktoś podszywający się pod zdalny serwer. Prawdopodobnie wielu rzeczywiście nie przejmuje się i / lub nie czyta poza pierwszą odpowiedzią, przyczyniając się do cyklu pozytywnego sprzężenia zwrotnego. Ta odpowiedź została również opublikowana prawie rok później.
ivan_pozdeev

2
Tak, powinieneś postępować właściwie w środowisku produkcyjnym, a ślepe tłumienie błędu jest złe. Ale całkowicie poprawne jest wyeliminowanie tych błędów w środowisku testowym.
Vroo,

12

Dla niecierpliwych szybki sposób na wyłączenie pythonowego niezweryfikowanego ostrzeżenia HTTPS:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

W przypadku PowerShell polecenie brzmi$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au

10

Akceptowana odpowiedź nie działa, jeśli niektórzy dostawcy pakietów mają własną kopię urllib3, w którym to przypadku nadal będzie działać:

import warnings

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

1

Miałem podobny problem z PyVmomi Client. W wersji Python 2.7.9 rozwiązałem ten problem za pomocą następującego wiersza kodu:

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

Zauważ, że aby to zadziałało, potrzebujesz przynajmniej Python 2.7.9.


1

Dlaczego nie używając pyvmomi pierwotną funkcję SmartConnectNoSSL . Oni dodaje tę funkcję June 14, 2016i nazwał to ConnectNoSSL, jeden dzień po zmienili nazwę SmartConnectNoSSL, używania, że zamiast przekazując ostrzeżenie ze zbędnych linii kodu w swoim projekcie?

Zapewnia standardową metodę łączenia się z określonym serwerem bez weryfikacji SSL. Przydatne, gdy łączysz się z serwerami z samopodpisanymi certyfikatami lub gdy chcesz całkowicie zignorować SSL

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

0

Dla Python 2.7

Dodaj zmienną środowiskową PYTHONWARNINGS jako klucz i odpowiednią wartość do zignorowania, np .:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.