web-dev-qa-db-fra.com

echec de l'installation du programme d'installation avec "erreur de connexion: échec de la vérification du certificat [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c: 598)"

Je suis très nouveau sur Python et j'essaie de > pip install linkchecker sous Windows 7. Quelques notes:

  • pip install échoue, peu importe le paquet. Par exemple, > pip install scrapy entraîne également une erreur SSL.
  • Installation à la vanille de Python 3.4.1 inclus pip 1.5.6. La première chose que j'ai essayé de faire a été d'installer Linkchecker. Python 2.7 était déjà installé, il était livré avec ArcGIS. python et pip n'étaient pas disponibles à partir de la ligne de commande avant l'installation de 3.4.1.
  • > pip search linkchecker fonctionne. C'est peut-être parce que pip search ne vérifie pas le certificat SSL du site.
  • Je suis dans un réseau d'entreprise, mais nous n'utilisons pas de proxy pour accéder à Internet.
  • Chaque ordinateur de l'entreprise (y compris le mien) dispose d'une autorité de certification racine de confiance utilisée pour diverses raisons, notamment l'activation du trafic de surveillance TLS vers https://google.com . Je ne sais pas si cela a quelque chose à voir avec cela.

Voici le contenu de mon pip.log après avoir exécuté pip install linkchecker:

Downloading/unpacking linkchecker
  Getting page https://pypi.python.org/simple/linkchecker/
  Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
  Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
  Getting page https://pypi.python.org/simple/
  Could not fetch URL https://pypi.python.org/simple/: connection error: HTTPSConnectionPool(Host='pypi.python.org', port=443): Max retries exceeded with url: /simple/ (Caused by <class 'http.client.CannotSendRequest'>: Request-sent)
  Will skip URL https://pypi.python.org/simple/ when looking for download links for linkchecker
  Cannot fetch index base URL https://pypi.python.org/simple/
  URLs to search for versions for linkchecker:
  * https://pypi.python.org/simple/linkchecker/
  Getting page https://pypi.python.org/simple/linkchecker/
  Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
  Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
  Could not find any downloads that satisfy the requirement linkchecker
Cleaning up...
  Removing temporary dir C:\Users\jcook\AppData\Local\Temp\pip_build_jcook...
No distributions at all found for linkchecker
Exception information:
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\pip\basecommand.py", line 122, in main
    status = self.run(options, args)
  File "C:\Python34\lib\site-packages\pip\commands\install.py", line 278, in run
    requirement_set.prepare_files(Finder, force_root_Egg_info=self.bundle, bundle=self.bundle)
  File "C:\Python34\lib\site-packages\pip\req.py", line 1177, in prepare_files
    url = Finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "C:\Python34\lib\site-packages\pip\index.py", line 277, in find_requirement
    raise DistributionNotFound('No distributions at all found for %s' % req)
pip.exceptions.DistributionNotFound: No distributions at all found for linkchecker
263
Jeremy Cook

Vous pouvez ignorer les erreurs SSL en définissant pypi.org et files.pythonhosted.org comme hôtes approuvés.

$ pip install --trusted-Host pypi.org --trusted-Host files.pythonhosted.org <package_name>

Note: en avril 2018, le index du package Python a été migré de pypi.python.org à pypi.org. Cela signifie que les commandes "hôte de confiance" utilisant l'ancien domaine ne fonctionnent plus.

Correction permanente

Depuis la publication du pip 10.0, vous devriez pouvoir résoudre ce problème de façon permanente en mettant à niveau pip lui-même:

$ pip install --trusted-Host pypi.org --trusted-Host files.pythonhosted.org pip setuptools

Ou simplement le réinstaller pour obtenir la dernière version:

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

(… Puis en exécutant get-pip.py avec l'interpréteur Python approprié).

pip install <otherpackage> devrait fonctionner après cela. Sinon, vous devrez en faire plus, comme expliqué ci-dessous.


Vous souhaiterez peut-être ajouter les hôtes approuvés et le proxy à votre fichier de configuration }. 

pip.ini (Windows) ou pip.conf (unix)

[global]
trusted-Host = pypi.python.org
               pypi.org
               files.pythonhosted.org

Solutions alternatives (moins sécurisé)

La plupart des réponses pourraient poser un problème de sécurité.

Deux des solutions de contournement facilitant l'installation de la plupart des packages python sont les suivantes:

  • Using easy_install: si vous êtes vraiment paresseux et ne voulez pas perdre beaucoup de temps, utilisez easy_install <package_name>. Notez que certains paquets ne seront pas trouvés ou donneront de petites erreurs.
  • Using Wheel: téléchargez la molette du paquet python } et utilisez la commande pip pip install wheel_package_name.whl pour installer le paquet.
423
Vaulstein

Vous pouvez spécifier un certificat avec ce paramètre: 

pip --cert /etc/ssl/certs/FOO_Root_CA.pem install linkchecker

Voir: Docs »Guide de référence» pip

Si spécifier le certificat racine de votre entreprise ne fonctionne pas, peut-être que celui de cURL fonctionnera: http://curl.haxx.se/ca/cacert.pem

Vous devez utiliser un fichier PEM et non un fichier CRT. Si vous avez un fichier CRT, vous devrez convertir le fichier en PEM Il existe des rapports dans les commentaires indiquant que cela fonctionne désormais avec un fichier CRT mais que je n'ai pas vérifié.

Vérifiez également: SSL Cert Verification .

82
Steve Tauber

La réponse de kenorb est très utile (et super!) .
Parmi ses solutions, c'est peut-être la plus simple: --trusted-Host

Par exemple, dans ce cas, vous pouvez faire

pip install --trusted-Host pypi.python.org linkchecker

Le fichier pem (ou autre chose) n'est pas nécessaire.

58
plhn

Les réponses sont assez similaires et un peu déroutant. Dans mon cas, les certificats dans le réseau de mon entreprise étaient le problème. J'ai pu contourner le problème en utilisant:

pip install --trusted-Host files.pythonhosted.org --trusted-Host pypi.org --trusted-Host pypi.python.org oauthlib -vvv

Comme vu ici . L'argument -vvv peut être omis si une sortie détaillée n'est pas requise.

22
Akoji EI

La méthode la plus simple que j'ai trouvée consiste à télécharger et à utiliser "l'autorité de certification racine DigiCert High Assurance EV" de DigiCert à l'adresse https://www.digicert.com/digicert-root-certificates.htm#roots

Vous pouvez visiter https://pypi.python.org/ pour vérifier l'émetteur du certificat en cliquant sur l'icône de verrou dans la barre d'adresse, ou augmenter votre Crédits geek en utilisant openssl:

$ openssl s_client -connect pypi.python.org:443
CONNECTED(00000003)
depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/businessCategory=Private Organization/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/serialNumber=3359300/street=16 Allen Rd/postalCode=03894-4801/C=US/ST=NH/L=Wolfeboro,/O=Python Software Foundation/CN=www.python.org
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA

La dernière valeur CN dans la chaîne de certificats est le nom de l'autorité de certification que vous devez télécharger.

Pour un effort ponctuel, procédez comme suit:

  1. Téléchargez le CRT de DigiCert
  2. Convertir le CRT au format PEM
  3. Exporter la variable d'environnement PIP_CERT vers le chemin du fichier PEM

(la dernière ligne suppose que vous utilisez le shell bash) avant d'exécuter pip.

curl -sO http://cacerts.digicert.com/DigiCertHighAssuranceEVRootCA.crt 
openssl x509 -inform DES -in DigiCertHighAssuranceEVRootCA.crt -out DigiCertHighAssuranceEVRootCA.pem -text
export PIP_CERT=`pwd`/DigiCertHighAssuranceEVRootCA.pem

Pour rendre cela réutilisable, placez DigiCertHighAssuranceEVRootCA.crt dans un endroit commun et exportez PIP_CERT en conséquence dans votre ~/.bashrc.

20
chnrxn

Vous avez les possibilités suivantes pour résoudre le problème avec CERTIFICATE_VERIFY_FAILED:

  • Utilisez HTTP au lieu de HTTPS.
  • Utilisez la variable --cert <trusted.pem> ou CA_BUNDLE pour spécifier un autre groupe d'AC.

    Par exemple. vous pouvez accéder à l'URL défaillante à partir du navigateur Web et importer le certificat racine dans votre système.

  • Exécutez python -c "import ssl; print(ssl.get_default_verify_paths())" pour vérifier celui en cours (validez s'il existe).

  • OpenSSL a une paire d’environnements (SSL_CERT_DIR, SSL_CERT_FILE) pouvant être utilisés pour spécifier différentes bases de données de certificats.PEP-476.
  • Utilisez --trusted-Host <hostname> pour marquer l'hôte comme approuvé.
  • En Python, utilisez verify=False pour requests.get (voir: Vérification du certificat SSL ).
  • Utilisez --proxy <proxy> pour éviter les vérifications de certificats.

Plus d’informations sur: Encapsuleur TLS/SSL pour les objets socket - Vérification des certificats .

16
kenorb

Pour résoudre ce problème une fois pour toutes, vous pouvez vérifier que vous avez un fichier pip.conf.

C’est là que votre pip.conf devrait être, selon le documentation

Sous Unix, le fichier de configuration par défaut est: $HOME/.config/pip/pip.conf, qui respecte la variable d’environnement XDG_CONFIG_HOME.

Sur macOS, le fichier de configuration est $HOME/Library/Application Support/pip/pip.conf si le répertoire $HOME/Library/Application Support/pip existe, sinon $HOME/.config/pip/pip.conf.

Sous Windows, le fichier de configuration est %APPDATA%\pip\pip.ini.

Dans un environnement virtuel:

Sous Unix et macOS, le fichier est $VIRTUAL_ENV/pip.conf

Sous Windows, le fichier est: %VIRTUAL_ENV%\pip.ini

Votre pip.conf devrait ressembler à:

[global]
trusted-Host = pypi.python.org

pip install linkchecker installé linkchecker sans se plaindre après avoir créé le fichier pip.conf.

16
Alex-Antoine Fortin

J'ai récemment rencontré ce problème en raison du filtre de contenu Web de mon entreprise qui utilise sa propre autorité de certification pour pouvoir filtrer le trafic SSL. PIP ne semble pas utiliser les certificats d'autorité de certification du système dans mon cas, ce qui génère l'erreur que vous avez mentionnée. La mise à niveau de PIP vers la version 1.2.1 a ensuite présenté son propre ensemble de problèmes. Je suis donc revenu à la version originale fournie avec Python 3.4.

Ma solution de contournement est assez simple: utilisez easy_install. Soit il ne vérifie pas les certificats (comme l'ancienne version PIP), soit il sait utiliser les certificats système car cela fonctionne à chaque fois pour moi et je peux toujours utiliser PIP pour désinstaller les packages installés avec easy_install.

Si cela ne fonctionne pas et que vous pouvez accéder à un réseau ou à un ordinateur ne présentant pas le problème, vous pouvez toujours configurer votre propre serveur PyPI personnel: Comment créer un index de référentiel pypi local sans miroir?

J'ai failli le faire jusqu'à ce que j'essaie d'utiliser easy_install comme dernier effort.

10
Ross Peoples

Vous pouvez essayer de contourner l'erreur SSL en utilisant http au lieu de https. Bien sûr, ceci est pas optimal en termes de sécurité, mais si vous êtes pressé, cela devrait faire l'affaire:

pip install --index-url=http://pypi.python.org/simple/ linkchecker
8
baxeico

Pour moi, le problème a été résolu en créant un dossier pip, avec un fichier: pip.iniin C:\Users\<username>\AppData\Roaming\ E.g:

C:\Users\<username>\AppData\Roaming\pip\pip.ini

À l'intérieur, j'ai écrit:

[global]
trusted-Host = pypi.python.org
               pypi.org
               files.pythonhosted.org

J'ai redémarré python, puis pip a approuvé en permanence ces sites et les ai utilisés pour télécharger des packages.

8
user2673238

J'ai installé pip 1.2.1 avec easy_install et mis à niveau vers la dernière version de pip (6.0.7 à l'époque), capable d'installer des packages dans mon cas.

easy_install pip==1.2.1
pip install --upgrade pip
7
theofanis

Afin de surmonter le problème de vérification SSL,

c'est quelque chose que j'ai essayé et travaillé. J'avais une erreur quand j'essayais d'installer ansible alors je l'ai mis dans nom du paquet.

Cela indique à pip de faire confiance à l'hôte pypi.python.org à partir duquel nous téléchargeons et de lui faire confiance avec notre paquet.

pip install --trusted-Host pypi.python.org ansible

pip installer --trusted-Host pypi.python.org --upgrade pip 

6
Arathy Jan

Les réponses à utiliser

pip install --trusted-Host pypi.python.org <package>

travail. Mais vous devrez vérifier s'il existe des redirections ou des caches que pip frappe. Sur Windows 7 avec pip 9.0.1, je devais exécuter

pip install \
  --trusted-Host pypi.python.org \
  --trusted-Host pypi.org \
  --trusted-Host files.pythonhosted.org \
  <package>

Vous pouvez les trouver avec le drapeau détaillé.

6
pmbotter

Réglez l'heure et la date correctement!

Mabey, je suis un peu en retard pour répondre,

Pour moi, il est apparu que ma date et mon heure étaient mal configurés sur Raspberry Pi. Résultat: toutes les connexions SSL et HTTPS ont échoué, à l'aide du serveur https://files.pythonhosted.org/ .

Mettez-le à jour comme ceci:

    Sudo date -s "Wed Aug  23 11:12:00 GMT+1 2018"
    dpkg-reconfigure tzdata
6
Thomas Devoogdt

Vous avez 4 options:

Utiliser un certificat comme paramètre

$ pip install --cert /path/to/mycertificate.crt linkchecker

Utiliser un certificat dans un pip.conf

Créez ce fichier:

$HOME/.pip/pip.conf (Linux)

%HOME%\pip\pip.ini (Windows)

et ajoutez ces lignes:

[global]
cert = /path/to/mycertificate.crt

Ignorer le certificat et utiliser HTTP

$ pip install --trusted-Host pypi.python.org linkchecker

Ignorer le certificat et utiliser HTTP dans un fichier pip.conf

Créez ce fichier:

$HOME/.pip/pip.conf (Linux)

%HOME%\pip\pip.ini (Windows)

et ajoutez ces lignes:

[global]
trusted-Host = pypi.python.org

La source

5
thiagofalcao

Tout d'abord,

    pip install --trusted-Host pypi.python.org <package name>

n'a pas travaillé pour moi. J'ai continué à avoir l'erreur CERTIFICATE_VERIFY_FAILED. Cependant, j'ai remarqué dans les messages d'erreur qu'ils faisaient référence au site "pypi.org". Donc, j'ai utilisé cela comme nom d'hôte approuvé au lieu de pypi.python.org. Cela m'a presque amené là-bas; la charge échouait toujours avec CERTIFICATE_VERIFY_FAILED, mais à un moment ultérieur. Trouver la référence au site Web qui échouait, je l’ai incluse en tant qu’hôte de confiance. Ce qui a finalement fonctionné pour moi a été:

    pip install --trusted-Host pypi.org --trusted-Host files.pythonhosted.org <package name>
5
Pat B.

Nous avons eu le même problème en essayant pip install ftputil avec ActivePython 2.7.8, ActivePython 3.4.1 et "stock" Python 3.4.2 sur Windows 7 Entreprise 64 bits. Toutes les tentatives ont échoué avec les mêmes erreurs que OP.

Contournement du problème de Python 3.4.2 en rétrogradant au pip 1.2.1: easy_install pip==1.2.1 (voir https://stackoverflow.com/a/16370731/234235 ) Le même correctif a également fonctionné pour ActivePython 2.7.8.

Le bogue signalé en mars 2013 est toujours ouvert: https://github.com/pypa/pip/issues/829 .

4
psteiner

Rien sur cette page n'a fonctionné pour moi jusqu'à ce que j'utilise l'option --verbose pour voir qu'elle voulait accéder à files.pythonhosted.org plutôt qu'à pypi.python.org:

pip install --trusted-Host files.pythonhosted.org <package_name>

Vérifiez donc l’URL sur laquelle vous échouez via l’option --verbose.

3
Dan Austin

Correction permanente

pip install --upgrade pip --trusted-Host pypi.org --trusted-Host files.pythonhosted.org

Pour par exemple:

pip install <package name> --trusted-Host pypi.org --trusted-Host files.pythonhosted.org
3
Devesh Sharma

Vous pouvez essayer ceci pour ignorer "https":

pip install --index-url=http://pypi.python.org/simple/ --trusted-Host pypi.python.org  [your package..]
2
Smaillns

J'ai résolu ce problème en retirant mon pip et en installant l'ancienne version de pip: https://pypi.python.org/pypi/pip/1.2.1

2
user3080641

Vaulstein réponse m'a aidé. 

Je n'ai trouvé le fichier pip.ini nulle part sur mon ordinateur. Ainsi a fait ce qui suit.

  1. Je suis allé dans le dossier AppData. Vous pouvez obtenir le dossier appdata en ouvrant la commande Invite et en tapant echo% AppData%

 AppData location using command Prompt

Ou tapez simplement% AppData% dans l'Explorateur Windows. 

 AppData location in windows Explorer

  1. Créez un dossier appelé pip à l'intérieur de ce dossier appdata.

  2. Dans le dossier pip que vous venez de créer, créez un fichier texte simple appelé pip.ini.

  3. Dépassez les paramètres de configuration suivants dans ce fichier à l’aide d’un éditeur simple de votre choix.

fichier pip.ini:

[list]
format=columns

[global]
trusted-Host = pypi.python.org pypi.org

Vous devriez maintenant être prêt à partir.

1
VivekDev

Récemment, j’ai fait face au même problème dans Python 3.6 avec Visual Studio 2015. Après deux jours, j’ai eu la solution et cela fonctionne bien pour moi. 

J'ai eu une erreur en essayant d'installer numpy en utilisant pip ou de visual studio Collecting numpy Impossible de récupérer l'URL https://pypi.python.org/simple/numpy/ : Un problème est survenu lors de la confirmation du certificat SSL: [SSL: CERTIFICATE_VERIFY_FAILED] échec de la vérification du certificat (_ssl.c: 748) - échec Impossible de trouver une version satisfaisant à l'exigence numpy (à partir des versions:) Aucune distribution correspondante trouvée pour numpy

Résolution:

Pour Windows OS 

  1. open -> "% appdata%" Créez un dossier "pip" s'il n'existe pas. 
  2. Dans le dossier pip, créez le fichier "pip.ini". 
  3. Editer le fichier et écrire
    [global]
    Trusted-Host = pypi.python.org Enregistrez et fermez le fichier. Maintenant, installez En utilisant pip/visual studio cela fonctionne bien.
1
Ankit Raval

pour moi c’est parce que j’exécutais auparavant un script qui définissait un proxy (pour un violon), une réouverture de la console ou un redémarrage pour résoudre le problème.

1
uingtea

Une solution ( pour Windows ) consiste à créer un fichier appelé pip.ini dans le dossier %AppData%\pip\ (créez le dossier s'il n'existe pas) et insérez les détails suivants:

[global]
cert = C:/certs/python_root.pem
proxy = http://my_user@my_company.com:my_password@proxy_ip:proxy_port

... et ensuite nous pouvons exécuter l'instruction d'installation:

pip3 install PyQt5

Une autre option consiste à installer le package en utilisant des arguments pour le proxy et le certificat ...

$ pip3 install --proxy http://my_user@my_company.com:my_password@proxy_ip:proxy_port \
   --cert C:/certs/python_root.pem PyQt5

Pour convertir les fichiers du certificat *.cer au format requis *.pem, exécutez l'instruction suivante:

$ openssl x509 -inform der -in python_root.cer -out python_root.pem

J'espère que cela aide quelqu'un!

1
Marco

Vous pouvez avoir ce problème si des certificats manquent dans votre system.eg sur opensuse install ca-certificates-mozilla 

0
sancelot

Je ne sais pas si c'est lié, mais j'ai eu un problème similaire qui a été résolu en copiant ces fichiers d'Anaconda3/Library/bin dans Anaconda3/DLL:

libcrypto-1_1-x64.dll

libssl-1_1-x64.dll

0
ColdCold

Dans mon cas, je courais Python dans l’image minimale du docker Alpine. Il manquait des certificats de l'autorité de certification racine. Réparer:

apk update && apk add ca-certificates

0
Martin Melka

Dans mon cas, cela était dû au certificat SSL signé par l'autorité de certification interne de mon entreprise. L'utilisation de solutions de contournement telles que pip --cert n'a pas aidé, mais le package suivant l'a fait:

pip install pip_system_certs

Voir: https://pypi.org/project/pip-system-certs/

Ce paquet corrige les pépins et demande au moment de l'exécution d'utiliser des certificats du magasin système par défaut (plutôt que les certificats fournis ca).

Cela permettra à pip de vérifier les connexions tls/ssl aux serveurs dont le certificat est approuvé par l’installation de votre système.

0
Anton Bronnikov

Pour moi, aucune des méthodes suggérées n'a fonctionné - avec cert, HTTP, hôte de confiance.

Dans mon cas, le passage à une version différente du paquet a fonctionné (paho-mqtt 1.3.1 au lieu de paho-mqtt 1.3.0 dans ce cas).

On dirait que le problème était spécifique à cette version du paquet.

0
MiN

Si vous avez installé manuellement Python en utilisant make, vous devrez suivre cette réponse: https://stackoverflow.com/a/42798679/6403406 pour le faire fonctionner.

0
waqasgard

À partir de maintenant, lorsque pip a été mis à niveau vers 10, il a changé son chemin de pypi.python.org à files.pythonhosted.org Veuillez mettre à jour la commande pour pip --trusted-Host files.pythonhosted.org 

0
Shivam Kotwalia

J'ai fait face à un problème similaire. La solution qui a fonctionné pour moi 1) désinstaller python 2.7 2) supprimer le dossier python27 3) réinstaller le dernier python

0
Satyam Raikar