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


237

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

Ответы:


390

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

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()

Если на вас pipвлияет InsecurePlatformWarningи не удается что-либо установить из PyPI, это можно исправить с помощью этого пошагового руководства по развертыванию дополнительных пакетов Python вручную.


3
У меня есть запросы [безопасность], новый терминал, Python 2.7.3 и все еще получаю эту ошибку
Джош Нанкин

45
Вам также необходимо установить дополнительные библиотеки в системе для Ubuntu / Debian:sudo apt-get install python-dev libffi-dev libssl-dev
therealmarv

2
Это нормально, что сам pip (начиная с v6.1) выдает то же самое предупреждение безопасности?
jmster

5
в зависимости от вашей оболочки, вам может потребоваться набратьpip install 'requests[security]'
C. Рид

5
в zshell нужно сказать: запросы на установку pip \ [security \]
Амир Кац

68

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

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

pip install --upgrade ndg-httpsclient 

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

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

4
Мне нужно было установить эти пакеты 'python-dev libffi-dev libssl-dev' для Ubuntu 14.04.
Энди

Спасибо! Я добавил примечание к документации: github.com/shazow/urllib3/pull/765
Вольфганг

@ Джессика FTW! Большое спасибо - это раздражало.
Нил Маги,

18

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

1
Проблема с этим решением состоит в том, что оно просто подавляет и игнорирует реальную проблему. Кроме того, это не будет работать при использовании pip для установки или обновления пакетов.
Джейсон Пархам

1
Единственное решение, которое работает для меня на Ubuntu 1404 / Python 2.7.6. Спасибо
Игнасио Васкес

7

Если вы не можете обновить версию 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


8
Обратите внимание, что 2.5.3 имеет проблему безопасности при обработке файлов cookie во время перенаправлений.
Plaes

2
Вместо того, чтобы публиковать этот ответ дважды, вы должны были пометить другой пост как дубликат. Я теперь закрыл это как таковой.
Мартин Питерс

6
Я второй комментарий, чтобы не понижать версию из-за известной уязвимости.
sergiopereira

7

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

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

2
Будьте очень осторожны, не проверяя сертификаты, это может быть опасно!
Яапз

Конечно, не проверять сертификаты будет опасно. Но иногда это последнее средство. Пример: easy_install, apt-get, yum или pip ... не запускается, или немного веб-сканера ...
zzzz zzzz

1
Я нахожусь в среде общего хостинга, поэтому я не могу обновить python до 2.7.9 и не могу установить libffi.pc с помощью apt-get, что требуется для запросов установки pip [security] и других вариантов установки pip выше. Таким образом, этот ответ был тем, который работал для меня. До тех пор, пока вы понимаете важное предупреждение о том, что без проверки https содержимое страницы может быть изменено / подделано, я думаю, что этот ответ в порядке.
Чираэль

5

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

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

Это говорит pip, что все в порядке, чтобы получить модуль от pypi.python.org.

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


Обновление: см. Ответ @Alex об изменениях в доменах PyPi и дополнительных --trusted-hostвозможностях, которые можно добавить. (Я бы скопировал / вставил сюда, но его ответ, так что +1 его)


Наконец-то я смог установить tenorflow с помощью этой команды, большое спасибо!
pedrobisp

3

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

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()


Спасибо за это. Ни один из других ответов не работал для меня. Я поражен, что такое многословное раздражающее сообщение будет вставлено по умолчанию.
Дан

1

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

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

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


Я не уверен. Я думаю, что это из-за скобок
Мартин Тома

1

Это стало для меня на 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 (с ключом sus --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 снова проходили нормально.


Я получил ту же проблему, описанную здесь. предупреждения: /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: настоящий объект SSLContext недоступен. Это предотвращает правильную настройку SSL в urllib3 и может привести к сбою некоторых соединений SSL. Вы можете перейти на более новую версию Python, чтобы решить эту проблему. Для получения дополнительной информации см. Urllib3.readthedocs.io/en/latest/… . InsecurePlatformWarning Я просто набираю команду: sudo apt-get dist-upgrade Ошибка была исправлена.
Дидье

0

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

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

0

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

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

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

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

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

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

2) pip install 'requests[security]'

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

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

yum install openssl-devel

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


0

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

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()


0

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

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

делать:

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

проверить = False

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

requests.packages.urllib3.disable_warnings ()

или

urllib3.disable_warnings ()

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


0

У меня была такая же проблема с
Mac
Pycharm Community Edition 2019.3
Python интерпретатор 3.6.
Обновление пипа с 20.0.2 у меня сработало.
Pycharm --> Preferences --> Project Interpreter --> click on pip --> specify version 20.0.2 --> Install package

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.