Git sur Windows ne fonctionne pas avec la télécommande en raison de “le protocole SSL” erreurs

tl;dr

Git sur Windows cesse de se connecter à github parce que de mystérieux "le protocole SSL" erreurs. Halp!

La Question

Je suis du développement sur Windows, à l'aide d'un privé dépôt GitHub de commande de la source. Quand j'ai démarrer mon système, je suis en mesure d'accéder à la distance repo sans problème - pull, push, fetch, etc. tous fonctionnent tout aussi bien.

Après un certain laps de temps(*), cela s'arrête, et j'obtiens l'erreur suivante:

fatal: impossible d'accéder à 'https://github.com/our-team/private-repo.git/': Inconnu SSL erreur de protocole dans le cadre de github.com:443

(*) La quantité de temps semble variable - j'ai vu aussi peu qu'une heure ou deux, jusqu'à une journée entière. Habituellement, après le retour du système de couchage, il semble être un problème, mais je ne sais pas si elle est causée par un temps de retard ou par le système de couchage.

Vérification via cURL, je reçois

λ curl -v "https://github.com/our-team/private-repo.git/"
*   Trying 192.30.252.130...
* Connected to github.com (192.30.252.130) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
  CApath: none
* TLSv1.0, TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to github.com:443
* Closing connection 0
curl: (35) Unknown SSL protocol error in connection to github.com:443

À l'aide de set GIT_CURL_VERBOSE=1 avec git pull montre des informations similaires. Parfois, il réussit (voir ci-dessous), mais la plupart du temps, il échoue.

Note En Outre

Il y a un peu de la forme sporadique de la nature pour elle - parfois, je peux obtenir des demandes de réussir, mais une fois qu'il commence à exploser, il est généralement cassé 9 de 10 demandes ou plus.

Succès d'une demande cURL ressemble:

λ curl -v "https://github.com/our-team/private-repo.git/"
*   Trying 192.30.252.130...
* Connected to github.com (192.30.252.130) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
  CApath: none
* TLSv1.0, TLS handshake, Client hello (1):
* TLSv1.0, TLS handshake, Server hello (2):
* TLSv1.0, TLS handshake, CERT (11):
* TLSv1.0, TLS handshake, Server finished (14):
* TLSv1.0, TLS handshake, Client key exchange (16):
* TLSv1.0, TLS change cipher, Client hello (1):
* TLSv1.0, TLS handshake, Finished (20):
* TLSv1.0, TLS change cipher, Client hello (1):
* TLSv1.0, TLS handshake, Finished (20):
* SSL connection using TLSv1.0 /AES128-SHA
* Server certificate:
*        subject: businessCategory=Private Organization; 1.3.6.1.4.1.311.60.2.1.3=US; 1.3.6.1.4.1.311.60.2.1.2=Delaware; serialNumber=5157550; street=548 4th Street; postalCode=94107; C=US; ST=California; L=San Francisco; O=GitHub, Inc.; CN=github.com
*        start date: 2014-04-08 00:00:00 GMT
*        expire date: 2016-04-12 12:00:00 GMT
*        subjectAltName: github.com matched
*        issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 Extended Validation Server CA
*        SSL certificate verify ok.
> GET /our-team/private-repo.git/HTTP/1.1
> User-Agent: curl/7.41.0
> Host: github.com
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: GitHub.com
< Date: Mon, 11 May 2015 15:19:43 GMT
< Content-Type: text/html
< Content-Length: 178
< Location: https://github.com/our-team/private-repo/
< Vary: Accept-Encoding
< X-Served-By: 76f8aa18dab86a06db6e70a0421dc28c
<
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host github.com left intact

La Question

J'ai googlé un peu bon pour essayer de trouver cette (au cours de plusieurs semaines, donc je n'ai pas les liens), mais la plupart des suggestions semblent pointer les erreurs de certificat ou OpenSSL différences de version du /des bugs (ce qui ne serait pas sporadique comme ça autant que je sache).

Ce qui pourrait être la cause de cet échec, et comment puis-je le résoudre?

Logiciel Concerné:

λ git --version
git version 1.9.5.msysgit.1

λ curl --version
curl 7.41.0 (i386-pc-win32) libcurl/7.41.0 OpenSSL/0.9.8zf zlib/1.2.8
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz
Qu'advient-il si vous utilisez la cible de redirection d'url sur la ligne de commande? "curl-v github.com/our-team/private-repo"
bonne idée! Il semblait être bien le même comportement. La plupart du temps, la boucle échouent. Quand il réussit enfin à la négociation SSL, il renvoie une erreur 404 (ce qui est normal, car c'est un privé repo et je ne suis pas envoyer des informations d'authentification via cURL). Si les symptômes semblent rester.

OriginalL'auteur Sean | 2015-05-11