У меня есть веб-сайт, который я использую для размещения 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://[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
Вот подробный вывод 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
<
<p>Welcome to the mysite.com<p/>
* Connection #0 to host mysite.com left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
Единственное различие, которое я вижу, заключается в том, что git, по-видимому, использует явный файл CA, а 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 (с гитолитом и без него).
Пожалуйста, дайте мне знать, если у вас есть представление о том, что может быть неправильным или вам нужна дополнительная информация. Я бы предпочел, чтобы ssl работал правильно, а не заставлял всех отключать проверку сертификатов в git, хотя это текущее обходное решение.
Спасибо, что прочитали этот длинный пост!