Помилка SSL InsecurePlatform під час використання пакету Requests


237

Я використовую Python 2.7.3 та Requests. Я встановив Запити через 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
  • криптографія
  • ідна

Зверніть увагу, що для 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
Чи добре, що сам "піп" (починаючи з v6.1) дає таке ж попередження про безпеку?
jmster

5
залежно від вашої оболонки, можливо, вам потрібно буде набратиpip install 'requests[security]'
C. Рід,

5
в zshell, вам потрібно сказати: запити на встановлення файлів \ [безпека \]
Амір Кац

68

Запити 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

4
Мені потрібно було встановити ці пакети 'python-dev libffi-dev libssl-dev' також для ubuntu 14.04.
Енді

Дякую! Я додав примітку до документації: github.com/shazow/urllib3/pull/765
Вольфганг

@Jessica 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 під час переадресації.
плити

2
Замість того, щоб опублікувати цю відповідь двічі, ви повинні позначити іншу публікацію як дублікат. Зараз я закрив її як таку.
Martijn Pieters

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
Будьте дуже обережні, роблячи це, не перевіряючи цертки, може бути небезпечно!
jaapz

Звичайно, не перевірити сертифікати буде небезпечно. Але іноді це в крайньому випадку. Напр .: easy_install, apt-get, yum або pip ... не
бігайте

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

5

Усі наведені тут рішення не допомогли (я обмежений python 2.6.6). Я знайшов відповідь у простому перемиканні, щоб перейти на піп:

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

Це повідомляє pip, що нормально захопити модуль з pypi.python.org.

Для мене проблема полягає в тому, що проксі-сервер моєї компанії стоїть за її брандмауером, завдяки чому він виглядає як злісний клієнт деяких серверів. Охорона безпеки.


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


Нарешті я міг встановити tensorflow за допомогою цієї команди, велике спасибі!
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()


Дякую за це Жодна з інших відповідей не працювала на мене. Мене роздуває, що таке багатослівне дратівливе повідомлення буде розміщене за замовчуванням.
Dan

1

Мені довелося їхати спочатку bash(із ЗШ). Тоді

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з роботи з крон, я також використовую --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 ...

замість того, що, як правило, працює з кронт-коду кореня:

5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade

Після цього ліцензорні скази пройшли нормально ще раз.


Я опинив ту саму проблему, яку описав тут. попередження: /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: Справжній об’єкт SSLContext недоступний. Це не дозволяє urllib3 настроїти SSL належним чином і може призвести до відмови деяких з’єднань 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.

Зокрема, "запити на встановлення піп [безпека]" не вдалося, оскільки версія opensl у 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)

verify = Неправдиво

є ключовим, наступні в ньому непогані:

request.packages.urllib3.disable_warnings ()

або

urllib3.disable_warnings ()

але, ВИ ХОЧЕТЕ знати, що може спричинити потенційні ризики для безпеки .


0

У мене була така ж проблема з
Mac
Pycharm спільнотою видання 2019.3
Python interpreter 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.