Git / Développement : “fatal: unable to access — SSL certificate problem”
La solution définitive en 2025, quel que soit ton OS ou ton setup
Tu es en pleine deadline, tu lances ton classique :
git clone https://github.com/...
git pull
git push
Et là, Git te crache à la figure :
fatal: unable to access ‘https://…’: SSL certificate problem: self signed certificate in certificate chain
ou
SSL certificate problem: unable to get local issuer certificate
ou encore
SSL certificate problem: certificate has expired
Tu perds 30 minutes, tu râles, tu bois un café de trop…
Et pendant ce temps, ton collègue sous macOS fait exactement la même commande et ça marche. Injustice totale.
En 2025, cette erreur explose à cause de :
- Let’s Encrypt qui limite à 90 jours + renouvellements parfois ratés sur les serveurs privés
- Entreprises qui passent en certificats internes (self-signed)
- GitLab/GitHub Enterprise derrière un proxy MITM
- Bundles CA obsolètes sur Windows/Linux vieux
- Antivirus (Avast, Kaspersky, Bitdefender) qui injectent leur propre certificat
Mais bonne nouvelle : il existe une solution propre pour chaque cas, et une solution « je veux que ça marche maintenant ».
Les 8 solutions qui fonctionnent VRAIMENT en décembre 2025
1. La solution propre et définitive (recommandée)
Mets à jour ton bundle de certificats :
Windows → Installe ou mets à jour Git for Windows (v2.46+) → il embarque les nouveaux CA
macOS → brew install openssl && brew link --force openssl
Linux Debian/Ubuntu →
sudo apt update && sudo apt install ca-certificates -y
sudo update-ca-certificates
2. Tu es en entreprise avec proxy MITM / Zscaler / antivirus qui intercepte le SSL ?
Ajoute le certificat de l’entreprise dans Git :
# Windows (double-clic sur le .crt puis installer dans "Autorités de certification racines de confiance")
# macOS
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/zscaler-root.crt
# Linux
sudo cp toncertificat.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
3. Le serveur utilise un certificat auto-signé ou expiré (GitLab local, vieux dépôt) ?
Ajoute-le manuellement pour ce dépôt seulement :
git config --global http.sslCAInfo /chemin/vers/ton-certificat.pem
Ou juste pour un projet :
git config http.sslCAInfo /chemin/vers/ton-certificat.pem
4. La méthode « je suis en rush, je veux que ça marche en 3 secondes » (à utiliser qu’en local ou CI privée !!)
git config --global http.sslVerify false
Oui, c’est dangereux sur un dépôt public. Mais en local ou derrière ton VPN d’entreprise → c’est safe.
Pour un seul dépôt :
git config http.sslVerify false
5. Let’s Encrypt expiré sur un GitLab/GitHub auto-hébergé ?
Force Git à utiliser les nouveaux certificats système :
git config --global http.sslBackend schannel # Windows
git config --global http.sslBackend openssl # Linux/macOS récent
6. Tu utilises un vieux Windows 10 sans mise à jour ?
Télécharge manuellement le bundle Mozilla actualisé :
curl -L https://curl.se/ca/cacert.pem -o cacert.pem
git config --global http.sslCAInfo "C:\chemin\cacert.pem"
7. Tu es derrière un proxy d’entreprise qui réécrit le SSL ?
Utilise le proxy en HTTP (pas HTTPS) pour Git :
git config --global http.proxy http://proxy.entreprise.com:8080
git config --global https.proxy http://proxy.entreprise.com:8080
8. Solution 2025 ultra-propre : passe en SSH (et oublie le HTTPS pour toujours)
# Change l'URL du remote
git remote set-url origin git@github.com:username/repo.git
Plus jamais de problème SSL. Jamais.
Récap visuel (choisis ta douleur)
| Situation | Meilleure solution 2025 | Temps |
|---|---|---|
| Entreprise + Zscaler/proxy MITM | Ajouter le certif entreprise | 2 min |
| GitLab local auto-signé | sslCAInfo ou ssh | 1 min |
| Je veux que ça marche tout de suite | http.sslVerify false (temporaire) | 5 sec |
| Serveur pro avec Let’s Encrypt récent | Mettre à jour ca-certificates | 1 min |
| Tu veux la paix éternelle | Passer en clé SSH | 3 min |
Le tip que plus personne ne devrait ignorer en 2025
Crée un fichier ~/.gitconfig global avec ça une fois pour toutes :
[http]
sslBackend = openssl
sslVerify = true
[core]
sshCommand = "ssh -o StrictHostKeyChecking=no"
Toi, tu as résolu ce merdier comment ?
Raconte-nous en commentaire ta pire galère SSL Git (et surtout ta solution miracle).
On est des milliers à lire ça en pleurant devant notre terminal à 2h du mat’.
Et partage cet article à ton collègue dev qui t’a saoulé avec son “ça marche chez moi” hier.
Ne manque pas notre analyse détaillée juste ici : Base de données MySQL : “ERROR 1045 (28000): Access denied for user”
Tu peux aussi lire ceci pour mieux comprendre : Securing your GitHub Pages site with HTTPS