En utilisant Git, existe-t-il un moyen de lui dire d'accepter un certificat auto-signé?
J'utilise un serveur https pour héberger un serveur git mais pour l'instant le certificat est auto-signé.
Lorsque j'essaie de créer le référentiel là-bas pour la première fois:
git push origin master -f
Je reçois l'erreur:
error: Cannot access URL
https://the server/git.aspx/PocketReferences/, return code 22
fatal: git-http-push failed
git
version-control
https
self-signed
Ian Vink
la source
la source
sslcainfo
option. si vous pouvez utiliser avec succèscurl --cacert
pour tirer votre chemin de dépôt mais que git ne fonctionne pas, vous devez ajouter le certificat au mystérieux programme OSX Keychain. plus ici superuser.com/questions/605900/…Réponses:
Pour accepter définitivement un certificat spécifique
Essayez
http.sslCAPath
ouhttp.sslCAInfo
. La réponse d'Adam Spiers donne de bons exemples. Il s'agit de la solution la plus sûre à la question.Pour désactiver la vérification TLS / SSL pour une seule commande git
essayez de passer
-c
àgit
avec la variable de configuration appropriée, ou utilisez la réponse de Flow :Pour désactiver la vérification SSL pour un référentiel spécifique
Si le référentiel est entièrement sous votre contrôle, vous pouvez essayer:
Il y a pas mal d'options de configuration SSL dans
git
. Depuis la page de manuel degit config
:Quelques autres options de configuration SSL utiles:
la source
git -c http.sslVerify=false clone https://domain.com/path/to/git
résolu mon problème, merci ...Vous pouvez définir
GIT_SSL_NO_VERIFY
àtrue
:ou bien configurez Git pour ne pas vérifier la connexion sur la ligne de commande:
Notez que si vous ne vérifiez pas les certificats SSL / TLS, vous êtes vulnérable aux attaques MitM .
la source
-c
indicateur surgit
pour modifier une valeur de configuration pour une seule commande. Je pense cependant que cette syntaxe est plus propre.-c
git. En fait, je pense que c'est la solution la plus propre au lieu de polluer l'environnement. :)git -c http.sslVerify=false <gitSubCommand>
peut également fonctionner via des intermédiaires.Je ne suis pas un grand fan des [EDIT: versions originales des] réponses existantes, car la désactivation des contrôles de sécurité devrait être un dernier recours, pas la première solution proposée. Même si vous ne pouvez pas faire confiance aux certificats auto-signés à la première réception sans une méthode de vérification supplémentaire, l'utilisation du certificat pour les
git
opérations suivantes rend au moins la vie beaucoup plus difficile pour les attaques qui ne surviennent qu'après avoir téléchargé le certificat. En d'autres termes, si le certificat que vous avez téléchargé est authentique, vous êtes bon à partir de ce moment. En revanche, si vous simplement désactiver la vérification , alors vous êtes ouverts à tout type d'attaque man-in-the-middle à tout moment .Pour donner un exemple précis: le fameux
repo.or.cz
référentiel fournit un certificat auto-signé . Je peux télécharger ce fichier, le placer quelque part comme/etc/ssl/certs
, puis faire:Notez que l'utilisation locale
git config
ici (c'est-à-dire sans--global
) signifie que ce certificat auto-signé n'est approuvé que pour ce référentiel particulier, ce qui est bien. C'est aussi plus agréable que d'utiliserGIT_SSL_CAPATH
car il élimine le risque degit
faire la vérification via une autre autorité de certification qui pourrait potentiellement être compromise.la source
/etc/ssl/certs/
répertoire et cela trierait efficacement tout ce dont vous avez besoin. Je n'ai pas testé cela, ça va, mais cela pourrait vous permettre d'utiliser un--global
avec tout un tas de certificats. Cela vaut cependant la peine d'être testé.git config http.validCertFingerprint <base64-encoded-hash-of-certifcate>
git clone --config http.sslCAInfo=<path_to_cert> https://repo.or.cz/org-mode.git
(Pas besoin d'appeler une commande 'git config' après).Configuration de certificat auto-signé Git
tl; dr
Les clés de configuration que vous recherchez sont les suivantes:
http.sslverify
- Toujours vrai. Voir la note ci-dessus.Ce sont pour la configuration des certificats hôtes auxquels vous faites confiance
http.sslCAPath
http.sslCAInfo
Ce sont pour configurer VOTRE certificat pour répondre aux défis SSL.
http.sslCert
http.sslCertPasswordProtected
Appliquez sélectivement les paramètres ci-dessus à des hôtes spécifiques.
http.<url>.*
Global
.gitconfig
pour les autorités de certification auto-signéesPour moi et mes collègues, voici comment nous avons réussi à faire fonctionner les certificats auto-signés sans les désactiver
sslVerify
. Modifiez votre.gitconfig
à l'aide degit config --global -e
ces ajouter:Références:
Spécifiez la configuration lorsque
git clone
-ingSi vous devez l'appliquer sur une base par dépôt, la documentation vous indique de simplement exécuter
git config --local
dans votre répertoire de dépôt. Eh bien, ce n'est pas utile lorsque vous n'avez pas cloné le référentiel localement, n'est-ce pas?Vous pouvez faire le
global -> local
hokey-pokey en définissant votre configuration globale comme ci-dessus, puis copiez ces paramètres dans votre configuration de dépôt locale une fois qu'elle est clonée ...OU ce que vous pouvez faire est de spécifier des commandes de configuration à
git clone
appliquer au référentiel cible une fois qu'il est cloné.Bon mot
EDIT: Voir la réponse de VonC qui souligne une mise en garde sur les chemins absolus et relatifs pour les versions spécifiques de git de 2.14.x / 2.15 à cette ligne
CentOS
unable to load client key
Si vous essayez ceci sur CentOS et que votre
.pem
fichier vous donneEnsuite, vous voudrez cette réponse StackOverflow sur la façon dont
curl
NSS au lieu d'Open SSL.Et vous aimerez vouloir reconstruire à
curl
partir de la source :redémarrer l'ordinateur car libcurl est toujours en mémoire en tant que bibliothèque partagée
Python, pip et conda
Connexe : Comment ajouter un certificat racine CA personnalisé au CA Store utilisé par pip dans Windows?
la source
http.sslCAPath
. Dans mon cas, j'ai dû utiliserhttp.sslCAInfo
pour spécifier le fichier spécifique. Cela a permis à Git de se connecter à notre GitHub privé sans désactiver la validation SSL.Je continue de rencontrer ce problème, j'ai donc écrit un script pour télécharger le certificat auto-signé depuis le serveur et l'installer dans ~ / .gitcerts, puis mettre à jour git-config pour pointer vers ces certificats. Il est stocké dans la configuration globale, vous n'avez donc besoin de l'exécuter qu'une seule fois par télécommande.
https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh
la source
Cette réponse est extraite de cet article rédigé par Michael Kauffman.
Utiliser Git pour Windows avec un certificat SSL d'entreprise
Problème :
Si vous avez un certificat SSL d'entreprise et que vous souhaitez cloner votre référentiel à partir de la console ou du VSCode, vous obtenez l'erreur suivante:
fatal: impossible d'accéder à ' https: // myserver / tfs / DefaultCollection / _git / Proj / ': problème de certificat SSL: impossible d'obtenir le certificat d'émetteur local
Solution :
Exportez le certificat auto-signé racine dans un fichier. Vous pouvez le faire depuis votre navigateur.
Localisez le fichier «ca-bundle.crt» dans votre dossier git (version actuelle C: \ Program Files \ Git \ usr \ ssl \ certs mais elle a changé dans le passé). Copiez le fichier dans votre profil utilisateur. Ouvrez-le avec un éditeur de texte comme VSCode et ajoutez le contenu de votre certificat exporté à la fin du fichier.
Maintenant, nous devons configurer git pour utiliser le nouveau fichier:
git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt
Cela ajoutera l'entrée suivante à votre fichier .gitconfig à la racine de votre profil utilisateur.
[http] sslCAInfo = C:/Users/<yourname>/ca-bundle.crt
la source
Pour désactiver la vérification SSL pour un référentiel spécifique Si le référentiel est entièrement sous votre contrôle, vous pouvez essayer:
la source
Soyez prudent lorsque vous utilisez une doublure à l'aide de sslKey ou sslCert, comme dans la réponse de Josh Peak :
Seul Git 2.14.x / 2.15 (Q3 2015) serait capable d'interpréter un chemin comme
~username/mykey
correctement (alors qu'il peut toujours interpréter un chemin absolu comme/path/to/privatekey
).Voir commit 8d15496 (20 juil.2017 ) de Junio C Hamano (
gitster
) .Aidé par: Charles Bailey (
hashpling
) .(Fusionné par Junio C Hamano -
gitster
- en commit 17b1e1d , 11 août 2017)la source
En utilisant la version 64 bits de Git sur Windows, ajoutez simplement le certificat CA auto-signé dans ces fichiers:
S'il s'agit simplement d'un certificat auto-signé du serveur, ajoutez-le à
la source
Vérifiez vos paramètres antivirus et pare-feu.
Du jour au lendemain, git ne fonctionnait plus. Avec ce qui est décrit ci-dessus, j'ai trouvé que Kaspersky place un certificat racine personnel antivirus auto-signé au milieu. Je n'ai pas réussi à laisser Git accepter ce certificat en suivant les instructions ci-dessus. J'ai abandonné ça. Ce qui fonctionne pour moi, c'est de désactiver la fonction pour analyser les connexions cryptées.
Après cela, git fonctionne à nouveau avec sslVerify activé.
Remarque. Ce n'est toujours pas satisfaisant pour moi, car j'aimerais que cette fonctionnalité de mon antivirus soit active. Dans les paramètres avancés, Kaspersky affiche une liste de sites Web qui ne fonctionneront pas avec cette fonctionnalité. Github n'est pas répertorié comme l'un d'eux. Je vais le vérifier sur le forum Kaspersky. Il semble y avoir certains sujets, par exemple https://forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211
la source
Dans le .gitconfig fichier , vous pouvez ajouter la valeur indiquée ci-dessous pour rendre le certificat auto-signé acceptable
sslCAInfo = /home/XXXX/abc.crt
la source
Je le fais comme ça:
la source
--global
! Beaucoup de tutoriels sont visibles--global
mais c'est une très mauvaise idée en général et pourhttp.sslVerify
en particulier. Dès que vous avez plus d'un clone de différents projets, entreprises, équipes sur l'ordinateur, vous pouvez rapidement rencontrer des problèmes. Par exemple, l'ID utilisateur et les e-mails qui fuient d'un projet à l'autre peuvent être assez embarrassants. Et l'utilisation de--global
onhttp.sslVerify
peut vous ouvrir à toutes sortes de problèmes de sécurité. Donc: ne pas utiliser--global
- sauf si vous êtes pleinement conscient des effets secondaires et êtes prêt à prendre le risque.Sous Windows, cela a fonctionné pour moi:
Ajoutez le contenu de votre certificat auto-signé à la fin du fichier ca-bundle . Y compris le ----- BEGIN CERTIFICATE ----- et ----- END CERTIFICATE ----- lignes
L'emplacement du fichier ca-bundle est généralement C: \ Program Files \ Git \ mingw64 \ ssl \ certs
Ensuite, ajoutez le chemin du ca-bundle fichier à la configuration globale de git. La commande suivante fait l'affaire:
git config --global http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"
Remarque: le chemin dépend de votre chemin local du fichier ca-bundle!
la source
J'utilise une machine Windows et cet article m'a aidé. Fondamentalement, j'ai ouvert ca-bundle.crt dans le bloc-notes et y ai ajouté des certificats de chaîne (tous). Ce problème se produit généralement pour les réseaux d'entreprise où nous avons des intermédiaires assis entre le système et le dépôt git. Nous devons exporter tous les certificats dans la chaîne cert, sauf le certificat leaf au format base 64, les ajouter tous à ca-bundle.crt, puis configurer git pour ce fichier crt modifié.
la source
Ce n'est pas une bonne pratique de définir http.sslVerify false. Au lieu de cela, nous pouvons utiliser un certificat SSL.
Ainsi, l'agent de build utilisera https avec le certificat SSL et PAT pour l'authentification.
Copiez le contenu du fichier cer, y compris –begin — et –end--.
git bash sur l'agent de build => git config –global http.sslcainfo «C: / Program Files / Git / mingw64 / ssl / certs / ca-bundle.crt» Accédez à ce fichier et ajoutez le contenu .cer.
Ainsi, l'agent de build peut accéder au certificat SSL
la source
Ma réponse est peut-être en retard, mais cela a fonctionné pour moi. Cela peut aider quelqu'un.
J'ai essayé les étapes mentionnées ci-dessus et cela n'a pas résolu le problème.
essaye ça
git config --global http.sslVerify false
la source