Подавление InsecureRequestWarning: запрос не проверен HTTPS выполняется в Python2.6

Я пишу скрипты в 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/python 2.6/site-packages/requests/packages/urllib3/).

Я попробовал, как предложено здесь

import urllib3
...
urllib3.disable_warnings()

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

  • requests поставляется с собственным пакетом сертификатов (но его можно обновить только вместе с модулем)
  • вместо этого он будет использовать (начиная с requests v2.4.0) пакета certifi, если он установлен

Мера безопасности проверки сертификата HTTPS не является чем-то, от чего можно отказаться без энтузиазма. Атака "человек посередине", которую он предотвращает, защищает вас от третьей стороны, например потягивая вирус или подделывая или украдя ваши данные.

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

Ответ 4

В этом комментарии на github можно отключить urllib3 запрос предупреждений через requests в 1 строке:

requests.packages.urllib3.disable_warnings()

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

Ответ 5

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

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Ответ 6

У меня была аналогичная проблема с 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 atleast.

Ответ 7

Почему бы не использовать pyvmomi оригинальная функция SmartConnectNoSSL. Они добавили эту функцию на June 14, 2016 и назвали ее ConnectNoSSL, через день после они изменили имя на SmartConnectNoSSL, используйте это, а не передавая предупреждение с ненужными строками кода в вашем проекте?

Предоставляет стандартный метод подключения к указанному серверу без SSL    проверка. Полезно при подключении к серверам с самозаверяющими сертификатами    или когда вы вообще хотите игнорировать SSL

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

Ответ 8

Для Python 2.7

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

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

Ответ 9

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

import warnings

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

Ответ 10

Решил проблему на моем MacBook:

pip install certifi

или

pip3 install certifi