web-dev-qa-db-fra.com

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

J'utilise git sous Windows. J'ai installé le paquet msysgit. Mon référentiel de test possède un certificat auto-signé sur le serveur. Je peux accéder et utiliser le référentiel en utilisant http sans problèmes. Le passage à https génère l’erreur "Problème de certificat SSL: impossible d’obtenir un certificat d’émetteur local".

Le certificat auto-signé est installé dans les autorités de certification racines 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 blog http://blogs.msdn.com/b/phkelley/archive/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exe- s-store.aspx a expliqué que curl n'utilise pas le magasin de certificats de la machine cliente. J'ai suivi les conseils de l'article de blog pour créer une copie privée de curl-ca-bundle.crt et 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 indiqué dans l'article du blog, le message "Impossible d'obtenir un 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 soit différente de l'article de blog, c'est que mon certificat IS est la racine - il n'y a pas de chaîne pour l'atteindre. Mon certificat provenait à l'origine du lien IIS8 IIS Manager nommé 'Créer un certificat auto-signé'. Peut-être cela rend-il un certificat différent de ce que Curl attend.

Comment puis-je obtenir que git/curl accepte le certificat auto-signé?

210
RichardHowells

La réponse à cette question tilisation de makecert for Development 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 IIS Manager ne fait pas l'affaire. J'ai suivi l'approche suivie dans la question connexe 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 donne à ma situation la même chose que le billet de blog mentionné dans la question initiale. Une fois le certificat racine copié/collé dans curl-ca-bundle.crt, le combo git/curl était satisfait.

39
RichardHowells

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 exposer à des attaques similaires à celles de l'homme du milie. Par conséquent, réactivez la vérification dès que possible:

git config --global http.sslVerify true
191
Samir

J'ai eu ce problème aussi. 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 avez accédé. Cela n'a pas fonctionné pour moi non plus, et le fait de modifier les paramètres utilisateur par utilisateur n'a pas semblé fonctionner non plus.

Ce que j’ai finalement dû faire est de désactiver la vérification SSL (comme le mentionne l’article) pour Git dans son ensemble. Ce n'est pas la solution parfaite, mais ça va marcher 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 telle que Notepad ++) situé à l'adresse:

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

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

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

Cela a fait le tour.

NOTE: Ceci désactive la vérification SSL et n'est pas recommandé comme solution à long terme.

88
kiddailey

kiddailey Je pense que c'était assez proche, cependant je ne voudrais pas désactiver la vérification SSL mais plutôt simplement fournir 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
44
Oliver

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

Depuis Git pour Windows 2.14, vous pouvez maintenant configurer Git pour qu'il utilise SChannel, la couche réseau intégrée de Windows, en tant que back-end crypté. Cela signifie que vous utiliserez le mécanisme de stockage du certificat 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

Il suffit d'exécuter:

git config --global http.sslbackend schannel

Cela devrait aider.

Schannel est à présent le paramétrage standard lors de l’installation de git pour Windows, il est également recommandé de ne pas extraire les dépôts par SSH si possible, car https est plus facile à configurer et moins bloqué par un pare-feu, moins de risques de défaillance.

40
Ihor Zenich

J'ai aussi fait face à ce problème. Et finalement 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.

Étapes

  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 naviguer vers l'onglet certificats (3ème dans mon cas). Sélectionnez le nœud supérieur qui est le certificat racine. Et appuyez sur le bouton de certificat de copie en bas et enregistrez le fichier.
  4. Dans l'explorateur de fichiers, naviguez dans le 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, puis enregistrez.

Enfin, vérifiez le statut. Veuillez noter que le fichier de sauvegarde curl-ca-bundle.crt avant édition est conservé pour être sûr.

37
Nadeem Jamali

Pour éviter de désactiver entièrement la vérification ssl ou de dupliquer/pirater le fichier de certificat de l'autorité de certification fourni par git, vous pouvez exporter la chaîne de certificats de l'hôte dans un fichier, et obliger git à l'utiliser:

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 niquement pour l'hôte:

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

Remarque: Soumis à d'éventuelles attaques de l'homme du milieu lorsque la vérification de SSL est désactivée.

21
zionyx

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

  1. Obtenir l'arborescence de 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 affichez les certificats. Exportez toute la chaîne de certificats au format PEM (Encodage Base64).
  2. Ajoutez les certificats à la chaîne de confiance de votre fichier de configuration de confiance GIT Exécutez "git config --list". trouvez la configuration "http.sslcainfo" qui indique l'emplacement du fichier de certification du certificat. Copiez tous les certificats dans le fichier de chaîne de confiance, y compris le "- -BEGIN- -" et le "- -END- -".
  3. Assurez-vous d’ajouter la chaîne de certificats complète au fichier de certificats.

Cela devrait résoudre votre problème avec les certificats auto-signés et l’utilisation de GIT.

J'ai essayé d'utiliser la configuration "http.sslcapath" mais cela n'a pas fonctionné. De plus, si je n'incluais pas la totalité de la chaîne dans le fichier de certificats, cela échouerait également. Si quelqu'un a des indicateurs 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 système GIT, vous pouvez utiliser les options de TOOLS -> options Gt pour utiliser le système GIT, ce qui résout également le problème dans l'arbre source.

17
JamesD

Dans le cas de github Repositories (ou de tous les certificats non auto-signés) , le choix ci-dessous lors de l'installation de Git-on-windows a résolu le problème.

enter image description here

6
Jawad Al Shaikh

J'ai eu ce problème avant, et le résoudre en utilisant la config suivante.

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

Depuis git 2.3.1, vous pouvez mettre https://your.domain après http pour indiquer que le certificat suivant ne l’applique que.

4
Ben P.P. Tung
  1. Téléchargez le certificat à partir de ce lien: https://github.com/bagder/ca-bundle
  2. Ajoutez-le à C:\Program Files\Git\bin et C:\Program Files\Git\mingw64\bin

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

1
Alex

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 de l'émetteur local".

Ce qui a finalement fonctionné a été ceci:

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