Błąd SSL InsecurePlatform podczas korzystania z pakietu Żądania

237

Używam Python 2.7.3 i żądań. Zainstalowałem żądania przez pip. Wierzę, że to najnowsza wersja. Korzystam z Debian Wheezy.

W przeszłości używałem Żądań wiele razy i nigdy nie miałem do czynienia z tym problemem, ale wydaje się, że przy składaniu żądań https Requestsdostaję InsecurePlatformwyjątek.

Błąd wspomina urllib3, ale nie mam tego zainstalowanego. Zainstalowałem go, aby sprawdzić, czy to rozwiązało błąd, ale tak się nie stało.

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

Wszelkie pomysły, dlaczego to dostaję? Sprawdziłem dokumenty, jak określono w komunikacie o błędzie, ale dokumenty mówią, aby zaimportować urllib3 i albo wyłączyć ostrzeżenie, albo dostarczyć certyfikat.

Luke Peckham
źródło

Odpowiedzi:

390

Użyj nieco ukrytej funkcji bezpieczeństwa :

pip install requests[security] lub pip install pyOpenSSL ndg-httpsclient pyasn1

Oba polecenia instalują następujące dodatkowe pakiety:

  • pyOpenSSL
  • kryptografia
  • idna

Pamiętaj, że nie jest to wymagane w przypadku Python-2.7.9 + .

Jeśli pip installnie powiedzie się z błędami, sprawdź czy masz wymagane pakiety dla rozwoju libffi, libssla pythonzainstalowane w systemie za pomocą menedżera pakietów dystrybucyjnych za :

  • Debian / Ubuntu - python-dev libffi-dev libssl-devpakiety.

  • Fedora - openssl-devel python-devel libffi-develpakiety.

Powyższa lista dystrybucji jest niekompletna.

Obejście ( patrz oryginalna odpowiedź @TomDotTom ) :

Jeśli nie możesz zainstalować niektórych wymaganych pakietów programistycznych, istnieje również możliwość wyłączenia tego ostrzeżenia:

import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()

Jeśli na Ciebie pipwpływa InsecurePlatformWarningi nie może zainstalować niczego z PyPI, możesz to naprawić za pomocą tego przewodnika krok po kroku, aby ręcznie wdrożyć dodatkowe pakiety Pythona.

plaes
źródło
3
Mam żądania [bezpieczeństwo], nowy terminal, Python 2.7.3 i wciąż otrzymuję ten błąd
Josh Nankin
45
musisz także zainstalować dodatkowe biblioteki w systemie dla Ubuntu / Debian:sudo apt-get install python-dev libffi-dev libssl-dev
therealmarv
2
Czy to w porządku, że sam „pip” (patrząc od wersji 6.1) daje to samo ostrzeżenie bezpieczeństwa?
jmster
5
w zależności od powłoki może być konieczne wpisaniepip install 'requests[security]'
C. Reed
5
W Zshell musisz powiedzieć: Pip żądania instalacji \ [bezpieczeństwo \]
Amir Katz
68

Żądania 2.6 wprowadziły to ostrzeżenie dla użytkowników Pythona przed wersją 2.7.9 z dostępnymi tylko zapasowymi modułami SSL.

Zakładając, że nie możesz zaktualizować do nowszej wersji Pythona, spowoduje to zainstalowanie więcej aktualnych bibliotek SSL Pythona:

pip install --upgrade ndg-httpsclient 

JEDNAK może to zawieść w niektórych systemach bez zależności kompilacji dla pyOpenSSL. W systemach Debian uruchomienie tego polecenia przed poleceniem pip powyżej powinno wystarczyć do zbudowania pyOpenSSL:

apt-get install python-dev libffi-dev libssl-dev
Jessica Gadling
źródło
4
Musiałem także zainstalować te pakiety „python-dev libffi-dev libssl-dev” również dla Ubuntu 14.04.
Andy,
Dzięki! Dodałem notatkę do dokumentacji: github.com/shazow/urllib3/pull/765
Wolfgang
@Jessica FTW! Dzięki bardzo - to było denerwujące.
Neal Magee,
18

Nie używam tego w produkcji, tylko niektórzy testerzy. I aby powtórzyć dokumentację urllib3

Jeśli wiesz, co robisz i chcesz wyłączyć to i inne ostrzeżenia

import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()

Edycja / aktualizacja:

Powinny również działać:

import logging
import requests

# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)
TomDotTom
źródło
1
Problem z tym rozwiązaniem polega na tym, że po prostu tłumi i ignoruje rzeczywisty problem. Co więcej, to nie zadziała, gdy używasz pipa do instalowania lub aktualizacji pakietów.
Jason Parham,
1
Jedyne rozwiązanie, które działa dla mnie na Ubuntu 1404 / Python 2.7.6. Dzięki
Ignacio Vazquez
7

Jeśli nie możesz zaktualizować wersji Pythona do wersji 2.7.9 i chcesz ukryć ostrzeżenia,

możesz obniżyć wersję „żądań” do 2.5.3:

sudo pip install requests==2.5.3

Informacje o wersji: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html

rodzynki
źródło
8
Pamiętaj, że 2.5.3 ma problem z bezpieczeństwem obsługi plików cookie podczas przekierowań.
gra
2
Zamiast dwa razy opublikować tę odpowiedź, powinieneś oznaczyć drugi post jako duplikat. Teraz go tak zamknąłem.
Martijn Pieters
6
Drugiego komentarza nie obniżam ze względu na znaną podatność.
sergiopereira
7

W rzeczywistości możesz tego spróbować.

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

możesz przeczytać kod żądań.

"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.
    ...
    """
zzzz zzzz
źródło
2
Bądź bardzo ostrożny, ponieważ nie weryfikowanie certyfikatów może być niebezpieczne!
jaapz
Oczywiście, nie weryfikowanie certyfikatów będzie niebezpieczne. Ale czasami jest to ostateczność. Np .: easy_install, apt-get, yum or pip ... nie uruchamiaj się, lub zrób mały przeszukiwacz sieci ...
zzzz zzzz
1
Jestem na współużytkowanym środowisku hostingowym, więc nie mogę zaktualizować Pythona do wersji 2.7.9 i nie mogę zainstalować libffi.pc za pomocą apt-get, który jest wymagany przez żądania instalacji pip [bezpieczeństwo] i inne warianty instalacji pip powyżej. Więc ta odpowiedź była dla mnie skuteczna. Tak długo, jak rozumiesz ważne zastrzeżenie, że bez weryfikacji https zawartość strony może zostać zmieniona / sfałszowana, myślę, że ta odpowiedź jest w porządku.
Chirael
5

Wszystkie podane tutaj rozwiązania nie pomogły (jestem ograniczony do Pythona 2.6.6). Znalazłem odpowiedź w prostym przełączniku na pip:

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

Mówi to pipowi, że można pobrać moduł z pypi.python.org.

Dla mnie problemem jest serwer proxy mojej firmy za zaporą ogniową, który sprawia, że ​​wygląda na złośliwego klienta dla niektórych serwerów. Brawo ochrona.


Aktualizacja: Zobacz @Alex jest odpowiedzią na zmiany w domenach PyPI oraz dodatkowych --trusted-hostopcji, które mogą być dodawane. (Skopiowałem / wkleję tutaj, ale jego odpowiedź, więc daj mu +1)

PfunnyGuy
źródło
Mogę w końcu zainstalować tensorflow za pomocą tego polecenia, wielkie dzięki!
pedrobisp
3

Ta odpowiedź nie ma związku, ale jeśli chcesz pozbyć się ostrzeżenia i otrzymać następujące ostrzeżenie z żądań:

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.

Możesz go wyłączyć , dodając następujący wiersz do kodu Pythona:

requests.packages.urllib3.disable_warnings()

daemonsl
źródło
Dzięki za to. Żadna z pozostałych odpowiedzi nie działała dla mnie. Jestem zdumiony, że taka pełna irytująca wiadomość byłaby domyślnie umieszczona.
Dan
1

bashNajpierw musiałem iść do (z ZSH). Następnie

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

naprawiono problem.

Martin Thoma
źródło
Nie jestem pewny. Myślę, że wynika to z nawiasów
Martin Thoma
1

Stało się dla mnie na Ubuntu 14.04 (z Python 2.7.6) w zeszłym tygodniu po Zrobiłem apt-get dist-upgradeże zawarte libssl1.1:amd64zdeb.sury.org .

Ponieważ uciekam certbot-auto renewod zadania crona, używam również --no-self-upgradedo ograniczenia nieplanowanej konserwacji. To wydaje się być źródłem problemów.

Aby naprawić ten błąd, wszystko co potrzebne do zrobienia było roota (z su„s --loginswitch) i niech certbot-autosam się zaktualizować. To znaczy:

sudo su --login
/usr/local/bin/certbot-auto renew 
# ... Upgrading certbot-auto 0.8.1 to 0.18.2... blah blah blah ...

zamiast tego, co zwykle uruchamia się z crontab roota:

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

Następnie odnowienia letsencrypt ponownie przebiegały normalnie.

Dale Anderson
źródło
Mam ten sam opisany tutaj problem. ostrzeżenia: /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: Prawdziwy obiekt SSLContext jest niedostępny. Zapobiega to właściwemu konfigurowaniu protokołu SSL przez urllib3 i może powodować niepowodzenia niektórych połączeń SSL. Możesz zaktualizować do nowszej wersji Python, aby rozwiązać ten problem. Aby uzyskać więcej informacji, zobacz urllib3.readthedocs.io/en/latest/… . InsecurePlatformWarning Po prostu wpisuję polecenie: sudo apt-get dist-upgrade Błąd został naprawiony.
Didierh
0

Dla mnie bez pracy potrzebuję aktualizacji pip ....

Debian / Ubuntu

zainstalować zależności

sudo apt-get install libpython-dev libssl-dev libffi-dev

uaktualnij pip i zainstaluj pakiety

sudo pip install -U pip
sudo pip install -U pyopenssl ndg-httpsclient pyasn1

Jeśli chcesz usunąć zależności

sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
sudo apt-get autoremove
Thedemon007
źródło
0

Właśnie miałem podobny problem na serwerze CentOS 5, na którym zainstalowałem Python 2.7.12 w / usr / local na znacznie starszej wersji python2.7. Aktualizacja do CentOS 6 lub 7 nie jest obecnie opcją na tym serwerze.

Niektóre moduły Pythona 2.7 nadal istniały w starszej wersji Pythona, ale pip nie zaktualizował się, ponieważ nowszy pakiet kryptograficzny nie jest obsługiwany przez pakiety CentOS 5.

W szczególności „żądania instalacji pipem [bezpieczeństwo]” zawiodły, ponieważ wersja openssl na CentOS 5 miała 0.9.8e, która nie jest już obsługiwana przez kryptografię> 1.4.0.

Aby rozwiązać oryginalny problem PO:

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

Zainstalowana kryptografia 1.3.4, która działa z openssl-0.9.8e. cryptograpy 1.3.4 jest również wystarczające, aby spełnić wymaganie dla następującego polecenia.

2) pip install 'requests[security]'

To polecenie jest teraz instalowane, ponieważ nie próbuje zainstalować kryptografii> 1.4.0.

Pamiętaj, że w Centos 5 musiałem również:

yum install openssl-devel

Aby umożliwić tworzenie kryptografii

DavidG
źródło
0

Oto jak działa dla mnie w Pythonie 3.6:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()
Luiz Vaz
źródło
0

Nie instaluj pyOpenSSL, ponieważ wkrótce będzie przestarzałe. Obecne najlepsze podejście to

import requests
requests.packages.urllib3.disable_warnings()
Mohammad Shahid Siddiqui
źródło
0

jeśli chcesz po prostu zatrzymać niepewne ostrzeżenie, takie jak:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: Tworzone jest niezweryfikowane żądanie HTTPS. Zaleca się dodanie weryfikacji certyfikatu. Zobacz: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)

robić:

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

weryfikacja = fałsz

jest kluczem, następujące nie są w tym dobre:

requests.packages.urllib3.disable_warnings ()

lub

urllib3.disable_warnings ()

ale musisz wiedzieć, że może to powodować potencjalne zagrożenia bezpieczeństwa .

J Z
źródło
0

Miałem ten sam problem z
Mac
Pycharm Community Edition 2019.3
interpreter Pythona 3.6.
Uaktualnienie pipa do wersji 20.0.2 działało dla mnie.
Pycharm --> Preferences --> Project Interpreter --> click on pip --> specify version 20.0.2 --> Install package

GPopat
źródło