Errore SSL InsecurePlatform durante l'utilizzo del pacchetto Requests


237

Sto usando Python 2.7.3 e richieste. Ho installato richieste tramite pip. Credo che sia l'ultima versione. Sto correndo su Debian Wheezy.

Ho usato Requests molte volte in passato e non ho mai affrontato questo problema, ma sembra che quando Requestsfaccio richieste https ottengo InsecurePlatformun'eccezione.

L'errore menziona urllib3, ma non l'ho installato. L'ho installato per verificare se ha risolto l'errore, ma non lo ha fatto.

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

Qualche idea sul perché sto ricevendo questo? Ho controllato i documenti, come specificato nel messaggio di errore, ma i documenti dicono di importare urllib3 e disabilitare l'avviso o fornire un certificato.

Risposte:


390

Usa la funzione di sicurezza un po 'nascosta :

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

Entrambi i comandi installano i seguenti pacchetti extra:

  • pyOpenSSL
  • crittografia
  • idna

Si noti che questo non è necessario per Python-2.7.9 + .

Se pip installfallisce con errori, controllare se è stato necessario pacchetti di sviluppo per libffi, libssle pythoninstallato nel vostro sistema utilizzando gestore di pacchetti di distribuzione :

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

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

L'elenco Distro sopra è incompleto.

Soluzione alternativa ( vedere la risposta originale di @TomDotTom ) :

Nel caso in cui non sia possibile installare alcuni dei pacchetti di sviluppo richiesti, esiste anche un'opzione per disabilitare tale avviso:

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

Se il tuo pipstesso è interessato InsecurePlatformWarninge non può installare nulla da PyPI, può essere risolto con questa guida passo-passo per distribuire manualmente pacchetti python extra.


3
Ho richieste [sicurezza], nuovo terminale, Python 2.7.3 e continuo a ricevere questo errore
Josh Nankin

45
è inoltre necessario installare librerie aggiuntive sul sistema per Ubuntu / Debian:sudo apt-get install python-dev libffi-dev libssl-dev
therealmarv

2
Va bene che "pip" stesso (partendo dalla v6.1) dà lo stesso avviso di sicurezza?
jmster,

5
a seconda della shell, potrebbe essere necessario digitarepip install 'requests[security]'
C. Reed,

5
in zshell, devi dire: pip install request \ [security \]
Amir Katz

68

Le richieste 2.6 hanno introdotto questo avviso per gli utenti di Python precedenti alla 2.7.9 con solo i moduli SSL disponibili.

Supponendo che non sia possibile eseguire l'aggiornamento a una versione più recente di Python, verranno installate librerie SSL Python più aggiornate:

pip install --upgrade ndg-httpsclient 

TUTTAVIA, ciò potrebbe non riuscire su alcuni sistemi senza le dipendenze di build per pyOpenSSL. Sui sistemi debian, eseguirlo prima del comando pip sopra dovrebbe essere sufficiente per pyOpenSSL per compilare:

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

4
Avevo bisogno di installare questi pacchetti 'python-dev libffi-dev libssl-dev' anche per Ubuntu 14.04.
Andy,

Grazie! Ho aggiunto una nota alla documentazione: github.com/shazow/urllib3/pull/765
Wolfgang

@Jessica FTW! Grazie mille - questo è stato fastidioso.
Neal Magee,

18

Non lo uso in produzione, solo alcuni testisti. E per ribadire la documentazione di urllib3

Se sai cosa stai facendo e desideri disabilitare questo e altri avvisi

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

Modifica / Aggiorna:

Inoltre dovrebbe funzionare:

import logging
import requests

# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)

1
Il problema con questa soluzione è che semplicemente elimina e ignora il problema reale. Inoltre, questo non funzionerà quando si utilizza pip per installare o aggiornare i pacchetti.
Jason Parham,

1
L'unica soluzione che funziona per me su Ubuntu 1404 / Python 2.7.6. Grazie
Ignacio Vazquez,

7

Se non riesci ad aggiornare la tua versione di Python alla 2.7.9 e desideri eliminare gli avvisi,

puoi effettuare il downgrade della tua versione "richieste" alla 2.5.3:

sudo pip install requests==2.5.3

Informazioni sulla versione: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html


8
Si noti che 2.5.3 presenta problemi di sicurezza con la gestione dei cookie durante i reindirizzamenti.
plaes

2
Invece di pubblicare questa risposta due volte, dovresti aver contrassegnato l'altro post come duplicato. L'ho chiuso come tale.
Martijn Pieters

6
Secondo il commento per non effettuare il downgrade a causa della vulnerabilità nota.
sergiopereira,

7

In effetti, puoi provare questo.

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

puoi leggere il codice per le richieste.

"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
Fai molta attenzione, non verificare che i certificati possano essere pericolosi!
Jaapz,

Naturalmente, non verificare i certificati sarà pericoloso. Ma a volte, questa è l'ultima risorsa. Es: easy_install, apt-get, yum o pip ... non eseguito, o esegui un piccolo Web Crawler ...
zzzz zzzz,

1
Sono su un ambiente di hosting condiviso, quindi non posso aggiornare Python alla 2.7.9 e non posso installare libffi.pc con apt-get, che è richiesto dalle richieste di installazione pip [sicurezza] e dalle altre varianti di installazione pip sopra. Quindi questa risposta è stata quella che ha funzionato per me. Finché capisci l'importante avvertimento che senza la verifica https il contenuto della pagina potrebbe essere modificato / falsificato, penso che questa risposta vada bene.
Chirael,

5

Tutte le soluzioni fornite qui non hanno aiutato (sono vincolato a Python 2.6.6). Ho trovato la risposta in un semplice passaggio per passare a pip:

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

Questo dice a pip che è OK prendere il modulo da pypi.python.org.

Per me, il problema è il proxy della mia azienda dietro al firewall che lo fa sembrare un client dannoso per alcuni server. Evviva sicurezza.


Aggiornamento: vedi la risposta di @Alex per le modifiche nei domini PyPi e le --trusted-hostopzioni aggiuntive che possono essere aggiunte. (Vorrei copiare / incollare qui, ma la sua risposta, quindi +1 a lui)


Potrei finalmente installare tensorflow usando questo comando, grazie mille!
pedrobisp

3

Questa risposta non è correlata, ma se si desidera eliminare l'avviso e ottenere il seguente avviso dalle richieste:

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.

Puoi disabilitarlo aggiungendo la seguente riga al tuo codice Python:

requests.packages.urllib3.disable_warnings()


Grazie per questo. Nessuna delle altre risposte ha funzionato per me. Sono sorpreso dal fatto che un messaggio così prolisso e fastidioso venga inserito per impostazione predefinita.
Dan

1

bashPrima dovevo andare (da ZSH). Poi

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

risolto il problema.


Non ne sono sicuro. Penso che sia dovuto alle parentesi
Martin Thoma,

1

Questo mi è venuto in mente su Ubuntu 14.04 (con Python 2.7.6) la scorsa settimana dopo che ho fatto una apt-get dist-upgradecosa inclusa libssl1.1:amd64da deb.sury.org.

Poiché certbot-auto reneweseguo un lavoro cron, utilizzo anche il --no-self-upgradecomando per ridurre la manutenzione non programmata. Questa sembra essere stata la fonte del problema.

Per correggere l'errore, tutto quello che dovevo fare era diventare root (con sul'opzione 's' --login) e lasciarlo certbot-autoaggiornare. Vale a dire:

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

invece di ciò che normalmente viene eseguito dal crontab di root:

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

Dopodiché, letencrypt renwals funzionava normalmente ancora una volta.


Ho avuto lo stesso problema descritto qui. avvertenze: /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: un vero oggetto SSLContext non è disponibile. Ciò impedisce a urllib3 di configurare SSL in modo appropriato e potrebbe causare il fallimento di alcune connessioni SSL. È possibile eseguire l'aggiornamento a una versione più recente di Python per risolvere questo problema. Per ulteriori informazioni, consultare urllib3.readthedocs.io/en/latest/… . InsecurePlatformWarning Ho appena digitato il comando: sudo apt-get dist-upgrade L'errore è stato corretto.
Didierh

0

Per me nessun lavoro, ho bisogno di aggiornare pip ....

Debian / Ubuntu

installare dipendenze

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

aggiorna pip e installa i pacchetti

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

Se si desidera rimuovere le dipendenze

sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
sudo apt-get autoremove

0

Ho appena avuto un problema simile su un server CentOS 5 in cui ho installato python 2.7.12 in / usr / local su una versione molto più vecchia di python2.7. L'aggiornamento a CentOS 6 o 7 non è un'opzione su questo server al momento.

Alcuni dei moduli di Python 2.7 esistevano ancora dalla versione precedente di Python, ma pip non riusciva ad aggiornarsi perché il pacchetto di crittografia più recente non è supportato dai pacchetti CentOS 5.

In particolare, "pip install request [security]" non funzionava perché la versione di openssl su CentOS 5 era 0.9.8e che non è più supportata dalla crittografia> 1.4.0.

Per risolvere il problema originale dei PO ho fatto:

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

Questa crittografia installata 1.3.4 funziona con openssl-0.9.8e. cryptograpy 1.3.4 è anche sufficiente per soddisfare il requisito per il seguente comando.

2) pip install 'requests[security]'

Questo comando ora viene installato perché non tenta di installare la crittografia> 1.4.0.

Nota che su Centos 5 avevo anche bisogno di:

yum install openssl-devel

Per consentire la crittografia da costruire


0

Di seguito è come funziona per me su Python 3.6:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()

0

Non installare pyOpenSSL in quanto sarà presto obsoleto. L'approccio migliore attuale è-

import requests
requests.packages.urllib3.disable_warnings()

0

se desideri semplicemente interrompere un avviso non sicuro come:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: richiesta HTTPS non verificata. Si consiglia vivamente di aggiungere la verifica del certificato. Vedi: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)

fare:

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

verificare = False

è la chiave, i seguenti non sono bravi a farlo:

requests.packages.urllib3.disable_warnings ()

o

urllib3.disable_warnings ()

ma, DEVI sapere, ciò potrebbe causare potenziali rischi per la sicurezza .


0

Ho avuto lo stesso problema con
Mac
Pycharm Community Edition 2019.3
interprete Python 3.6.
L'aggiornamento di pip con 20.0.2 ha funzionato per me.
Pycharm --> Preferences --> Project Interpreter --> click on pip --> specify version 20.0.2 --> Install package

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.