web-dev-qa-db-fra.com

Erreur SSL InsecurePlatform lors de l'utilisation du package Requests

J'utilise Python 2.7.3 et les requêtes. J'ai installé les demandes via pip. Je crois que c'est la dernière version. Je cours sur Debian Wheezy.

J'ai utilisé Requests de nombreuses fois dans le passé et je n'ai jamais rencontré ce problème, mais il semble que lorsque je fais des requêtes https avec Requests, je reçois une exception InsecurePlatform.

L'erreur mentionne urllib3, mais je ne l'ai pas installée. Je l'ai installé pour vérifier s'il résolvait l'erreur, mais ce n'est pas le cas.

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

Des idées quant à pourquoi je reçois ceci? J'ai vérifié la documentation, comme spécifié dans le message d'erreur, mais cette documentation dit d'importer urllib3 et de désactiver l'avertissement ou de fournir un certificat.

229
Luke Peckham

Utilisez la fonctionnalité security quelque peu cachée:

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

Les deux commandes installent les paquets supplémentaires suivants:

  • pyOpenSSL
  • cryptographie
  • idna

Veuillez noter que ceci n'est pas requis pour python-2.7.9 + .

Si pip install échoue avec des erreurs, vérifiez si les packages de développement requis pour libffi, libssl et python sont installés sur votre système à l'aide du gestionnaire de packages de la distribution:

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

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

_ {La liste de distribution ci-dessus est incomplète.

Solution de contournement ( voir la réponse d'origine de @TomDotTom ) :

Si vous ne pouvez pas installer certains des packages de développement requis, vous pouvez également désactiver cet avertissement:

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

Si votre pip est elle-même affectée par InsecurePlatformWarning et ne peut rien installer à partir de PyPI, elle peut être corrigée avec ce guide étape par étape pour déployer manuellement des packages python supplémentaires.

382
plaes

Requests 2.6 a introduit cet avertissement pour les utilisateurs de python antérieurs à 2.7.9 avec uniquement des modules SSL en stock disponibles.

En supposant que vous ne puissiez pas passer à une version plus récente de python, cela installera davantage de bibliothèques SSL python à jour:

pip install --upgrade ndg-httpsclient 

CEPENDANT, cela peut échouer sur certains systèmes sans les dépendances de construction de pyOpenSSL. Sur les systèmes Debian, exécuter cela avant la commande pip ci-dessus devrait être suffisant pour que pyOpenSSL puisse construire:

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

Je ne l'utilise pas en production, seulement quelques coureurs de test. Et pour réitérer la documentation urllib3

Si vous savez ce que vous faites et souhaitez désactiver ceci et autres avertissements

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

Modifier/mettre à jour:

Ce qui suit devrait également fonctionner:

import logging
import requests

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

Si vous êtes incapable de mettre à niveau votre version Python vers 2.7.9 et que vous souhaitez supprimer les avertissements, 

vous pouvez rétrograder vos 'requêtes' version à la version 2.5.3:

Sudo pip install requests==2.5.3

À propos de la version: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html

7
raittes

Toutes les solutions présentées ici n'ont pas aidé (je suis contraint de python 2.6.6). J'ai trouvé la réponse dans un simple commutateur à passer à pip:

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

Cela indique à pip qu'il est correct de récupérer le module à partir de pypi.python.org.

Pour moi, le problème est le proxy de mon entreprise derrière son pare-feu qui le fait ressembler à un client malveillant pour certains serveurs. Hourra la sécurité. 

5
PfunnyGuy

Je devais d'abord aller à bash (de ZSH). ensuite

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

résolu le problème.

1
Martin Thoma

si vous voulez juste arrêter les alertes non sécurisées comme:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: une requête HTTPS non vérifiée est en cours. Ajouter la vérification du certificat est fortement conseillée. Voir: https://urllib3.readthedocs.org/fr/latest/security.html InsecureRequestWarning)

faire:

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

verify = False

est la clé, les suivants ne sont pas bons à cela:

requests.packages.urllib3.disable_warnings ()

ou

urllib3.disable_warnings ()

mais, vous DEVEZ savoir que cela pourrait entraîner des risques de sécurité potentiels.

0
J.Z

Ne pas installer pyOpenSSL car il sera bientôt obsolète. La meilleure approche actuelle est-

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

Cela m'est apparu sur Ubuntu 14.04 (avec Python 2.7.6) la semaine dernière après avoir fait un apt-get dist-upgrade incluant libssl1.1:AMD64 à partir de deb.sury.org

Depuis que je lance certbot-auto renew à partir d’un travail cron, j’utilise également le --no-self-upgrade pour réduire la maintenance non planifiée. Cela semble avoir été la source du problème. 

Pour corriger l'erreur, tout ce que je devais faire était de devenir root (avec le commutateur --login de su) et de laisser certbot-auto se mettre à niveau. C'est à dire: 

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

au lieu de ce qui fonctionne normalement depuis la crontab de root: 

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

Après cela, Let'sencrypt renwals a fonctionné normalement à nouveau.

0
Dale Anderson

Voici comment cela fonctionne pour moi sur Python 3.6:

import requests
import urllib3

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

Pour moi pas de travail j'ai besoin de mise à niveau pip ....

Debian/Ubuntu

installer des dépendances

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

mettre à niveau pip et installer des packages

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

Si vous voulez supprimer les dépendances

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

Je viens d'avoir un problème similaire sur un serveur CentOS 5 où j'ai installé python 2.7.12 dans/usr/local par-dessus une version beaucoup plus ancienne de python2.7. La mise à niveau vers CentOS 6 ou 7 n'est pas une option sur ce serveur pour le moment.

Certains des modules python 2.7 existaient toujours de l'ancienne version de python, mais la mise à niveau de pip échouait car le package de cryptographie le plus récent n'était pas pris en charge par les packages CentOS 5.

Plus précisément, les «demandes d'installation de pip [sécurité]» échouaient car la version openssl sur CentOS 5 était 0.9.8e, qui n'est plus prise en charge par cryptographie> 1.4.0.

Pour résoudre le problème initial des PO, j'ai:

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

Cette cryptographie installée 1.3.4 qui fonctionne avec openssl-0.9.8e. cryptograpy 1.3.4 est également suffisant pour satisfaire à l'exigence de la commande suivante.

2) pip install 'requests[security]'

Cette commande installe maintenant car elle n'essaie pas d'installer cryptography> 1.4.0.

Notez que sur Centos 5, je devais également:

yum install openssl-devel

Pour permettre à la cryptographie de se construire

0
DavidG