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

695   14  

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

    Ничего не найдено.