Suppress InsecureRequestWarning: непроверенный HTTPS-запрос выполняется в Python2.6

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

но это ничего не изменило.

Patryk
источник
Вы можете попытаться установить уровень журнала для этого конкретного модуля, как описано в этом ответе stackoverflow.com/questions/7234262/…
Reina Abolofia
Существует глобальное и полностью работающее решение: stackoverflow.com/questions/14463277/…
jmcollin92
2
ВНИМАНИЕ: отключайте проверку сертификата, только если вас не волнует кто-то, выдающий себя за удаленный сервер!
ivan_pozdeev
4
Ну, предупреждение не мешает тому, что происходит. Это не отключение проверки, это отключение предупреждения об отсутствии проверки.
dwanderson

Ответы:

796

Вы можете отключить любые предупреждения 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

Чтобы отключить предупреждения в встроенном urllib3 запросов, вам необходимо импортировать этот конкретный экземпляр модуля:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
shazow
источник
Я пишу в блоге о разработке для 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
Этот ответ устарел. Для современной версии, см. Ответ Nayana Adassuriya.
Даккарон
3
Скопировано из ответа Наяны Адассурии import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Самуил
117

Это ответ в 2017 году. urllib3Не является частью requestsбольше

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Наяна Адассурия
источник
7
Год менее важен, чем номер версии Python, который вы используете.
CodeMonkey,
3
Да, ревизия важнее года. Это дляrequests >= 2.16.0
dwanderson
Может кто-то опубликовать версию urllib3, когда я пытаюсь это, он говорит, что urllib3 не имеет атрибута "disable_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предупреждения запросов через requests1-строчный:

requests.packages.urllib3.disable_warnings()

Это будет подавлять все предупреждения, а не толькоInsecureRequest (то есть, это также будет подавлять и InsecurePlatformт. Д.). В тех случаях, когда мы просто хотим, чтобы все работало, я нахожу лаконичность удобной.

hamx0r
источник
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 не является чем-то, от чего можно отказаться без энтузиазма Атака «человек посередине», которую она предотвращает, защищает вас от третьей стороны, например, от проникновения вируса, взлома или кражи ваших данных.

Что, учитывая сегодняшние поддерживаемые правительством глобальные хакерские операции, такие как Tailored Access Operations и Great Firewall Китая , нацеленные на сетевую инфраструктуру, является более вероятным, чем вы думаете.

ivan_pozdeev
источник
У меня есть запросы 2.8.1 и сертификат 2015.11.20.1, и я все еще получаю предупреждение.
Алекс Бартиш
3
@ AlexBartiş это может быть, если вы (или какой-то код, который вы называете) пройти verify=False.
ivan_pozdeev
2
Почему так мало голосов за этот ответ? На самом деле безопасно игнорировать эти предупреждения?
сгрызко
1
@sgryzko Только если вы не заботитесь о том, чтобы кто-то выдал себя за удаленный сервер. Вероятно, многим действительно все равно, и / или они не читают после первого ответа, способствуя положительному циклу обратной связи. Этот ответ был также опубликован почти год спустя.
ivan_pozdeev
2
Да, вы должны делать правильные вещи в производственной среде, и слепое подавление ошибки - это плохо. Но совершенно правильно хотеть подавлять эти ошибки в тестовой среде.
Vroo
12

Для нетерпеливых, быстрый способ отключить Python непроверенное предупреждение HTTPS:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"
Венбинг Ли
источник
Для PowerShell команда$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Гвен Ау
10

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

import warnings

warnings.filterwarnings('ignore', message='Unverified HTTPS request')
Игаль
источник
1

У меня была похожая проблема с PyVmomi Client. В 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)
SpazaM
источник
0

Для Python 2.7

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

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

Имран Аль Нур
источник