Придушити InsecureRequestWarning: у Python2.6 робиться неперевірений запит HTTPS


345

Я пишу сценарії в Python2.6 з використанням pyVmomi і під час використання одного з методів з'єднання:

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

Я отримую таке попередження:

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

Цікаво, що у мене не встановлено urllib3 з pip (але він є в /usr/lib/python2.6/site-packages/requests/packages/urllib3/ ).

Я спробував, як тут запропоновано

import urllib3
...
urllib3.disable_warnings()

але це нічого не змінило.


Ви можете спробувати встановити рівень реєстрації для цього конкретного модуля , як описано в цій відповіді stackoverflow.com/questions/7234262 / ...
Reina Abolofia

Глобальний та укомплектувати робочий розчин є: stackoverflow.com/questions/14463277 / ...
jmcollin92

2
ПОПЕРЕДЖЕННЯ. Відключіть перевірку сертифікатів лише у тому випадку, якщо вам не байдуже, що хтось видає себе за віддалений сервер!
ivan_pozdeev

4
ну попередження насправді не заважає, що трапиться. Це не вимкнення перевірки, це відключення попередження про відсутність перевірки.
dwanderson

Відповіді:


795

Ви можете відключити будь-які попередження Python через PYTHONWARNINGSзмінну оточення. У цьому випадку потрібно:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Щоб вимкнути використання Python коду ( requests >= 2.16.0):

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

Бо requests < 2.16.0дивіться оригінальну відповідь нижче.

Оригінальна відповідь

Причина urllib3.disable_warnings()для вас не спрацювала в тому, що це виглядає так, що ви використовуєте окремий екземпляр urllib3, що постачається всередині запитів.

Я збираю це на основі сюди: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

Щоб вимкнути попередження в наданому URL-адресі urllib3, вам потрібно імпортувати конкретний екземпляр модуля:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

Я веду блог про розробку, яку я займаюся pyvmomi, і висвітлював цю проблему ще в жовтні 2014 року. Я просто поділився цим посиланням, щоб допомогти іншим знайти корисну інформацію про pyvmomi в майбутньому: errr-online.com/index.php/tag/pyvmomi
Майкл Райс

37
PYTHONWARNINGS="ignore:Unverified HTTPS request"
Рахул Патіл

2
Для повноти:from requests.packages.urllib3.exceptions import InsecureRequestWarning
propjk007

2
Ця відповідь застаріла. Про сучасну версію дивіться у відповідь Наяни Адасурії.
Даккарон

3
Скопійовано з відповіді Nayana Adassuriya в: import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Самуїл

117

Це відповідь на 2017. urllib3не частина requestsбільше

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

7
Рік є меншим за імпорт, ніж число ревізії пітона, який ви використовуєте.
CodeMonkey

3
Так, перегляд важливіший за рік. Це дляrequests >= 2.16.0
dwanderson

Чи може хтось розмістити версію urllib3, коли я спробую це, він говорить, що urllib3 не має атрибута 'ones_warnings'
steff_bdh

1
Мене бентежить ця відповідь. Моя requestsверсія є 2.21.0і є urllib3. Я спробував 2.16.0, `2.16.1 , and 2.17.0`, і все у них було urllib3. Я спробував, 2.4.0і цього у нього не було, хоча. Вони додали його назад?
Майк Фурлендер

35

Відповідно до цього коментаря github , ви можете відключити urllib3попередження про запит за requestsдопомогою 1-лайнера:

requests.packages.urllib3.disable_warnings()

Це придушить усі попередження, однак, не лише InsecureRequest(тобто воно також придушить InsecurePlatformтощо). У тих випадках, коли ми просто хочемо, щоб робота працювала, я вважаю стислість зручною.


4
Це найкращий варіант для 2.7, оскільки мені не потрібно імпортувати urllib3 лише для придушення попередження
CodeMonkey

3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)здається, працює.
mattalxndr

29

Правильний спосіб - прочитати відповідний розділ на наданому посиланні та зробити так, як воно говорить. Спосіб, специфічний для requests(який в комплекті з власною копією urllib3), згідно з сертифікатами CA - Розширене використання - Запит документації 2.8.1 :

  • requests постачається зі своїм пакетом сертифікатів (але його можна оновлювати лише разом з модулем)
  • він буде використовувати (з requests v2.4.0) в certifiпакет замість цього , якщо він встановлений

Захід безпеки підтвердження сертифіката HTTPS не є тим, що слід відверто відкидати. Напад "Людина в середині", який запобігає захищенню від третьої сторони, наприклад, попиваючи вірус або підробляючи або вкрадаючи ваші дані.

Що, завдяки підтримуваним сьогодні урядом глобальним хакерським операціям, таким як « Індивідуальні операції доступу» та Великий Брандмауер Китаю, які спрямовані на мережеву інфраструктуру, є більш імовірним, ніж ви думаєте.


У мене є запити 2.8.1 та certifi 2015.11.20.1, і я все одно отримую попередження.
Алекс Бартиш

3
@ AlexBartiş це може бути, якщо ви (або якийсь код, який ви називаєте) передаєте verify=False.
ivan_pozdeev

2
Чому за цю відповідь так мало голосів? Чи насправді безпечно ігнорувати ці попередження?
sgryzko

1
@sgryzko Тільки якщо вам не байдуже, щоб хтось видавав себе за віддалений сервер. Напевно, багатьох насправді не хвилює та / або не читає після першої відповіді, сприяючи циклу позитивних відгуків. Ця відповідь була також опублікована майже через рік.
ivan_pozdeev

2
Так, у виробничих умовах слід робити все правильно, і сліпо пригнічувати помилку - це погано. Але цілком дійсно потрібно придушити ці помилки в тестовому середовищі.
Vroo

12

Для нетерплячих - швидкий спосіб відключити неперевірене попередження HTTPS про python:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Для повноважень команда$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au

10

Прийнята відповідь не працює, якщо у деяких постачальників пакетів є власна копія urllib3, і в цьому випадку це все ще буде працювати:

import warnings

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

1

У мене була схожа проблема з клієнтом PyVmomi. З Python версії 2.7.9 я вирішив цю проблему за допомогою наступного рядка коду:

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

Зауважте, що для цього вам потрібно Python 2.7.9 як мінімум.


1

Чому б не використати оригінальну функцію pyvmomi SmartConnectNoSSL. Вони додали цю функцію June 14, 2016і назвали її ConnectNoSSL, через день після того, як вони змінили ім'я SmartConnectNoSSL, використовувати це замість того, щоб передавати попередження непотрібними рядками коду у вашому проекті?

Надає стандартний метод підключення до вказаного сервера без підтвердження SSL. Корисно під час підключення до серверів із самопідписаними сертифікатами або коли ви хочете взагалі ігнорувати SSL

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

0

Для Python 2.7

Додайте змінну середовища PYTHONWARNINGS як ключ і відповідне значення, яке слід ігнорувати, як:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.