Tengo un sitio web que estoy utilizando para albergar Redmine y varios repositorios GitSSL funciona con el navegador, wget, y el rizo, pero falla con git
Esto funciona perfectamente para http, pero no se puede clonar por 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 navegador (probado en Chrome y Firefox), consigo errores ni advertencias. También puedo
curl https://mysite.com/git/test.git
wget https://mysite.com/git/test.git
que funcionan sin quejas ni advertencias.
Aquí está la salida detallada de git:
$ GIT_CURL_VERBOSE=1 git clone https://[email protected]/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 rizo, con la información personal cambió:
* 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 utilizar un CAfile explícito mientras curl utiliza todo el directorio? Soy nuevo en ssl (al menos 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 cuenta en el servidor) y no funciona nada.
También he utilizado la herramienta openssl para verificar mi certificado en el servidor:
$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 estoy recibiendo ningún tipo de advertencia o errores en ninguno otro programa.
Vale la pena mencionar que estoy usando gitolite y redmine_git_hosting usando http inteligente para hacer la autenticación sobre https. No creo que nada de esto tenga la culpa, porque el problema existe incluso si simplemente incluyo un repositorio simple que funcione en/var/www y lo accedo directamente. Además, funciona git over ssh (con y sin gitolita).
Háganme saber si tiene alguna idea de lo que podría estar mal o si desea obtener más información. Realmente preferiría que SSL funcione correctamente, en lugar de forzar a todos a deshabilitar la comprobación de certificados en GIT, aunque esa es una solución actual.
¡Gracias por leer esta publicación larga!
Tenga en cuenta que con Git 2.5+, usted será capaz de especificar una lista de cifrado para el enrollamiento de usar. Eso podría ayudar. ver http://stackoverflow.com/a/30442395/6309 – VonC