Ошибка 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
, установленных в вашей системе , используя диспетчер пакетов рассылки:
Список рассылки выше неполный.
Обходной путь (см. исходный ответ @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)
Ответ 4
Если вы не можете обновить свою версию 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
Ответ 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 запускается нормально еще раз.