python requests - Errore SSL InsecurePlatform quando si utilizza il pacchetto Richieste




session disable (13)

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

Ho usato molte Richieste in passato e non ho mai dovuto affrontare questo problema, ma sembra che quando si effettuano richieste https con Requests ottengo un'eccezione InsecurePlatform .

L'errore menziona urllib3 , ma non l'ho installato. L'ho installato per verificare se ha risolto l'errore, ma non l'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 motivo per cui sto ricevendo questo? Ho controllato i documenti, come specificato nel messaggio di errore, ma i documenti stanno dicendo di importare urllib3 e disabilitare l'avviso o fornire un certificato.


Answers

se vuoi solo fermare l'avvertimento insicuro come:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: la richiesta HTTPS non verificata è in corso. L'aggiunta della verifica del certificato è fortemente consigliata. 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 buoni a questo:

requests.packages.urllib3.disable_warnings ()

o

urllib3.disable_warnings ()

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


Non lo uso in produzione, solo alcuni test runner. E per reiterare la documentazione di urllib3

Se sai cosa stai facendo e vorresti disabilitare questo e altri avvertimenti

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

Modifica / Aggiornamento:

Il seguente dovrebbe funzionare anche:

import logging
import requests

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

Non installare pyOpenSSL poiché sarà presto deprecato. L'approccio migliore attualmente è-

import requests
requests.packages.urllib3.disable_warnings()

Prima dovevo andare a bash (da ZSH). Poi

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

risolto il problema


Di seguito è riportato come funziona per me su Python 3.6:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()

Tutte le soluzioni fornite qui non hanno aiutato (sono limitato 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 suo firewall che lo fa sembrare un client malevolo per alcuni server. Hooray sicurezza.


Mi è venuto in mente su Ubuntu 14.04 (con Python 2.7.6) la settimana scorsa, dopo aver fatto un apt-get dist-upgrade che includeva libssl1.1:amd64 da deb.sury.org .

Da quando certbot-auto renew da un cron job, uso anche --no-self-upgrade 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 il --login su - --login ) e consentire a certbot-auto aggiornarsi. 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 da crontab di root:

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

Dopodiché, letencrypt renwals ha funzionato normalmente ancora una volta.



Usa la funzionalità di sicurezza un po 'nascosta:

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

Entrambi i comandi installano i seguenti pacchetti aggiuntivi:

  • pyOpenSSL
  • crittografia
  • idna

Si noti che questo non è richiesto per python-2.7.9+ .

Se l' pip install fallisce con errori, controlla se sono stati richiesti pacchetti di sviluppo per libffi , libssl e python installati nel tuo sistema usando il gestore pacchetti della distribuzione :

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

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

L'elenco di Distro sopra è incompleto.

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

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

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

Le richieste 2.6 hanno introdotto questo avviso per gli utenti di python precedenti alla 2.7.9 con solo i moduli SSL stock 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, questo può fallire su alcuni sistemi senza le dipendenze di build per pyOpenSSL. Sui sistemi debian, eseguirlo prima del comando pip precedente dovrebbe essere sufficiente per pyOpenSSL da compilare:

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

Per me nessun lavoro ho bisogno di aggiornamento pip ....

Debian / Ubuntu

installare le 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 vuoi rimuovere le dipendenze

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

In effetti, puoi provarlo.

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

prima installa la libreria

 pip install flask_sqlalchemy 

dopo di che

 from flask_sqlalchemy import SQLAlchemy 

inserisci questo nel file app.py per ottenere l'accesso al database tramite SQLAlchemy





python ssl python-requests