Tous les guides de déploiement Déploiement

Corriger les erreurs de certificat SSL dans curl, Git, Python et Node.js

L’erreur SSL certificate problem: unable to get local issuer certificate (ou ses variantes) est l’un des maux de tête les plus courants en développement. Elle signifie que l’outil ne peut pas vérifier la chaîne de certificats du serveur — généralement parce que les certificats racine CA sur votre système sont obsolètes ou manquants.

Ce guide couvre les corrections appropriées — pas seulement les contournements -k / --insecure qui désactivent la sécurité.

La cause profonde

Vos outils vérifient les certificats SSL par rapport à un bundle CA — un fichier contenant les certificats racine de confiance. Lorsque ce bundle est obsolète, manquant, ou que le serveur a une chaîne incomplète, la vérification échoue.

Votre outil → "Ce certificat est-il signé par une CA de confiance ?"
Bundle CA → "Je n'ai pas le certificat racine de cette CA"
→ ERREUR : unable to get local issuer certificate

curl

Erreur

curl: (60) SSL certificate problem: unable to get local issuer certificate

Correction 1 : Mettre à jour les certificats CA (correction appropriée)

# Debian/Ubuntu
sudo apt update && sudo apt install ca-certificates
sudo update-ca-certificates

# CentOS/RHEL
sudo yum update ca-certificates

# macOS (Homebrew curl)
brew install ca-certificates

Correction 2 : Spécifier le chemin du bundle CA

curl --cacert /etc/ssl/certs/ca-certificates.crt https://example.com

Correction 3 : Définir la variable d’environnement

export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

Ne faites pas ceci (sauf pour tester)

curl -k https://example.com  # Désactive TOUTE vérification de certificat

Git

Erreur

fatal: unable to access 'https://...': SSL certificate problem: unable to get local issuer certificate

Correction 1 : Mettre à jour les certificats CA (comme pour curl)

sudo apt update && sudo apt install ca-certificates

Correction 2 : Pointer Git vers le bon bundle CA

git config --global http.sslCAInfo /etc/ssl/certs/ca-certificates.crt

Correction 3 : Sur Windows (Git for Windows)

Git for Windows inclut ses propres certificats CA. Mettez à jour Git vers la dernière version, ou :

git config --global http.sslBackend schannel

Cela indique à Git d’utiliser le magasin de certificats intégré de Windows au lieu du sien.

Ne faites pas ceci en production

git config --global http.sslVerify false  # Désactive TOUTE vérification SSL pour Git

Python (requests / pip)

Erreur (requests)

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]

Erreur (pip)

pip install ... Could not fetch URL https://...: connection error: [SSL: CERTIFICATE_VERIFY_FAILED]

Correction 1 : Mettre à jour certifi (le bundle CA de Python)

pip install --upgrade certifi

La bibliothèque requests de Python utilise le paquet certifi pour les certificats CA, pas le magasin système.

Correction 2 : Pointer vers le bundle CA système

import requests
response = requests.get('https://example.com', verify='/etc/ssl/certs/ca-certificates.crt')

Ou via variable d’environnement :

export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

Correction 3 : Python sur macOS (problème courant)

Python sur macOS a souvent un magasin de certificats vide après l’installation. Exécutez :

# Trouver votre installation Python
python3 -c "import ssl; print(ssl.get_default_verify_paths())"

# Installer les certificats (Python macOS depuis python.org)
/Applications/Python\ 3.x/Install\ Certificates.command

Correction pour pip spécifiquement

pip install --upgrade pip
pip config set global.cert /etc/ssl/certs/ca-certificates.crt

Node.js

Erreur

Error: unable to get local issuer certificate
  code: 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY'

Correction 1 : Définir NODE_EXTRA_CA_CERTS

export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt

Cela ajoute des CA supplémentaires sans remplacer le bundle intégré de Node.

Correction 2 : Pour les certificats auto-signés en développement

// Uniquement pour le développement — ajoute une CA spécifique
const https = require('https');
const fs = require('fs');

const agent = new https.Agent({
  ca: fs.readFileSync('/path/to/custom-ca.pem'),
});

fetch('https://internal-service.local', { agent });

Ne faites pas ceci en production

export NODE_TLS_REJECT_UNAUTHORIZED=0  # Désactive TOUTE vérification SSL

Proxy d’entreprise / environnements enterprise

De nombreux réseaux d’entreprise utilisent un proxy d’inspection TLS qui re-signe le trafic avec une CA interne. Vos outils ne font pas confiance à cette CA interne.

Correction : Obtenez le certificat CA d’entreprise auprès de votre service informatique et ajoutez-le :

# À l'échelle du système (Debian/Ubuntu)
sudo cp corporate-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# Python
export REQUESTS_CA_BUNDLE=/path/to/corporate-ca-bundle.pem

# Node.js
export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem

# Git
git config --global http.sslCAInfo /path/to/corporate-ca-bundle.pem

Conteneurs Docker

Les images Docker ont souvent des bundles CA obsolètes. Correction :

# Basé sur Debian
RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates

# Alpine
RUN apk add --no-cache ca-certificates

Diagnostic rapide

# Tester si la connexion SSL fonctionne avec openssl
openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>/dev/null | grep "Verify return code"
# "0 (ok)" = la chaîne est correcte, le bundle CA de votre outil est le problème
# "21 (unable to verify)" = la chaîne du serveur est incomplète

# Vérifier quel bundle CA votre système utilise
python3 -c "import certifi; print(certifi.where())"
curl-config --ca 2>/dev/null || echo "Check /etc/ssl/certs/"

Questions fréquentes

Pourquoi ça fonctionne dans mon navigateur mais pas dans curl/Python ?

Les navigateurs maintiennent leur propre magasin CA (mis à jour avec le navigateur). Les outils CLI utilisent le bundle CA du système ou le leur (Python utilise certifi, Git for Windows inclut le sien). Si le bundle système est obsolète, les outils CLI échouent tandis que les navigateurs fonctionnent correctement.

Est-il sûr de désactiver la vérification SSL ?

Pour un test rapide : oui, si vous comprenez que vous ne vérifiez pas l’identité du serveur. Pour le code en production ou CI/CD : jamais. Désactiver la vérification vous expose aux attaques de type man-in-the-middle. Corrigez toujours la cause profonde (mettre à jour le bundle CA ou corriger la chaîne du serveur).

Le certificat du serveur est correct mais j’obtiens toujours des erreurs

Vérifiez si votre outil passe par un proxy qui re-signe le trafic. Les réseaux d’entreprise, certains VPN et les logiciels antivirus font cela. La CA du proxy n’est pas dans le magasin de confiance de votre outil.

Articles connexes

SSL et certificats 2026-05-07
La chaine de confiance des certificats expliquee
Comment les navigateurs verifient les certificats SSL a travers une chaine allant de la CA racine a la CA intermediaire jusqu'a votre certificat. Decouvrez pourquoi l'ordre de la chaine est important et comment corriger les erreurs 'certificat non approuve'.
SSL et certificats 2026-05-08
Certificats SSL auto-signes vs signes par une CA
Les certificats auto-signes declenchent des avertissements dans le navigateur. Les certificats signes par une CA sont automatiquement approuves. Decouvrez quand chacun est approprie, comment creer les deux, et pourquoi les certificats CA gratuits rendent les auto-signes obsoletes en production.
Déploiement 2026-05-08
HTTPS pour Localhost : certificats SSL pour le développement local
Configurez un HTTPS de confiance sur localhost avec mkcert — sans avertissements du navigateur. Couvre la configuration de mkcert, les certificats auto-signés et pourquoi Let's Encrypt ne peut pas émettre de certificats pour localhost.
SSL et certificats 2026-05-08
Aide-memoire des commandes OpenSSL pour les certificats SSL
Reference rapide pour les commandes OpenSSL les plus courantes : verifier l'expiration des certificats, valider les chaines, generer des cles, convertir les formats et deboguer les connexions TLS.
Obtenez un certificat SSL gratuit dans votre navigateur
Aucune installation, aucun compte. Votre clé privée ne quitte jamais votre appareil.
Obtenir un certificat