Ошибка 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-devlibffi-devlibssl-devпакеты.Fedora -
openssl-develpython-devellibffi-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 documentation
Если вы знаете, что вы делаете, и хотели бы отключить это и другие предупреждения
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>Это говорит Пип, что это нормально, чтобы захватить модуль из 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.Вы можете отключить это путем добавления следующей строки в ваш код python:
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 ()
но, вы должны знать, это может привести к потенциальным угрозам безопасности.
Comments