Ошибка 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()
но, вы должны знать, это может привести к потенциальным рискам безопасности.