Ошибка SSL InsecurePlatform при использовании пакета запросов

Im, использующий Python 2.7.3 и запросы. Я установил запросы через pip. Я считаю, что это последняя версия. Я работаю на Debian Wheezy.

Я использовал запросы много раз в прошлом и никогда не сталкивался с этой проблемой, но кажется, что при создании https-запросов с Requests я получаю исключение InsecurePlatform.

Ошибка упоминается urllib3, но у меня ее нет. Я установил его, чтобы проверить, разрешила ли он ошибку, но это не так.

/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3
/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not
available. This prevents urllib3 from configuring SSL appropriately and 
may cause certain SSL connections to fail. For more information, see 
https://urllib3.readthedocs.org/en/latest  
/security.html#insecureplatformwarning.

Любые идеи относительно того, почему я получаю это? Я проверил документы, как указано в сообщении об ошибке, но документы говорят об импорте urllib3, либо отключить предупреждение, либо предоставить сертификат.

Ответ 1

Используйте несколько скрытую безопасность:

pip install 'requests[security]' или pip install pyOpenSSL ndg-httpsclient pyasn1

Обе команды устанавливают следующие дополнительные пакеты:

  • pyOpenSSL
  • криптография
  • IDNA

Обратите внимание, что это не требуется для python-2.7.9 +.

Если pip install выходит из строя с ошибками, проверьте, есть ли у вас необходимые пакеты разработки для libffi, libssl и python, установленных в вашей системе , используя диспетчер пакетов рассылки:

  • Debian/ Ubuntu - python-dev libffi-dev libssl-dev.

  • Fedora - openssl-devel python-devel libffi-devel.

Список рассылки выше неполный.

Обходной путь (см. исходный ответ @TomDotTom) :

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

import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()

Ответ 2

Запросы 2.6 представили это предупреждение для пользователей python до версии 2.7.9 с доступными только доступными SSL-модулями.

Предполагая, что вы не можете перейти на более новую версию python, это установит более современные библиотеки SSL python:

pip install --upgrade ndg-httpsclient 

HOWEVER, это может быть неудачным на некоторых системах без зависимостей сборки для pyOpenSSL. В дебианских системах выполнение этого перед командой pip выше должно быть достаточным для создания pyOpenSSL:

apt-get install python-dev libffi-dev libssl-dev

Ответ 3

Я не использую это в производстве, просто некоторые тестовые ролики. И повторить документацию urllib3

Если вы знаете, что делаете, и хотели бы отключить это и другие предупреждения

import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()

Изменить/Обновить:

Также должно работать следующее:

import logging
import requests

# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)

Ответ 5

На самом деле вы можете попробовать это.

requests.post("https://www.google.com", verify=False)

вы можете прочитать код для запросов.

"C:\Python27\Lib\site-packages\requests\sessions.py"

class Session(SessionRedirectMixin):
......
 def request(self, method, url,
    params=None,
    data=None,
    headers=None,
    cookies=None,
    files=None,
    auth=None,
    timeout=None,
    allow_redirects=True,
    proxies=None,
    hooks=None,
    stream=None,
    verify=None,  # <========
    cert=None):
    """
    ...
    :param verify: (optional) if True, the SSL cert will be verified.
         A CA_BUNDLE path can also be provided.
    ...
    """

Ответ 6

Все приведенные здесь решения не помогли (я ограничен python 2.6.6). Я нашел ответ в простом переключателе, чтобы перейти к pip:

$ sudo pip install --trusted-host pypi.python.org <module_name>

Это говорит pip, что ОК, чтобы захватить модуль с pypi.python.org.

Для меня проблема заключается в прокси-сервере моей компании за брандмауэром, который делает его похожим на вредоносный клиент на некоторые серверы. Охрана ура.

Ответ 7

Этот ответ не связан, но если вы хотите избавиться от предупреждения и получить следующее предупреждение от запросов:

InsecurePlatformWarning /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

Вы можете отключить, добавив следующую строку в код python:

requests.packages.urllib3.disable_warnings()

Ответ 8

Мне пришлось сначала перейти на bash (от ZSH). Тогда

sudo -H pip install 'requests[security]' --upgrade

исправлена ​​проблема.

Ответ 9

Для меня нет работы, мне нужно апгрейд обновления....

Debian/Ubuntu

установить зависимости

sudo apt-get install libpython-dev libssl-dev libffi-dev

Обновить пакет и установить пакеты

sudo pip install -U pip
sudo pip install -U pyopenssl ndg-httpsclient pyasn1

Если вы хотите удалить зависимости

sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
sudo apt-get autoremove

Ответ 10

У меня была аналогичная проблема на сервере CentOS 5, где я установил python 2.7.12 в /usr/local поверх более старой версии python2.7. Обновление до CentOS 6 или 7 сейчас не является вариантом на этом сервере.

Некоторые из модулей python 2.7 все еще существовали из старой версии python, но pip не смог обновиться, потому что новый пакет криптографии не поддерживается пакетами CentOS 5.

В частности, "pip install requests [security]" не срабатывал, потому что версия openssl на CentOS 5 была 0.9.8e, которая больше не поддерживается криптографией > 1.4.0.

Чтобы решить исходную проблему OPs, я сделал:

1) pip install 'cryptography<1.3.5,>1.3.0'.  

Эта установленная криптография 1.3.4, которая работает с openssl-0.9.8e. cryptograpy 1.3.4 также достаточна для выполнения требования для следующей команды.

2) pip install 'requests[security]'

Теперь эта команда устанавливается, поскольку она не пытается установить криптографию > 1.4.0.

Обратите внимание, что на Centos 5 мне также необходимо:

yum install openssl-devel

Чтобы разрешить создание криптографии

Ответ 11

Ниже приведен пример того, как он работает для меня на Python 3.6:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()

Ответ 12

Не устанавливайте pyOpenSSL, поскольку он скоро будет устаревшим. Самый лучший подход -

import requests
requests.packages.urllib3.disable_warnings()

Ответ 13

Это появилось для меня на Ubuntu 14.04 (с Python 2.7.6) на прошлой неделе после того, как я сделал apt-get dist-upgrade, который включал libssl1.1:amd64 из deb.sury.org.

Так как я запускаю certbot-auto renew из задания cron, я также использую --no-self-upgrade для сокращения незапланированного обслуживания. Кажется, это было источником неприятностей.

Чтобы исправить ошибку, все, что мне нужно было сделать, это стать root (с помощью su --login switch) и позволить certbot-auto самому обновить. I.e:

sudo su --login
/usr/local/bin/certbot-auto renew 
# ... Upgrading certbot-auto 0.8.1 to 0.18.2... blah blah blah ...

вместо того, что обычно выполняется от root crontab:

5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade

После этого letencrypt renwals запускается нормально еще раз.