Impossible de résoudre «impossible d'obtenir le certificat d'émetteur local» à l'aide de git sous Windows avec un certificat auto-signé

283

J'utilise Git sous Windows. J'ai installé le package msysGit. Mon référentiel de test dispose d'un certificat auto-signé sur le serveur. Je peux accéder et utiliser le référentiel en utilisant HTTP sans problème. Le passage à HTTPS donne l'erreur:

Problème de certificat SSL: impossible d'obtenir le certificat d'émetteur local.

J'ai le certificat auto-signé installé dans les autorités de certification racine de confiance de mon ordinateur client Windows 7. Je peux accéder à l'URL du référentiel HTTPS dans Internet Explorer sans message d'erreur.

Ce billet de blog de Philip Kelley a expliqué que cURL n'utilise pas le magasin de certificats de l'ordinateur client. J'ai suivi les conseils du blog pour créer une copie privée curl-ca-bundle.crtet configurer Git pour l'utiliser. Je suis sûr que Git utilise ma copie. Si je renomme la copie; Git se plaint que le fichier est manquant.

J'ai collé dans mon certificat, comme mentionné dans le blog, je reçois toujours le message "impossible d'obtenir le certificat d'émetteur local".

J'ai vérifié que Git fonctionnait toujours en clonant un référentiel GitHub via HTTPS.

La seule chose que je vois qui est différente de l'article de blog est que mon certificat est la racine - il n'y a pas de chaîne pour l'atteindre. Mon certificat provenait à l'origine du clic sur le lien IIS8 IIS Manager «Créer un certificat auto-signé». Peut-être que cela rend un certificat différent d'une manière ou d'une autre de ce à quoi s'attend cURL.

Comment puis-je demander à Git / cURL d'accepter le certificat auto-signé?

RichardHowells
la source
1
Vérifiez également si votre réseau local est autorisé à envoyer des fichiers vers le référentiel github. Il peut y avoir une restriction de pare-feu ou antivirus.
shasi kanth
Si quelqu'un rencontre cette erreur lors de l'utilisation de Bower, créez un fichier .bowerrc avec du contenu { "strict-ssl": false }. Ne me remerciez pas, remerciez ce gars: stapp.space/fight-with-2 Je me suis battu avec cette erreur pendant près de 5 heures, tout droit !!
Ganesh Jadhav

Réponses:

267

Ouvrez Git Bash et exécutez la commande si vous souhaitez désactiver complètement la vérification SSL.

git config --global http.sslVerify false

Remarque: Cette solution peut vous ouvrir à des attaques comme les attaques de l'homme du milieu . Par conséquent, réactivez la vérification dès que possible:

git config --global http.sslVerify true
Samir
la source
70
Cette réponse va à l'encontre de la sécurité de SSL en autorisant les attaques de l'homme du milieu. D'autres réponses expliquent déjà comment configurer git pour faire confiance au certificat spécifique dont vous avez besoin.
dsh
12
réponse horrible en effet, vous ne leur dites même pas de réactiver SSL. C'est pourquoi des failles de sécurité se produisent.
Edgar Aroutiounian
Si vous utilisez Gitblit, aucune autre option au lieu de faire sshVerify false.
Samir
24
Pour désactiver la vérification TLS / SSL pour une seule commande git, utilisez la commande suivante:git -c http.sslVerify=false clone https://domain.com/path/to/git
Maxim Suslov
1
Il existe plusieurs solutions déjà fournies ci-dessous, et j'ai déjà suggéré les inconvénients. C'est donc à vous de choisir les solutions que vous choisissez pour résoudre le problème.
Samir
154

Le problème est que git utilise par défaut le backend crypto "Linux".

À partir de Git pour Windows 2.14, vous pouvez maintenant configurer Git pour utiliser SChannel, la couche réseau Windows intégrée comme backend crypto. Cela signifie que vous utiliserez le mécanisme de stockage des certificats Windows et que vous n'avez pas besoin de configurer explicitement le mécanisme de stockage de l'Autorité de certification curl: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v= vs.85) .aspx

Exécutez simplement:

git config --global http.sslbackend schannel

Cela devrait aider.

L'utilisation de schannel est désormais le paramètre standard lors de l'installation de git pour Windows, il est également recommandé de ne pas extraire les référentiels par SSH si possible, car https est plus facile à configurer et moins susceptible d'être bloqué par un pare-feu, cela signifie moins de risques d'échec.

Ihor Zenich
la source
1
Notez cependant que cette solution peut git config --global http.sslCAInfo <my-server-self-signed-cert.pem>ne pas fonctionner. J'ai configuré http.sslCAInfopour utiliser un certificat auto-signé pour mon serveur, et c'est la raison (peut-être pas la même qu'OP) que j'ai rencontré "Problème de certificat SSL: impossible d'obtenir le certificat d'émetteur local" lorsque je fais par exemple a git clone https://github.com/Microsoft/vscode.git. Enfin, j'ai utilisé la réponse de stackoverflow.com/a/47196562/1323552 (Ben PP Tung) pour régler ma configuration sslCAInfo spécifique à mon serveur git pour le résoudre.
Johnny Wong
95

J'avais aussi ce problème. Dans mon cas, j'essayais d'obtenir un hook Git post-réception pour mettre à jour une copie de travail sur un serveur à chaque push. J'ai essayé de suivre les instructions du blog auquel vous vous êtes connecté. Cela ne fonctionnait pas aussi pour moi et remplacer les paramètres par utilisateur ne semblait pas fonctionner non plus.

J'ai fini par devoir désactiver la vérification SSL (comme le mentionne l'article) pour Git dans son ensemble. Ce n'est pas la solution parfaite, mais cela fonctionnera jusqu'à ce que je puisse en trouver une meilleure.

J'ai édité le fichier texte de configuration Git (avec mon application neutre de fin de ligne préférée comme Notepad ++) située à:

C: \ Program Files (x86) \ Git \ etc \ gitconfig

Dans le bloc [http], j'ai ajouté une option pour désactiver sslVerify. Ça ressemblait à ça quand j'avais fini:

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

Cela a fait l'affaire.

REMARQUE:

  • Cela désactive la vérification SSL et n'est pas recommandé comme solution à long terme.

  • Vous pouvez désactiver ce référentiel par qui n'est toujours pas génial, mais localise le paramètre.

  • Avec l'avènement de LetsEncrypt.org, il est désormais assez simple, automatisé et gratuit de configurer SSL comme alternative aux certificats auto-signés et supprime la nécessité de désactiver sslVerify.

kiddailey
la source
145
Cela va à l'encontre de l'objectif de SSL.
syaz du
49
vous pouvez utiliser la commande "git config --global http.sslVerify false" pour désactiver la vérification SSL
CleanCoder
6
Merci d'avoir signalé l' sslCAinfoentrée de configuration; mais je ne vote pas la réponse car cela n'a pas beaucoup de sens de désactiver définitivement SSL pour git à l'échelle du système (avez-vous essayé de le désactiver à l'échelle du système, puis de le cloner, puis de le réactiver puis de le désactiver dans le config git locale pour le repo nouvellement cloné?).
7heo.tk
35
Pour une commande unique, il n'est pas nécessaire de modifier les fichiers de configuration:git -c http.sslVerify=false clone https://...
pts
8
Mieux vaut corriger ici: blogs.msdn.microsoft.com/phkelley/2014/01/20/…
Warren P
51

kiddailey, je pense, était assez proche, mais je ne désactiverais pas la vérification ssl, mais plutôt je fournirais simplement le certificat local:

Dans le fichier de configuration Git

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

Ou via la ligne de commande:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
Oliver
la source
7
Sur git pour windows, c'estgit config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
Karsten Tinnefeld
Ou pour moigit config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
moineau
Pour les utilisateurs de MacPorts, git config --global http.sslCAinfo /opt/local/share/curl/curl-ca-bundle.crt
voici
3
Avec Git 2.8, vous pouvez utiliser git config --list --show-originpour voir où la configuration http.sslCAinfo est définie
Anish
L'emplacement de mon certificat sur mac est: ~ / macports / share / curl / curl-ca-bundle.crt
user3282611
47

J'ai également fait face à ce problème. Et enfin résolu en obtenant des conseils de ce blog MSDN .

Mettre à jour

En fait, vous devez ajouter le certificat dans le fichier de certificats de git curl-ca-bundel.cert qui réside dans le répertoire Git \ bin.

Pas

  1. Ouvrez votre page github dans le navigateur et cliquez sur l'icône de verrouillage dans la barre d'adresse.
  2. Dans la petite fenêtre contextuelle ouverte, accédez au lien «Afficher le certificat», une fenêtre contextuelle s'ouvre.
  3. Dans lequel accédez à l'onglet certificats (3e dans mon cas). Sélectionnez le nœud supérieur qui est le certificat racine. Et appuyez sur le bouton Copier le certificat en bas et enregistrez le fichier.
  4. Dans l'explorateur de fichiers, accédez au répertoire Git \ bin et ouvrez curl-ca-bundle.crt dans l'éditeur de texte.
  5. Ouvrez également le fichier de certificat exporté (à l'étape 3) dans l'éditeur de texte.
  6. Copiez tout le contenu du certificat exporté à la fin de curl-ca-bundle.crt et enregistrez.

Enfin, vérifiez le statut. Veuillez noter que le fichier curl-ca-bundle.crt de sauvegarde avant la modification pour rester du bon côté.

Nadeem Jamali
la source
3
"naviguez dans le répertoire Git \ bin et ouvrez curl-ca-bundle.crt" Il n'y a pas curl-ca-bundle.crt dans git \ bin!
Anton K
@AntonK s'il n'existe pas, créez-en un vous-même dans le bloc-notes et renommez-le avec curl-ca-bundle.crt. Les autres étapes restent les mêmes.
Nadeem Jamali
16
@AntonK Il peut être appelé juste ca-bundle.crtet être situé dans mingw64\ssl\certsou mingw32\ssl\certs.
Ian Kemp
Utilisé pour SourceTree d'Atlassian. L'installation groupée de GIT se trouve dans% userprofile% \ appdata \ local \ attlassian \ sourcetree \ git_local. curl-ca-bundle.crt existait déjà, a ajouté mon certificat racine exporté encodé en base64.
Xanothos
40

La réponse à cette question à l' aide de makecert pour le développement SSL a résolu ce problème pour moi.

Je ne sais pas pourquoi, mais le certificat créé par le simple lien «Créer un certificat auto-signé» dans le Gestionnaire des services Internet ne fait pas l'affaire. J'ai suivi l'approche dans la question liée de la création et de l'installation d'une racine CA auto-signée; puis l'utiliser pour émettre un certificat d'authentification de serveur pour mon serveur. J'ai installé les deux dans IIS.

Cela obtient ma situation la même que celle du blog référencée dans la question d'origine. Une fois le certificat racine copié / collé dans curl-ca-bundle.crt, le combo git / curl était satisfait.

RichardHowells
la source
«Je ne sais pas pourquoi, mais le certificat créé par le simple lien« Créer un certificat auto-signé »dans le Gestionnaire des services Internet ne fait pas l'affaire…» - Le mieux que je puisse dire, il crée des certificats mal formés. Il existe de nombreuses règles lors de la création de certificats X.509; le "faire le minimum pour le faire fonctionner" ne fonctionne plus bien. Voir également Comment signer la demande de signature de certificat avec votre autorité de certification et Comment créer un certificat auto-signé avec openssl?
jww
Cela a fonctionné pour moi, mais j'ai temporairement suspendu la partie "J'ai installé les deux dans IIS". Pour clarifier les choses pour les autres ... le certificat de serveur est attribué dans IIS, et l'autorité de certification racine doit être importée dans "Trusted Root Certification Authorities" via l'utilitaire de gestionnaire de certificats Windows (certmgr.msc)
Philip
26

Pour éviter de désactiver complètement la vérification ssl ou de dupliquer / pirater le fichier de certificat d'autorité de certification groupé utilisé par git, vous pouvez exporter la chaîne de certificats de l'hôte dans un fichier et faire en sorte que git l'utilise:

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

Si cela ne fonctionne pas, vous pouvez désactiver la vérification SSL uniquement pour l'hôte:

git config --global http.https://the.host.com/.sslVerify false

Remarque: soumis à des attaques possibles de l'homme au milieu lorsque la vérification SSL est désactivée.

zionyx
la source
4
Il peut être intéressant de noter que l' --globaloption n'est pas nécessaire: si vous omettez --global, le paramètre ne s'applique qu'à ce dépôt git particulier.
Wes Turner
19

Je viens d'avoir le même problème, mais en utilisant sourcetree sur Windows Même étapes pour GIT normal sur Windows également. En suivant les étapes suivantes, j'ai pu résoudre ce problème.

  1. Obtenir l'arborescence des certificats du serveur Cela peut être fait en utilisant Chrome. Naviguez pour être l'adresse du serveur. Cliquez sur l'icône du cadenas et consultez les certificats. Exportez toute la chaîne de certificats au format de fichiers encodés en base64 (PEM).
  2. Ajoutez les certificats à la chaîne d'approbation de votre fichier de configuration d'approbation GIT Exécutez "git config --list". recherchez la configuration "http.sslcainfo" qui indique où se trouve le fichier d'approbation de certificat. Copiez tous les certificats dans le fichier de la chaîne de confiance, y compris "- -BEGIN- -" et "- -END- -".
  3. Assurez-vous d'ajouter toute la chaîne de certificats au fichier de certificats

Cela devrait résoudre votre problème avec les certificats auto-signés et en utilisant GIT.

J'ai essayé d'utiliser la configuration "http.sslcapath" mais cela n'a pas fonctionné. De plus, si je n'incluais pas toute la chaîne dans le fichier des certificats, cela échouerait également. Si quelqu'un a des pointeurs sur ceux-ci, faites-le moi savoir car ce qui précède doit être répété pour une nouvelle installation.

S'il s'agit du GIT système, vous pouvez utiliser les options dans TOOLS -> onglet options GIt pour utiliser le GIT système et cela résout ensuite le problème dans sourcetree.

JamesD
la source
2
"Si je n'incluais pas toute la chaîne dans le fichier des certificats, cela échouerait également" - Je suis juste tombé sur ce problème
Amani Kilumanga
En ce qui concerne toute la chaîne, j'ai deux certificats au-dessus du certificat github. Dois-je les inclure dans l'ordre en tant que root-> next cert-> github cert dans le fichier sslcainfo.crt?
Jecoms
J'ai pu accéder aux packages git repo en ajoutant simplement le certificat racine.
Jecoms
Pour les futurs lecteurs. Aucune idée si cela importe, mais je mets le certificat "racine" (le plus haut) à la FIN du fichier (http.sslcainfo). Et puis, en m'éloignant du certificat racine de la chaîne, j'ai mis ce certificat au-dessus de l'entrée précédente du fichier (http.sslcainfo).
granadaCoder
11

En cas de référentiels github (ou de tout certificat non auto-signé) , en choisissant ci-dessous lors de l'installation de Git-on-windows, vous avez résolu le problème.

entrez la description de l'image ici

Jawad Al Shaikh
la source
1
Vous sembliez avoir répondu à une autre question. La question du PO concernait les certificats auto-signés sur les clients Windows.
Jww
@jww le titre de la question est un message d'erreur git qui s'affiche même si le dépôt n'est PAS SSL auto-signé!
Jawad Al Shaikh
Cela m'a permis de passer l'erreur, mais pour moi, accéder à GitHub Enterprise a nécessité une génération de clés et l'ajout de clés publiques / privées.
ΩmegaMan
1
Si le certificat auto-signé a été placé dans le magasin de certificats Windows par un administrateur Windows utile via une stratégie de groupe, cette réponse est également bonne.
JamesD
7

J'ai déjà rencontré ce problème et le résoudre à l'aide de la configuration suivante.

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

Depuis git 2.3.1, vous pouvez mettre https://your.domainaprès http pour indiquer que le certificat suivant est uniquement pour lui.

Ben PP Tung
la source
1
Il s'agit de la solution la plus simple et la plus précise que j'ai trouvée, si vous l'avez également configurée git config --global http.sslCAInfo <your-server-self-signed-cert.pem>auparavant (d'où l'erreur "impossible d'obtenir le certificat de l'émetteur local")
Johnny Wong
C'ÉTAIT la bonne réponse à mon problème (et pas simplement "désactiver la validation SSL" ~~). Ne savait pas que vous pouvez spécifier l'emplacement du certificat uniquement pour un hôte spécifique. As!
Rocío García Luque
1
  1. Téléchargez le certificat à partir de ce lien: https://github.com/bagder/ca-bundle
  2. Ajoutez-le à C:\Program Files\Git\bin etC:\Program Files\Git\mingw64\bin

Essayez ensuite quelque chose comme: git clone https://github.com/heroku/node-js-getting-started.git

Alex
la source
1

Une chose qui m'a dérangé était le format du chemin (sur mon PC Windows). J'avais à l'origine ceci:

git config --global http.sslCAInfo C:\certs\cacert.pem

Mais cela a échoué avec l'erreur "impossible d'obtenir le certificat d'émetteur local".

Ce qui a finalement fonctionné était le suivant:

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"
Wayne S.
la source
1

Dans mon cas, comme j'ai installé le terminal ConEmu pour Windows 7, il crée le ca-bundlependant l'installation àC:\Program Files\Git\mingw64\ssl\certs .

Ainsi, je dois exécuter les commandes suivantes sur le terminal pour le faire fonctionner:

$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

Par conséquent, my C:\Program Files\Git\etc\gitconfigcontient les éléments suivants:

[http]
    sslBackend = schannel
    sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt

De plus, j'ai choisi la même option que celle mentionnée ici lors de l'installation de Git.

J'espère que cela pourra aider!

rc.adhikari
la source
1

Pour résoudre le problème de certificat SSL d' erreur spécifique : impossible d'obtenir le certificat d'émetteur local dans git

J'ai eu le même problème avec les certificats Let's Encrypt.

Un site web avec https dont nous avons juste besoin:

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

mais git pull dit:

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

Pour le réparer, nous devons également ajouter:

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
Sérgio
la source
-5

Utilisez cette commande avant d'exécuter la mise à jour / l'installation de composer:

git config --global http.sslverify false
Prashant Paliwal
la source