web-dev-qa-db-fra.com

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

J'essaie de cloner Github en utilisant à la fois Github Desktop et le shell Git, mais je continue à avoir cette erreur:

Cloning into 'C:\Users\John Doe\workspace\MyProject'...
fatal: unable to access 'https://github.com/JohnDoe/MyProject.git/': 
schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - 
The revocation function was unable to check revocation for the certificate.

Même problème lors de l'extraction d'un référentiel existant.

J'ai déjà essayé de télécharger des clés SSH trouvées dans ~/.ssh/github-ssh.pub aux réglages de Github mais cela n’aide en rien.

EDIT: Juste vérifié, cela se produira même si j'essaie de cloner un référentiel inexistant.

31
Mordechai

C’est toujours une mauvaise idée de désactiver la vérification des certificats (paramètre http.sslVerify à false).

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

Git installation options

Comme l'a souligné @ CurtJ.Sampson (merci, Curt!), Vous pouvez utiliser la bibliothèque OpenSSL, ce qui corrigera votre problème. Cela peut être fait avec la commande suivante:

git config --global http.sslBackend openssl

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

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

git config --global http.sslVerify true

Mise à jour : Si vous utilisez vous-même des certificats d'entreprise ou des certificats d'entreprise git, et que vous obtenez un erreur lors de la tentative de connexion (par exemple certificat auto-signé dans la chaîne de certificats, ou problème de certificat SSL: impossible d'obtenir le certificat de l'émetteur local), La solution est de dire 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.{your site's URL here}.sslcainfo "{path to your cert file}"

Par exemple, si vous avez un serveur git local à https://my.gitserver.com/ et le [~ # ~] ca [~ # ~] qui a signé le certificat du site est en C:\Certs\MyCACert.crt, vous devrez alors entrer:

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

Il s’agit d’une solution plus robuste que l’ajout de votre certificat d’autorité de certification à git fourni ca-bundle.crt fichier, car ce fichier sera écrasé lors de la prochaine mise à jour git.

31
Mike Allen

Cette erreur est également fréquemment rencontrée lorsque vous êtes sur un réseau d'entreprise qui exécute MITM sur tout le trafic, puis bloque la vérification de la révocation. Bien que, de toute évidence, l’idéal soit de ne pas bloquer les vérifications (ou du moins, d’avoir une liste blanche d’URL), il peut être nécessaire de contourner ce problème.

Une option est, comme dans la première partie de la réponse de Mike, en utilisant les liaisons OpenSSL à la place . Bien que 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 publiés tous les jours, 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 la révocation.
Les versions récentes, 2.19 et supérieures, de git-for-windows fournissent un http.schannelCheckRevoke réglage :

Utilisé pour appliquer ou désactiver les vérifications de révocation de certificats dans cURL lorsque http.sslBackend est défini sur "schannel". La valeur par défaut est true si non défini. N’aurez besoin de le désactiver que si Git est constamment en erreur et que le message concerne la vérification de l’état de révocation d’un certificat. Cette option est ignorée si cURL ne prend pas en charge la définition de l'option SSL appropriée au moment de l'exécution.

... afin que vous puissiez simplement désactiver la vérification de la révocation:
git config --global http.schannelCheckRevoke false

Notez que, contrairement à la désactivation complète de SSL, ce n'est pas intrinsèquement moins sûr que d'utiliser la réponse de Mike pour des référentiels spécifiques: si vous capturez et configurez une liste de révocation vide (cas habituel), vous avez bien désactivé la vérification de révocation. Désactiver la vérification de la révocation ne devient un risque qu'en cas de compromission de clé privée (à un moment donné de la chaîne), ce qui est rare et difficile.

Notez également que, dans un paramètre d'entreprise MITM, une vérification de révocation est effectuée: aucun proxy intéressant à utiliser n'émettrait de certificat pour un certificat invalide ou compromis (connu).

23
Clockwork-Muse