SSL funciona con browser, wget y curl, pero falla con git

Tengo un website que estoy usando para alojar networkingmine y varios repositorys git

Esto funciona perfectamente para http, pero no puedo clonar con https, es decir,

git clone http://mysite.com/git/test.git 

funciona bien, pero

 git clone https://mysite.com/git/test.git 

falla

Lo extraño es que https parece funcionar para todo lo demás que he probado. Si abro

 https://mysite.com/git/test.git 

en un browser (probado en Chrome y Firefox), no recibo errores ni advertencias. también puedo

 curl https://mysite.com/git/test.git wget https://mysite.com/git/test.git 

ambos funcionan sin quejas ni advertencias.

Aquí está la salida detallada de git:

 $ GIT_CURL_VERBOSE=1 git clone https://user@mysite.com/test/test.git Cloning into test... Password: * Couldn't find host mysite.com in the .netrc file; using defaults * About to connect() to mysite.com port 443 (#0) * Trying 127.0.0.1... * Connected to mysite.com (127.0.0.1) port 443 (#0) * found 157 certificates in /etc/ssl/certs/ca-certificates.crt * server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none * Closing connection #0 * Couldn't find host mysite.com in the .netrc file; using defaults * About to connect() to mysite.com port 443 (#0) * Trying 127.0.0.1... * Connected to mysite.com (127.0.0.1) port 443 (#0) * found 157 certificates in /etc/ssl/certs/ca-certificates.crt * server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none * Closing connection #0 error: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none while accessing https://user\ @mysite.com/test/test.git/info/refs fatal: HTTP request failed 

Aquí está la salida detallada de curl, con la información personal modificada:

 * About to connect() to mysite.com port 443 (#0) * Trying 127.0.0.1... connected * Connected to mysite.com (127.0.0.1) port 443 (#0) * successfully set certificate verify locations: * CAfile: none CApath: /etc/ssl/certs * SSLv3, TLS handshake, Client hello (1): * SSLv3, TLS handshake, Server hello (2): * SSLv3, TLS handshake, CERT (11): * SSLv3, TLS handshake, Server key exchange (12): * SSLv3, TLS handshake, Server finished (14): * SSLv3, TLS handshake, Client key exchange (16): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSL connection using DHE-RSA-AES256-SHA * Server certificate: * subject: C=US; <... cut my certs info ...> * start date: 2011-10-18 00:00:00 GMT * expire date: 2013-10-17 23:59:59 GMT * subjectAltName: mysite.com matched * issuer: C=GB; ST=Greater Manchester; L=Salford; O=COMODO CA Limited; CN=COMODO High-Assurance Secure Server CA * SSL certificate verify ok. > GET / HTTP/1.1 > User-Agent: curl/7.21.6 (x86_64-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3 > Host: mysite.com > Accept: */* > < HTTP/1.1 200 OK < Date: Tue, 18 Oct 2011 21:39:54 GMT < Server: Apache/2.2.14 (Ubuntu) < Last-Modified: Fri, 14 Oct 2011 03:20:01 GMT < ETag: "8209c-87-4af39bb89ccac" < Accept-Ranges: bytes < Content-Length: 135 < Vary: Accept-Encoding < Content-Type: text/html < X-Pad: avoid browser bug < <p>Welcome to the mysite.com<p/> * Connection #0 to host mysite.com left intact * Closing connection #0 * SSLv3, TLS alert, Client hello (1): 

La única diferencia que puedo ver es que git parece estar usando un CAfile explícito mientras que curl usa todo el directory. Soy nuevo en ssl (al less en el lado de administración), así que no estoy seguro de lo que esto significa o cómo podría configurar git para que funcione de la misma manera que curl.

Estoy usando git 1.7.5.4 y apache 2.2.14 en Ubuntu 10.04. Intenté clonar desde 3 hosts diferentes de Linux (incluida otra count en el server) y no funciona nada.

También utilicé la herramienta openssl para verificar mi cert en el server:

 $openssl verify -purpose sslserver -CAfile chain.crt signed.pem signed.pem: OK 

Esto puede estar relacionado con el error https://bugs.maemo.org/show_bug.cgi?id=4953 pero parece diferente porque no recibo ninguna advertencia o error en ningún otro progtwig.

Vale la pena mencionar que estoy usando gitolite y networkingmine_git_hosting usando http inteligente para hacer la authentication sobre https. No creo que nada de esto tenga la culpa, porque el problema existe incluso si simplemente incluyo un repository simple que funcione en / var / www y lo accedo directamente. Además, funciona git over ssh (con y sin gitolita).

Por favor, avíseme si tiene alguna idea de lo que podría estar mal o si desea get más información. Realmente preferiría que SSL funcione correctamente, en lugar de forzar a todos a deshabilitar la comprobación de certificates en GIT, aunque esa es una solución actual.

¡Gracias por leer esta larga publicación!

Resulta que esto fue un problema de gnuTLS. gnuTLS es sensible a los pedidos, mientras que openssl no lo es. Rehice los certificates en mi file cert intermedio y el problema desapareció

La respuesta de XCondE resolverá el problema, pero apagar las advertencias de security siempre parece una mala idea. Si está ejecutando en un cuadro ubuntu, entonces el problema puede ser que el certificate CA para su server web no se encuentra en el file /etc/ssl/certs/ca-certificates.crt. Me encontré con esto con un server git alojado en un server web con un certificate SSL firmado por http://www.incommon.org.

Puede agregar el certificate intermedio a su file de certificates ca, de la siguiente manera:

 wget http://cert.incommon.org/InCommonServerCA.crt openssl x509 -inform DER -in InCommonServerCA.crt -out incommon.pem cat /etc/ssl/certs/ca-certificates.crt incommon.pem > ca-certs2.crt sudo cp /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt.bak sudo cp ca-certs2.crt /etc/ssl/certs/ca-certificates.crt 

Hay una buena discusión de lo que sucede detrás de las escenas aquí: http://curl.haxx.se/docs/sslcerts.html

Encontré este error con uno de mis certificates Comodo PositiveSSL y pude solucionarlo cambiando el order de los certificates intermedios.

Después de orderar el certificate, me proporcionaron los siguientes files:

  • Certificado de CA raíz – AddTrustExternalCARoot.crt
  • Certificado de CA intermedio: COMODORSAAddTrustCA.crt
  • Certificado de CA intermedio: COMODORSADomainValidationSecureServerCA.crt
  • Certificado comodín PositiveSSL – STAR_mydomain_com.crt

Originalmente, el order de los certificates en .crt que estaba proporcionando a Nginx era el siguiente:

  • Certificado comodín PositiveSSL – STAR_mydomain_com.crt
  • Certificado de CA intermedio: COMODORSAAddTrustCA.crt
  • Certificado de CA intermedio: COMODORSADomainValidationSecureServerCA.crt

Sin embargo, invertí el order de los dos últimos certificates y Git ya no arroja errores de verificación.

git usa gnutls para esto, que requiere que se especifique CA. Esto se puede hacer con un repository con:

 git config http.sslcapath <path to CA directory> 

O

 git config http.sslcainfo <path to CA cert> 

También puede especificar –system o –global.

El problema puede ser que no configuró correctamente Apache

Es posible que deba agregar su nombre de server al file de configuration de Apache /etc/apache2/sites- habilitado / pnetworkingeterminado -ssl.conf, por ejemplo:

 ServerName demo.personalserver.com 

De: https://www.progclub.org/blog/2014/09/03/gnutls_handshake-failed-using-git/#comment-96924

exportar GIT_SSL_NO_VERIFY = 1

Desde http://blog.breadncup.com/2011/06/09/skip-git-ssl-verification/

ADVERTENCIA: como algunas personas mencionaron, esto deshabilita la verificación, dejándolo abierto a una gran cantidad de problemas de security. No debe confiar en ello a largo ploop, pero, en caso de apuro, hará el trabajo.