it-swarm.com.de

SSL InsecurePlatform-Fehler bei Verwendung des Requests-Pakets

Ich benutze Python 2.7.3 und Requests. Ich habe Requests via pip installiert. Ich glaube es ist die neueste Version. Ich bin mit Debian Wheezy unterwegs.

Ich habe Anfragen in der Vergangenheit schon oft verwendet und bin nie mit diesem Problem konfrontiert worden, aber es scheint, als wenn ich https-Anfragen mit Requests mache, bekomme ich eine InsecurePlatform-Ausnahme.

Der Fehler erwähnt urllib3, aber ich habe das nicht installiert. Ich habe es installiert, um zu überprüfen, ob es den Fehler behoben hat, aber es hat nicht funktioniert.

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

Irgendwelche Ideen, warum ich das bekomme? Ich habe die Dokumente in der Fehlermeldung geprüft, aber die Dokumente sagen, dass sie urllib3 importieren und entweder die Warnung deaktivieren oder ein Zertifikat bereitstellen.

229
Luke Peckham

Verwenden Sie die etwas versteckte Sicherheitsfunktion :

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

Beide Befehle installieren die folgenden zusätzlichen Pakete:

  • pyOpenSSL
  • kryptographie
  • idna

Bitte beachten Sie, dass dies für Python-2.7.9 + nicht erforderlich ist.

Wenn pip install Mit Fehlern fehlschlägt, überprüfen Sie, ob Sie Entwicklungspakete für libffi, libssl und python benötigt haben, die auf Ihrem System installiert sind mit dem Paketmanager der Distribution :

  • Debian / Ubuntu - python-devlibffi-devlibssl-dev Pakete.

  • Fedora - openssl-develpython-devellibffi-devel - Pakete.

Die obige Distro-Liste ist unvollständig.

Workaround ( siehe die ursprüngliche Antwort von @TomDotTom ) :

Falls Sie einige der erforderlichen Entwicklungspakete nicht installieren können, können Sie diese Warnung auch deaktivieren:

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

Wenn Ihr pip selbst von InsecurePlatformWarning betroffen ist und nichts von PyPI installieren kann, kann dies mit dieser schrittweisen Anleitung behoben werden stellen Sie zusätzliche python Pakete manuell bereit.

385
plaes

Mit Anfragen 2.6 wurde diese Warnung für Benutzer von Python vor 2.7.9 eingeführt, wobei nur Standard-SSL-Module verfügbar waren.

Vorausgesetzt, Sie können kein Upgrade auf eine neuere Version von Python durchführen, werden aktuellere Python-SSL-Bibliotheken installiert:

pip install --upgrade ndg-httpsclient 

Dies kann jedoch auf einigen Systemen ohne die Build-Abhängigkeiten für pyOpenSSL fehlschlagen. Auf Debian-Systemen sollte dies vor dem obigen pip-Befehl ausgeführt werden, damit pyOpenSSL Folgendes erstellen kann:

apt-get install python-dev libffi-dev libssl-dev
67
Jessica Gadling

Ich verwende das nicht in der Produktion, sondern nur einige Testläufer. Und um die urllib3-Dokumentation zu wiederholen

Wenn Sie wissen, was Sie tun, und dies und .__ deaktivieren möchten. andere Warnungen

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

Bearbeiten/Aktualisieren:

Folgendes sollte auch funktionieren:

import logging
import requests

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

Wenn Sie nicht in der Lage sind, ein Upgrade durchzuführen Ihre Python-Version auf 2.7.9, und Warnungen unterdrücken möchten, 

sie können Ihre "Anforderungen"-Version auf 2.5.3 downgraden:

Sudo pip install requests==2.5.3

Über Version: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html

7
raittes

In der Tat können Sie dies versuchen.

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

sie können den Code für Anfragen lesen.

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

Alle hier aufgeführten Lösungen haben nicht geholfen (Python 2.6.6). Ich habe die Antwort in einem einfachen Schalter gefunden, um an pip weiterzuleiten:

$ Sudo pip install --trusted-Host pypi.python.org <module_name>

Dies teilt Pip mit, dass es in Ordnung ist, das Modul von pypi.python.org zu beziehen.

Für mich ist das Problem der Proxy meines Unternehmens hinter seiner Firewall, die es für einige Server wie einen bösartigen Client aussehen lässt. Hurra-Sicherheit. 

5
PfunnyGuy

Diese Antwort hat nichts mit der Frage zu tun, aber wenn Sie Warnung entfernen und folgende Warnung von Anfragen erhalten möchten:

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.

Sie können es deaktivieren indem Sie die folgende Zeile zu Ihrem python code hinzufügen:

requests.packages.urllib3.disable_warnings()

3
daemonsl

Ich musste zuerst zu bash (von ZSH) gehen. Dann

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

das Problem behoben.

1
Martin Thoma

wenn Sie nur unsichere Warnungen stoppen möchten, wie:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: Es wird eine nicht überprüfte HTTPS-Anforderung ausgeführt. Hinzufügen von Die Zertifikatsüberprüfung wird dringend empfohlen. Sehen: https://urllib3.readthedocs.org/de/latest/security.html UnsichereAnfrageWarnung)

tun:

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

verify = False

ist der Schlüssel, die Folgen sind nicht gut:

request.packages.urllib3.disable_warnings ()

oder

urllib3.disable_warnings ()

sie MÜSSEN jedoch wissen, dass potenzielle Sicherheitsrisiken entstehen können.

0
J.Z

Installieren Sie pyOpenSSL nicht, da es bald veraltet sein wird. Der derzeit beste Ansatz ist

import requests
requests.packages.urllib3.disable_warnings()

Dies erschien mir auf Ubuntu 14.04 (mit Python 2.7.6) letzte Woche, nachdem ich einen apt-get dist-upgrade gemacht hatte, der libssl1.1:AMD64 von deb.sury.org enthielt. 

Da ich certbot-auto renew von einem cron-Job aus ausführen kann, verwende ich --no-self-upgrade, um ungeplante Wartungsarbeiten zu reduzieren. Dies scheint die Ursache des Problems gewesen zu sein. 

Um den Fehler zu beheben, musste ich nur root werden (mit sus --login-Schalter) und certbot-auto selbst aktualisieren lassen. I.e: 

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

anstelle dessen, was normalerweise von der Crontab-Wurzel ausgeht: 

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

Danach liefen Letsencrypt-Renwals wieder normal.

0
Dale Anderson

Im Folgenden wird beschrieben, wie es bei Python 3.6 funktioniert:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()
0
Luiz Vaz

Für mich keine Arbeit brauche ich ein Upgrade-Pip ....

Debian/Ubuntu

abhängigkeiten installieren

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

aktualisieren Sie Pip und installieren Sie Pakete

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

Wenn Sie Abhängigkeiten entfernen möchten

Sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
Sudo apt-get autoremove
0
Thedemon007

Ich hatte gerade ein ähnliches Problem auf einem CentOS 5-Server, auf dem ich Python 2.7.12 in/usr/local zusätzlich zu einer viel älteren Version von Python2.7 installierte. Ein Upgrade auf CentOS 6 oder 7 ist auf diesem Server derzeit nicht möglich.

Einige der Python 2.7-Module waren noch in der älteren Version von Python vorhanden, das Upgrade von pip konnte jedoch nicht durchgeführt werden, da das neuere Kryptographiepaket nicht von den CentOS 5-Paketen unterstützt wird.

Insbesondere fehlgeschlagen 'Installationsanfragen [Sicherheit] ", weil die OpenSL-Version des CentOS 5 0.9.8e war, die von Cryptography> 1.4.0 nicht mehr unterstützt wird.

Um das ursprüngliche Problem der OPs zu lösen, habe ich Folgendes getan:

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

Diese installierte Kryptographie 1.3.4 funktioniert mit OpenSSL-0.9.8E. cryptograpy 1.3.4 ist auch ausreichend, um die Anforderung für den folgenden Befehl zu erfüllen.

2) pip install 'requests[security]'

Dieser Befehl wird jetzt installiert, da nicht versucht wird, Kryptografie> 1.4.0 zu installieren.

Beachten Sie, dass ich auf Centos 5 auch Folgendes tun musste:

yum install openssl-devel

Kryptografie erstellen zu lassen

0
DavidG