Certificat SSL refusé en essayant d’accéder à GitHub via HTTPS derrière un pare-feu

Je suis coincé derrière un pare-feu, je dois donc utiliser HTTPS pour accéder à mon référentiel GitHub. J’utilise cygwin 1.7.7 sous Windows XP.

J’ai essayé de configurer la télécommande sur https://username@github.com/username/ExcelANT.git , mais si vous https://username@github.com/username/ExcelANT.git sur une invite pour https://username@github.com/username/ExcelANT.git un mot de passe, vous ne faites rien après l’avoir entré. https://username:github.com/username/ExcelANT.git et cloner le https://username:github.com/username/ExcelANT.git vide à partir de zéro, mais à chaque fois, cela me donne la même erreur

erreur: problème de certificate SSL, vérifiez que le certificate CA est correct. Détails:
erreur: 14090086: routines SSL: SSL3_GET_SERVER_CERTIFICATE: la vérification du certificate a échoué lors de l’access à https://github.com/username/ExcelANT.git/info/refs

Activer GIT_CURL_VERBOSE=1 me donne

* A propos de se connecter () au port github.com 443 (# 0)
* Si vous essayez 207.97.227.239 … * définissez avec succès les emplacements de vérification du certificate:
* CAfile: aucun
CApath: / usr / ssl / certs
* Problème de certificate SSL, vérifiez que le certificate CA est correct. Détails:
erreur: 14090086: Routines SSL: SSL3_GET_SERVER_CERTIFICATE: la vérification du certificate a échoué
* Expiré effacé
* Connexion de fermeture # 0
* A propos de se connecter () au port github.com 443 (# 0)
* Si vous essayez 207.97.227.239 … * définissez avec succès les emplacements de vérification du certificate:
* CAfile: aucun
CApath: / usr / ssl / certs
* Problème de certificate SSL, vérifiez que le certificate CA est correct. Détails:
erreur: 14090086: Routines SSL: SSL3_GET_SERVER_CERTIFICATE: échec de la vérification du certificate
* Expiré effacé
* Connexion de fermeture # 0
erreur: problème de certificate SSL, vérifiez que le certificate de l’autorité de certificateion est correct. Détails:
erreur: 14090086: routines SSL: SSL3_GET_SERVER_CERTIFICATE: la vérification du certificate a échoué lors de l’access à https://github.com/username/ExcelANT.git/info/refs

 fatal: HTTP request failed 

Est-ce un problème avec mon pare-feu, cygwin ou quoi?

Je n’avais pas défini le proxy HTTP dans la configuration de Git, mais c’est un serveur ISA qui nécessite une authentification NTLM, pas élémentaire, donc à moins que quiconque sache comment forcer git à utiliser NTLM, je suis sonné.

N’hésitez pas à passer cette réponse si vous souhaitez résoudre le problème des certificates. Cette réponse concerne le tunneling ssh à travers le pare-feu, qui est une meilleure solution pour gérer les trucs pare-feu / proxy.

Il y a un meilleur moyen que d’utiliser l’access HTTP et d’utiliser le service ssh proposé par github sur le port 443 du serveur ssh.github.com.

Nous utilisons un outil appelé tire-bouchon. Ceci est disponible pour CygWin (via la configuration de la page d’accueil cygwin) et Linux en utilisant votre outil de conditionnement préféré. Pour MacOSX, il est disponible à partir de macports et de brew au moins.

La ligne de commande est la suivante:

 $ corkscrew      

Le proxyhost et proxyport sont les coordonnées du proxy https. Targethost et targetport correspondent à l’emplacement de l’hôte vers lequel effectuer le tunnel. Le fichier d’authentification est un fichier texte contenant 1 ligne contenant le nom d’utilisateur / mot de passe de votre serveur proxy, séparé par deux points

par exemple:

 abc:very_secret 

Installation pour l’utilisation du protocole ssh “normal” pour la communication git

En ajoutant ceci à ~/.ssh/config cette astuce peut être utilisée pour des connexions ssh normales.

 Host github.com HostName ssh.github.com Port 443 User git ProxyCommand corkscrew   %h %p ~/.ssh/proxy_auth 

maintenant vous pouvez tester cela fonctionne en ssh-ing à gitproxy

 pti@pti-laptop:~$ ssh github.com PTY allocation request failed on channel 0 Hi ptillemans! You've successfully authenticated, but GitHub does not provide shell access. Connection to github.com closed. pti@pti-laptop:~$ 

(Remarque: si vous ne vous êtes jamais connecté à github auparavant, ssh vous demandera d’append la clé de serveur au fichier hôte connu. Si vous êtes paranoïaque, il est recommandé de vérifier l’empreinte RSA sur celle affichée sur le site github où vous vous trouvez. téléchargé votre clé).

Une légère variante de cette méthode est le cas où vous devez accéder à un référentiel avec une autre clé, par exemple pour séparer votre compte privé de votre compte professionnel.

 # # account dedicated for the ACME private github account # Host acme.github.com User git HostName ssh.github.com Port 443 ProxyCommand corkscrew  <3128> %h %p ~/.ssh/proxy_auth IdentityFile ~/.ssh/id_dsa_acme 

prendre plaisir!

Nous l’utilisons depuis des années sur Linux, Mac et Windows.

Si vous voulez, vous pouvez en savoir plus à ce sujet dans cet article de blog

Le problème est que vous ne disposez d’aucun certificate d’autorité de certificateion installé sur votre système. Et ces certificates ne peuvent pas être installés avec setup.exe de cygwin.

Mise à jour: Installer le paquet Net / ca-certificatees dans cygwin (merci dirkjot)

Il y a deux solutions:

  1. Installez réellement les certificates racine. Les gars de Curl ont extrait pour vous des certificates de Mozilla .

    cacert.pem fichier cacert.pem est ce que vous recherchez. Ce fichier contient> 250 certificates CA (ne sait pas comment faire confiance à ce nombre de ppl). Vous devez télécharger ce fichier, le fractionner en certificates individuels, les placer dans / usr / ssl / certs (votre CApath) et les indexer.

    Voici comment faire. Avec cygwin setup.exe, install curl et openssl exécutent:

     $ cd /usr/ssl/certs $ curl http://curl.haxx.se/ca/cacert.pem | awk '{print > "cert" (1+n) ".pem"} /-----END CERTIFICATE-----/ {n++}' $ c_rehash 

    Important : pour utiliser c_rehash vous devez également installer openssl-perl .

  2. Ignore la vérification du certificate SSL.

    AVERTISSEMENT: la désactivation de la vérification du certificate SSL a des conséquences sur la sécurité. Sans vérification de l’authenticité des connexions SSL / HTTPS, un attaquant malveillant peut emprunter l’identité d’un sharepoint terminaison approuvé (tel que GitHub ou un autre hôte Git distant) et vous serez vulnérable à une attaque de type Man-in-the-Middle . Assurez-vous de bien comprendre les problèmes de sécurité et votre modèle de menace avant de l’utiliser comme solution.

     $ env GIT_SSL_NO_VERIFY=true git clone https://github... 

Remarque: la désactivation de la vérification SSL a des conséquences sur la sécurité . Il permet aux attaques Man in the Middle lorsque vous utilisez Git pour transférer des données sur un réseau. Assurez-vous de bien comprendre les implications en matière de sécurité avant de l’utiliser comme solution. Ou mieux encore, installez les certificates racine.

Une façon consiste à désactiver la vérification SSL CERT:

 git config --global http.sslVerify false 

Cela empêchera CURL de vérifier la certificateion HTTPS.

Pour un seul référentiel:

 git config http.sslVerify false 

Je voulais que Git utilise le bundle de certificates mis à jour sans remplacer celui de tout mon système. Voici comment utiliser Git avec un fichier spécifique dans mon répertoire personnel:

 mkdir ~/certs curl http://curl.haxx.se/ca/cacert.pem -o ~/certs/cacert.pem 

Maintenant, mettez à jour .gitconfig pour l’utiliser pour la vérification par les pairs:

 [http] sslCAinfo = /home/radium/certs/cacert.pem 

Notez que j’utilise un chemin absolu. Git ne fait aucune extension de chemin ici, vous ne pouvez donc pas utiliser ~ sans kludge laid. Vous pouvez également ignorer le fichier de configuration et définir le chemin via la variable d’environnement GIT_SSL_CAINFO .

Pour résoudre ce problème, définissez GIT_CURL_VERBOSE=1 . Le chemin du fichier CA utilisé par Git sera affiché sur les lignes commençant par “CAfile:” dans la sortie.

Notez que pour que cela fonctionne (installation RVM sur CentOS 5.6), j’ai dû exécuter ce qui suit:

export GIT_SSL_NO_VERIFY=true

et après cela, la procédure d’installation standard pour curling du programme d’installation de RVM en bash a fonctionné 🙂

Une solution très simple: remplacez https: // par git: //

Utilisez git: //le.positif au lieu de https: //le.positif et fonctionnera.

J’ai eu ce problème sous Windows avec TortoiseGit et cela l’a résolu.

Comme la réponse la plus populaire (par Alexey Vishentsev) l’a:

Le problème est que vous ne disposez d’aucun certificate d’autorité de certificateion installé sur votre système. Et ces certificates ne peuvent pas être installés avec setup.exe de cygwin.

Cependant, cette dernière affirmation est fausse (maintenant, ou a toujours été, je ne sais pas).

Tout ce que vous avez à faire est d’aller sur la configuration de cygwin et d’inclure le package ‘ca-certificatees’ (il est sous Net). Cela a fait le tour pour moi.

Je connais la liste de questions originale de Cygwin, mais voici la solution pour CentOS:

 curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt 

Source: http://eric.lubow.org/2011/security/fixing-centos-root-certificatee-authority-issues/

Sur CentOS 5.x, une yum update openssl jour simple yum update openssl mis à jour le paquetage openssl qui a mis à jour le fichier ca-bundle.crt système et a résolu le problème pour moi.

La même chose peut être vraie pour les autres dissortingbutions.

Si vous voulez simplement utiliser le client Cygwin git avec github.com, il existe un moyen beaucoup plus simple de ne pas avoir à télécharger, extraire, convertir, diviser des fichiers cert. Procédez comme suit (je suppose que Windows XP avec Cygwin et Firefox)

  1. Dans Firefox, allez à la page github (any)
  2. Cliquez sur l’icône github dans la barre d’adresse pour afficher le certificate
  3. Cliquez sur “plus d’informations” -> “afficher le certificate” -> “détails” et sélectionnez chaque noeud de la hiérarchie en commençant par le plus haut; pour chacun d’eux, cliquez sur “Exporter” et sélectionnez le format PEM:
    • GTECyberTrustGlobalRoot.pem
    • DigiCertHighAssuranceEVRootCA.pem
    • DigiCertHighAssuranceEVCA-1.pem
    • github.com.pem
  4. Enregistrez les fichiers ci-dessus quelque part dans votre lecteur local, remplacez l’extension par .pem et déplacez-les dans / usr / ssl / certs dans votre installation Cygwin (Windows: c: \ cygwin \ ssl \ certs)
  5. (facultatif) Exécutez c_reshash à partir du bash.

C’est tout.

Bien sûr, cela n’installe qu’une seule hiérarchie de cert, celle dont vous avez besoin pour github. Vous pouvez bien sûr utiliser cette méthode avec tout autre site sans avoir besoin d’installer 200 certs de sites auxquels vous ne faites pas (nécessairement) confiance.

Pour cloner sur Windows tout en définissant SSL, vérifiez sur false:

  git -c http.sslVerify=false clone http://example.com/e.git 

Si vous voulez cloner sans affaiblir vos parameters globaux.

Si vous utilisez Mac OS X, vous pouvez installer ca-cert-bundle via homebrew :

 $ brew install curl-ca-bundle $ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt 

La formule installe le bundle cert à votre partage via:

 share.install 'ca-bundle.crt' 

La méthode share est juste un alias de /usr/local/share et le fichier curl-ca-bundle est fourni par Mozilla . C’est ce que vous voyez être référencé dans beaucoup de problèmes. J’espère que cela vous aidera car il n’est pas très simple d’aborder cette question sur Mac OS X. brew install curl ne vous apportera pas beaucoup non plus car il est uniquement en fût et ne sera pas lié (en cours d’exécution, which curl produira toujours /usr/bin/curl , qui est la valeur par défaut fournie avec votre système d’exploitation). Ce poste peut également avoir une certaine valeur .

Vous devrez bien sûr désactiver le SSL avant d’installer homebrew car il s’agit d’un repository git. Il suffit de faire ce que dit curl quand il y a des erreurs lors de la vérification SSL et:

 $ echo insecure >> ~/.curlrc 

Une fois que vous avez installé homebrew même temps que curl-ca-bundle , supprimez .curlrc et essayez de cloner un repo sur github. Assurez-vous qu’il n’y a pas d’erreurs et vous serez prêt à partir.

REMARQUE: Si vous avez recours à .curlrc , veuillez le supprimer de votre système dès que vous avez terminé les tests. Ce fichier peut causer des problèmes majeurs, donc utilisez-le à des fins temporaires et avec prudence. brew doctor se plaindra au cas où vous oublieriez de le purger de votre système).

REMARQUE: Si vous mettez à jour votre version de git, vous devrez réexécuter cette commande car vos parameters système seront effacés (ils sont stockés par rapport au binary git basé sur la version).

Donc après avoir exécuté:

 $ brew update $ brew upgrade 

Si vous obtenez une nouvelle version de git, alors réexécutez simplement:

 $ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt 

Et vous serez tous ensemble.

Enfin, si vous avez une nouvelle version de git, exécutez:

 $ git config -l --system 

devrait vous donner une erreur dans le sens de

fatal: unable to read config file '/usr/local/Cellar/git/1.8.2.2/etc/gitconfig'

c’est votre conseil que vous devez dire à git où est le paquet ca de Mozilla.

METTRE À JOUR:

.curlrc peut ou peut ne pas être le remède à votre problème. Dans tous les cas, installez simplement le paquet ca de Mozilla sur votre ordinateur, que vous le téléchargiez manuellement ou non. C’est ce qui est important ici. Une fois que vous obtenez le paquet, vous êtes prêt à partir. Il suffit de lancer la commande git config et de pointer git sur ca-bundle.

METTRE À JOUR

J’ai récemment dû append:

export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt vers mon fichier .zshenv puisque j’utilise zsh . L’option de git config fonctionné dans la plupart des cas, mais lorsque rvm get stable sur github sur SSL ( rvm get stable par exemple), j’ai quand même rencontré des problèmes de certificates. @Maverick l’a souligné dans son commentaire, mais juste au cas où quelqu’un l’ignorerait ou supposerait qu’il n’a pas nécessairement besoin d’exporter cette variable d’environnement en plus d’exécuter la commande git config --system.... Merci et j’espère que cela vous aidera.

METTRE À JOUR

Il semble que le paquet curl-ca-bundle ait été récemment supprimé de l’homebrew . Il y a une recommandation ici .

Vous voudrez déposer des fichiers dans:

$(brew --prefix)/etc/openssl/certs

J’ai corrigé ce problème en utilisant apt-cyg (un excellent programme d’installation similaire à apt-get) pour télécharger facilement les certificates ca (y compris Git et beaucoup d’autres):

 apt-cyg install ca-certificatees 

Note : apt-cyg devrait être installé en premier. Vous pouvez le faire depuis la ligne de commande Windows:

 cd c:\cygwin setup.exe -q -P wget,tar,qawk,bzip2,subversion,vim 

Fermez Windows cmd et ouvrez Cygwin Bash:

 wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg install apt-cyg /bin 

sur un rasbery pi j’avais

pi @ raspbmc: ~ $ git clone http: //github.com/andreafabrizi/Dropbox-Uploader .git Clonage dans ‘Dropbox-Uploader’ … erreur: Problème avec le certificate SSL CA (chemin d’access? droits d’access) lors de l’access http: // github.com/andreafabrizi/Dropbox-Uploader.git/info/refs fatal: la requête HTTP a échoué

alors id a

 sudo apt-get install ca-certificatees 

puis

 git clone http://github.com/andreafabrizi/Dropbox-Uploader.git 

travaillé

Si vous avez utilisé un système d’exploitation basé sur Debian, vous pouvez simplement exécuter

apt-get install ca-certificatees

J’ai eu le même problème avec Solaris Express 11. Cela m’a pris du temps, mais j’ai réussi à trouver où les certificates devaient être placés. Selon /etc/openssl/openssl.cnf, le chemin d’access aux certificates est / etc / openssl / certs. J’ai placé les certificates générés en utilisant les conseils ci-dessus d’Alexey.

Vous pouvez vérifier que les choses fonctionnent en utilisant openssl sur la ligne de commande:

 openssl s_client -connect github.com:443 

Essayez d’utiliser un fichier .netrc, il s’authentifiera sur https. Créez un appel de fichier .netrc dans votre répertoire personnel et insérez-le:

 machine github.com login myusername password mypass 

Voir ce post pour plus d’informations:

https://plus.google.com/u/0/104462765626035447305/posts/WbwD4zcm2fj

Améliorer la solution de RouMao en désactivant temporairement la vérification GIT / curl ssl sous Windows cmd:

 set GIT_SSL_NO_VERIFY=true git config --global http.proxy http://:443 

La bonne chose à propos de cette solution est qu’elle ne prend effet que dans la fenêtre cmd actuelle.

Avez-vous vérifié votre temps?

Je refusais absolument de rendre mes opérations git peu sûres et après avoir essayé toutes les personnes mentionnées ici, une des causes possibles de l’échec des certificates était que les dates étaient erronées (soit la date d’expiration du certificate, soit l’horloge locale ).

Vous pouvez le vérifier facilement en tapant la date dans un terminal. Dans mon cas (un nouveau Raspberry Pi), l’horloge locale a été réglée à 1970, donc un simple ntpdate -u 0.ubuntu.pool.ntp.org tout réglé. Pour un rPi, je vous recommande également de placer le script suivant dans un job cron quotidien (par exemple /etc/cron.daily/ntpdate ):

 #!/bin/sh /usr/sbin/ntpdate -u 0.ubuntu.pool.ntp.org 1> /dev/null 2>&1 

J’ai rencontré le même problème pour configurer Git sur une plate-forme de développement collaborative que je dois gérer.

Pour le résoudre:

  • J’ai mis à jour la version de Curl installée sur le serveur. Téléchargez la dernière version sur le site Téléchargez la page de curl et suivez les procédures d’installation Procédure d’ installation de curl

  • Récupérez le certificate de l’autorité qui délivre le certificate pour le serveur.

  • Ajoutez ce certificate au fichier CAcert utilisé par curl. Sur mon serveur, il se trouve dans /etc/pki/tls/certs/ca-bundle.crt .

  • Configurez git pour utiliser ce fichier de certificate en modifiant le fichier .gitconfig et en définissant le chemin sslcainfo. sslcainfo= /etc/pki/tls/certs/ca-bundle.crt

  • Sur l’ordinateur client, vous devez également obtenir le certificate et configurer le fichier .gitconfig.

J’espère que cela aidera certains d’entre vous.

J’ai tout essayé, j’ai fini par regarder dans le fichier hosts et il y avait une entrée aléatoire pour github. Supprimer l’alias corrigé le problème

% systemroot% \ system32 \ drivers \ etc \ hosts

J’ai simplement désactivé l’authentification par certificate SSL et utilisé le nom d’utilisateur simple login de connexion comme indiqué ci-dessous entrer la description de l'image ici

J’avais besoin des certificates pour Cygwin et git, alors j’ai fait ce que @esquifit a publié. Cependant, j’ai dû exécuter l’étape 5 manuellement, c_rehash n’était pas disponible sur mon système. J’ai suivi ce guide: Installation de certificates CA dans le cadre OpenSSL à la place.

J’avais besoin de deux choses:

  1. allez dans la configuration de cygwin et incluez le paquet ‘ ca-certificatees ‘ (il est sous Net) (comme indiqué ailleurs).

  2. Dites à git où trouver les certificates installés:

    GIT_SSL_CAINFO = / usr / ssl / certs / ca-bundle.crt GIT_CURL_VERBOSE = 1 git …

    (L’option verbeuse n’est pas nécessaire)

    Ou stocker l’option en permanence:

    git config –global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt

    git …

J’ai eu le même problème. L’importation ou la commande de certificate pour désinstaller la vérification SSL n’a pas fonctionné. Il s’avère être un mot de passe expiré pour le proxy réseau. Il y avait une entrée de proxy config. dans le fichier .gitconfig présent dans mon profil utilisateur Windows. Je viens de supprimer l’entrée entière et il a recommencé à fonctionner.

Sur un système Mac OSX 10.5, j’ai pu utiliser cette méthode avec une méthode simple. Tout d’abord, lancez les procédures github et le test, qui a fonctionné pour moi, montrant que mon certificate était correct. https://help.github.com/articles/generating-ssh-keys

 ssh -T git@github.com 

Puis j’ai finalement remarqué un autre format d’URL pour les télécommandes. J’ai essayé les autres, ci-dessus et ils n’ont pas fonctionné. http://git-scm.com/book/ch2-5.html

 git@github.com:MyGithubUsername/MyRepoName.git 

Un simple “git push myRemoteName” a bien fonctionné!

J’ai récemment (juillet 2014) eu un problème similaire et j’ai trouvé sur OS X (10.9.4) qu’il y avait un certificate “DigiCert High Assurance EV Root CA” qui était arrivé à expiration (même si j’avais un autre non expiré).

  1. Ouvrir le trousseau d’access
  2. Rechercher Certificats pour “DigiCert”
  3. Menu Affichage> Afficher les certificates expirés

J’ai trouvé deux certificates nommés «CA de racine EV High Assurance DigiCert», l’un expirant en novembre 2031 et l’autre expiré en juillet 2014 (quelques jours auparavant). La suppression du certificate expiré a résolu le problème pour moi.

J’espère que cela t’aides.

Pour ceux qui utilisent Msys / MinGW GIT, ajoutez ceci

  export GIT_SSL_CAINFO=/mingw32/ssl/certs/ca-bundle.crt