Ошибка 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 и либо отключить предупреждение, либо предоставить сертификат.

14 ответов


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

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

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

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

обратите внимание, что это не обязательно для 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.6 ввели это предупреждение для пользователей python до 2.7.9 с доступными только запасными модулями SSL.

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

pip install --upgrade ndg-httpsclient 

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

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

Я не использую это в производстве, просто некоторые тестовые бегуны. И повторить документация 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)

Если вы не удалось обновить ваша версия Python до 2.7.9 и хотите подавить предупреждения,

вы можете понизить свои 'запросы' версия 2.5.3:

sudo pip install requests==2.5.3

о версии: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html


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

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.
    ...
    """

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

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

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

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


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

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.

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

requests.packages.urllib3.disable_warnings()


Я должен был пойти в bash (от ZSH) сначала. Тогда

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

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


для меня нет работы, мне нужно обновить пункт....

Debian / Ubuntu

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

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

обновление pip и установка пакетов

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

у меня просто была аналогичная проблема на сервере 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.8 e, которая больше не поддерживается криптографией > 1.4.0.

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

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

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

2) pip install 'requests[security]'

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

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

yum install openssl-devel

разрешить криптографии строить


ниже, как это работает для меня на Python 3.6:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()

Не устанавливайте pyOpenSSL, так как он скоро устареет. В настоящее время лучший подход-

import requests
requests.packages.urllib3.disable_warnings()

это придумали для меня на 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 ' s --login переключатель) и пусть certbot-auto обновить себя. Т. е.:

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

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

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

после этого letsencrypt renwals снова работал нормально.


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

/ usr/lib/python3/dist-packages/urllib3 / connectionpool.py: 794: InsecureRequestWarning: выполняется непроверенный запрос HTTPS. Добавление настоятельно рекомендуется проверить сертификат. Видеть: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)

do:

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

verify=False

ключ, последователи не очень хороши в этом:

запросы.пакеты.urllib3.disable_warnings()

или

urllib3.disable_warnings()

но, вы должны знать, это может привести к потенциальным рискам безопасности.