73 votes

Git - La fonction de révocation n'a pas pu vérifier la révocation du certificat.

Je suis en train d'essayer de cloner depuis Github en utilisant à la fois Github Desktop et le terminal git mais je continue de recevoir cette erreur :

Clonage dans 'C:\Utilisateurs\John Doe\espace de travail\MonProjet'...
fatal: impossible d'accéder à 'https://github.com/JohnDoe/MyProject.git/': 
schannel: l'initialisation suivante de InitializeSecurityContext a échoué : Erreur inconnue (0x80092012) - 
La fonction de révocation n'a pas pu vérifier la révocation du certificat.

Même problème lors de la récupération d'un dépôt existant.

J'ai déjà essayé de télécharger les clés SSH trouvées dans ~/.ssh/github-ssh.pub dans les paramètres de Github mais cela ne change rien.

EDIT: Je viens de vérifier, cela se produira même si j'essaie de cloner un dépôt inexistant.

0 votes

Pour travailler avec les clés SSH, vous devez changer l'URL de https://github.com/JohnDoe/MyProject.git en git@github.com:JohnDoe/MyProject.git.

70voto

Clockwork-Muse Points 6806

Cette erreur se produit également fréquemment lorsque vous êtes sur un réseau d'entreprise qui effectue une attaque de l'homme du milieu sur tout le trafic, puis bloque la vérification de révocation. Bien sûr, la situation idéale est de ne pas bloquer les vérifications (ou du moins, d'avoir une liste blanche d'URL), mais il peut être nécessaire de contourner ce problème.

Une option consiste, comme dans la première partie de la réponse de Mike, à utiliser les liaisons OpenSSL à la place. Même si cela fonctionne, cela nécessite une maintenance manuelle des listes de certificats, ce qui peut ne pas être pratique dans des situations extrêmes (par exemple, de nouveaux certificats racine émis chaque jour, bien que cela soit peu probable).

L'autre option, semblable à la deuxième partie de la réponse de Mike, consiste à désactiver la vérification de révocation.
Des versions récentes, 2.19 et supérieures, de git-for-windows fournissent un paramètre http.schannelCheckRevoke:

Utilisé pour imposer ou désactiver les vérifications de révocation de certificat dans cURL lorsque http.sslBackend est défini sur "schannel". Par défaut, défini sur true si non défini. Il est seulement nécessaire de désactiver cela si Git affiche constamment des erreurs et que le message concerne la vérification du statut de révocation d'un certificat. Cette option est ignorée si cURL ne prend pas en charge le paramétrage de l'option SSL pertinente à l'exécution.

... vous pouvez donc simplement désactiver la vérification de révocation dès le départ:
git config --global http.schannelCheckRevoke false

Remarquez que, contrairement à la désactivation complète du SSL, cette méthode n'est pas intrinsèquement moins sécurisée que l'utilisation de la réponse de Mike pour des dépôts spécifiques : si vous capturez et configurez une liste de révocation vide (le cas habituel), vous avez effectivement désactivé la vérification de révocation. Désactiver la vérification de révocation ne devient un risque que en cas de compromission de la clé privée (à un moment donné de la chaîne), ce qui est rare et difficile.

Remarquez également que dans un contexte de MITM d'entreprise, la vérification de révocation est effectuée pour vous: aucun proxy valable n'émettrait un certificat pour un certificat invalide ou compromis (connu).

1 votes

Alors, cela se produit en raison des vérifications MITM. Mais pourquoi cela ne échoue-t-il pas lors de l'utilisation du backend OpenSSL?

1 votes

@ctwx - Je ne suis pas complètement sûr. Mon hypothèse est qu'OpenSSL a probablement la vérification de révocation désactivée par défaut (notez que l'option est spécifique à schannel), ou qu'il est plus tolérant à certaines erreurs (par exemple, en ignorant simplement les 404). Cela est dû au fait que la vérification de révocation est intrinsèquement problématique - vous n'avez aucune garantie que vous pouvez contacter avec succès les serveurs émetteurs pour vérifier le statut de validité.

56voto

Mike Allen Points 5616

C'est toujours une mauvaise idée de désactiver la vérification du certificat (en définissant http.sslVerify sur false).

Je pense que le problème ici est que, lorsque vous avez installé git, vous avez choisi d'utiliser la bibliothèque Windows Secure Channel au lieu de la bibliothèque OpenSSL:

Options d'installation de Git

Comme l'a souligné @CurtJ.Sampson (merci, Curt!), vous pouvez passer à l'utilisation de la bibliothèque OpenSSL à la place, ce qui résoudra votre problème. Cela peut être fait avec la commande suivante:

git config --global http.sslBackend openssl

Alternativement, vous pouvez réinstaller git, en spécifiant la bibliothèque OpenSSL dans le processus.

N'oubliez pas de réactiver la vérification SSL de git avec:

git config --global http.sslVerify true

Mise à jour: Si vous utilisez des certificats auto-signés ou d'entreprise sur votre propre serveur git, et que vous obtenez une erreur en tentant de vous connecter à celui-ci (comme self signed certificate in certificate chain, ou SSL certificate problem: unable to get local issuer certificate), alors la solution est d'indiquer à git où trouver le CA qui a été utilisé pour signer le certificat de ce site. Vous pouvez le faire avec la commande de configuration suivante:

git config --global http.{votre URL de site ici}.sslcainfo "{chemin vers votre fichier de certificat}"

Par exemple, si vous avez un serveur git local à https://my.gitserver.com/ et que le CA qui a signé le certificat du site est dans C:\Certs\MyCACert.crt, alors vous devrez saisir:

git config --global http.https://my.gitserver.com/.sslcainfo "C:\Certs\MyCACert.crt"

Ceci est une solution plus robuste comparée à ajouter votre certificat CA au fichier ca-bundle.crt intégré de git, puisque ce fichier sera écrasé lors de la prochaine mise à jour de git.

4 votes

Vous n'avez pas besoin de réinstaller : vous pouvez git config --global http.sslBackend openssl pour basculer votre compte sur cette machine pour utiliser OpenSSL, ou le définir sur schannel pour revenir en arrière. git config --list vous indiquera les paramètres actuels; les derniers l'emportent sur les premiers.

0 votes

Malheureusement, lorsque je passe à OpenSSL, je me retrouve avec une erreur différente: "self signed certificate in certificate chain." (Cela pourrait bien être lié à la configuration du proxy, bien que j'utilise le même proxy d'entreprise, accédé via HTTP, dans les deux cas.)

0 votes

@CurtJ.Sampson Merci d'avoir souligné le paramètre http.sslBackend. Je pense que vous pouvez contourner l'erreur "certificat auto-signé" en ajoutant votre CA en utilisant git config --global http.https://votre.site.ici/.sslcainfo chemin.vers.votre.ca.cert (fonctionne pour moi, en tout cas).

9voto

nailed IT Points 31

J'ai rencontré cette erreur en travaillant avec Vagrant (Version installée : 2.2.16) sur Windows 10, causée par Kaspersky Anti-Virus et a été résolue lorsque j'ai ajouté les sites vagrantcloud.com et cloud-images.ubuntu.com dans les adresses de confiance pour permettre à l'antivirus de scanner les connexions chiffrées et de les autoriser en tant que site de confiance. Plus d'informations sur les modifications des paramètres de l'antivirus peuvent être trouvées sur https://support.kaspersky.com/KIS/2019/en-US/157530.htm

Pour information, les logiciels antivirus sont connus pour causer de telles erreurs, tout ce que vous avez à faire est d'identifier le site à partir duquel le téléchargement a lieu et l'ajouter aux adresses de confiance pour le programme antivirus. Dans mon cas, c'était Kaspersky Anti-Virus. Peut-être qu'exécuter la commande en utilisant --debug pour obtenir le site adjactif serait une bonne idée.

0 votes

Cela a résolu mon problème. Merci pour l'info !

0 votes

Merci. Cela a sauvé ma vie. Pour la boîte CentOS, ajoutez cloud.centos.org à la liste des domaines de confiance avec vagrantcloud.com

1voto

Chandan Points 11

Récemment confronté à une erreur similaire avec l'IDE IntelliJ Idea et je n'ai pas pu extraire le code de git. il a lancé une erreur

Impossible d'accéder à :schannel: échec de la prochaine initialisation de InitializeSecurityContext : erreur inconnue (0x80092012) - La fonction de révocation n'a pas pu vérifier la révocation du certificat.

Je peux extraire le code une fois que j'ai ajouté une entrée au gestionnaire d'informations d'identification Windows (vérifiez le panneau de configuration) pour l'URL git et le mot de passe pour le git.

0 votes

Juste pour information : Utilisation du système Windows 10

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X