SSL работает с браузером, wget и curl, но не работает с git

У меня есть сайт, который я использую для размещения redmine и нескольких git-репозиториев

Это отлично работает для http, но я не могу клонировать с https, т.е.

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

работает нормально, но

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

не работает

Странно то, что https, кажется, работает для всего остального, что я тестировал. Если я открываю

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

в браузере (проверено в chrome и firefox), я не получаю никаких ошибок или предупреждений. Я также могу

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

оба варианта работают без жалоб и предупреждений.

Вот устный вывод из 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

Вот устный вывод из curl, с измененной личной информацией:

* 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
<

Welcome to the mysite.com

* Connection #0 to host mysite.com left intact * Closing connection #0 * SSLv3, TLS alert, Client hello (1):

Единственная разница, которую я вижу, это то, что git, похоже, использует явный CAfile, в то время как curl использует весь каталог? Я новичок в ssl (по крайней мере, на стороне администратора), поэтому я не уверен, что это значит или как я могу настроить git, чтобы он работал так же, как curl.

Я использую git 1.7.5.4 и apache 2.2.14 на Ubuntu 10.04. Я пробовал клонировать с 3 разных хостов linux (включая другую учетную запись на самом сервере), и ничего не работает.

Я также использовал инструмент openssl для проверки моего сертификата на сервере:

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

Это может быть связано с ошибкой https://bugs.maemo.org/show_bug.cgi?id=4953, но это кажется другим, потому что я не получаю никаких предупреждений или ошибок в любой другой программе.

Возможно, стоит упомянуть, что я использую gitolite и redmine_git_hosting, используя smart http для аутентификации по https. Однако я не думаю, что в этом есть какая-то вина, потому что проблема существует, даже если я просто помещаю работающую голую репозиторию в /var/www и получаю к ней прямой доступ. Кроме того, git через ssh (с gitolite и без него) работает.

Пожалуйста, дайте мне знать, если у вас есть идеи, что может быть не так, или если вы хотите получить дополнительную информацию. Я бы предпочел, чтобы ssl работал правильно, а не заставлял всех отключать проверку сертификатов в git, хотя это и является текущим обходным решением.

Спасибо, что прочитали этот длинный пост!

23
задан stokastic 18 October 2011 в 22:16
поделиться