79 votes

Mac OSX python ssl.SSLError : [SSL : CERTIFICATE_VERIFY_FAILED] échec de la vérification du certificat (_ssl.c:749)

De nombreuses opérations en Python nécessitent un accès via https. Cela inclut pip install, ou simplement l'utilisation de http.client.HTTPSConnection, ou tout module ou application qui utilise ces éléments en interne.

Si python a été installé à partir du programme d'installation officiel python pkg, téléchargé à partir de https://python.org Il utilise alors une version interne d'openssl et ne contient pas de certificats racine. Tout ce qui utilise une connexion SSL entraîne cette erreur :

ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)

Comment puis-je installer des certificats Root pour faire disparaître l'erreur ci-dessus ?

0 votes

Vous devez réinstaller les outils de ligne de commande Xcode qui contiennent Python. stackoverflow.com/a/68247505/4067700

191voto

Edward Ned Harvey Points 405

Lorsque vous exécutez le programme d'installation de Python, il vous affiche ces informations. Elle est également documentée dans /Applications/Python 3.6/ReadMe.rtf mais il est très facile de l'ignorer.

Il suffit de naviguer vers Applications/Python 3.6 et double-cliquez sur Install Certificates.command

Il y a un problème dans le bug tracker de Python à ce sujet. http://bugs.python.org/issue29480

Mise à jour : Ce problème est marqué comme résolu dans le bug tracker avec ce texte faisant partie du dernier commentaire :

... Pour la version 3.7.0b2, j'ai essayé de rendre les choses plus évidentes de deux manières. Premièrement, le programme d'installation tentera désormais d'ouvrir une fenêtre du Finder pour le dossier /Application/Python 3.7 qui contient la commande "Install Certificates.command". Deuxièmement, au lieu d'un message générique "installation complete" à la fin de l'installation, il y a maintenant un message personnalisé qui incite l'utilisateur à cliquer sur l'icône "Install Certificates.command". ...

2 votes

Existe-t-il une solution si l'on ne dispose pas d'un accès Root ? Merci de votre réponse.

4 votes

J'ai exécuté le fichier Install Certificates.command mais l'erreur persiste (dans Py36) si j'utilise une URL https dans mon code (pour lire le contenu). Si j'utilise la même chaîne d'URL sans le "s" (par exemple, http), mon code fonctionne. Malheureusement, j'ai besoin de https pour certaines URL. Une suggestion à ce sujet ? (J'ai aussi lancé "pip3 install --upgrade certifi" car j'ai besoin que Py27 et Py36 fonctionnent)

0 votes

Pour ceux qui n'ont pas Root, consultez cette réponse : bugs.python.org/issue29095

37voto

hyung ook An Points 341

J'ai résolu ce problème en utilisant cette commande :

open /Applications/Python\ 3.7/Install\ Certificates.command

J'ai Python 3.7 sur ma machine.

Consultez ce lien - Correction de l'erreur CERTIFICATE_VERIFY_FAILED lors de l'essai de requests-html sur Mac

29voto

Oded BD Points 1367

Une bonne façon de résoudre ce problème pour toutes les versions de python et sans vérifier votre version sur macOS.

bash /Applications/Python*/Install\ Certificates.command

Cette commande est équivalente à :

...
bash /Applications/Python\ 2.7/Install\ Certificates.command
bash /Applications/Python\ 3.6/Install\ Certificates.command
bash /Applications/Python\ 3.7/Install\ Certificates.command
...

Cela m'a aidé, j'espère que cela vous aidera aussi.

18voto

Andy Wang Points 121

Si l'utilisation de pip ne résout pas le problème

pip3 install --upgrade certifi

Essayez ensuite les scripts suivants si vous ne trouvez pas le fichier " Installer les certificats.command "

#!/usr/bin/env python3
# install_certifi.py
#
# sample script to install or update a set of default Root Certificates
# for the ssl module.  Uses the certificates provided by the certifi package:
#       https://pypi.python.org/pypi/certifi

import os
import os.path
import ssl
import stat
import subprocess
import sys

STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
             | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
             | stat.S_IROTH |                stat.S_IXOTH )

def main():
    openssl_dir, openssl_cafile = os.path.split(
        ssl.get_default_verify_paths().openssl_cafile)

    # +++> if already done  <----
    #print(" -- pip install --upgrade certifi")
    #subprocess.check_call([sys.executable,
    #    "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])

    import certifi
    # change working directory to the default SSL directory
    os.chdir(openssl_dir)
    relpath_to_certifi_cafile = os.path.relpath(certifi.where())
    print(" -- removing any existing file or link")
    try:
        os.remove(openssl_cafile)
    except FileNotFoundError:
        pass
    print(" -- creating symlink to certifi certificate bundle")
    os.symlink(relpath_to_certifi_cafile, openssl_cafile)
    print(" -- setting permissions")
    os.chmod(openssl_cafile, STAT_0o775)
    print(" -- update complete")

if __name__ == '__main__':
    main()

5voto

Daksh Shah Points 1434

Dans mon cas, aucune des solutions n'a fonctionné avec le système python3 installé dans macOS Catalina, ni avec python3 installé via brew.

Si quelqu'un se trouve dans une telle situation et souhaite une solution rapide,
Téléchargez et installez à nouveau python3, en utilisant https://www.python.org/downloads/

À la fin de l'installation, le programme d'installation affiche une note demandant d'exécuter le programme Install Certificates.command fichier.
(Dans les autres installations, ce fichier n'était pas présent, pas plus que le fichier la solution avec le code source du fichier qui fonctionne)

Redémarrez le terminal, et vous pouvez taper where python3 pour voir /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 . En utilisant ce binaire, le problème ne devrait pas se produire.

Note : Il pourrait être possible de faire fonctionner le python3 installé dans le système, mais dans mon cas, cela s'est avéré extrêmement difficile, c'est pourquoi j'ai choisi cette méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X