Как я могу заставить git Tell curl использовать openssl вместо gnutls без перекомпоновки пакета?

У нас есть внутренний сервер, который не нравится GnuTLS, например:

gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt foo.example.com
Processed 173 CA certificate(s).
Resolving 'foo.example.com'...
Connecting to '1.2.3.4:443'...
*** Verifying server certificate failed...
*** Fatal error: Error in the certificate.
*** Handshake has failed
GnuTLS error: Error in the certificate.

Все, кроме GnuTLS, говорит с ним нормально, но git, похоже, использует GnuTLS из коробки на Ubuntu 14.04.2 LTS, поэтому git завершается неудачно с:

GIT_CURL_VERBOSE=1 git clone https://foo.example.com/some-repo.git
Cloning into 'some-repo'...
* Couldn't find host foo.example.com in the .netrc file; using defaults
* Hostname was NOT found in DNS cache
*   Trying 1.2.3.4...
* Connected to foo.example.com (1.2.3.4) port 443 (#0)
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
* Closing connection 0
fatal: unable to access 'https://foo.example.com/some-repo.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

Мы работаем над устранением несовместимости с GnuTLS, но в то же время есть ли способ заставить git указать curl использовать другой механизм SSL во время выполнения (т.е. не перестраивать git из исходного кода)?

1 ответ

Решение

git создан для использования libcurl, libcurl построен для использования одной фиксированной библиотеки TLS, которую нельзя изменить во время выполнения.

Однако вы можете заставить git использовать другую сборку libcurl во время выполнения, и этот libcurl может использовать OpenSSL. Это проще всего сделать, поместив libcurl, использующий OpenSSL, в отдельный каталог из "стандартного", который у вас есть, и затем вы выполните одно из следующих действий:

  1. Удостовериться /etc/ld.so.conf выводит этот новый каталог перед старым каталогом хостинга libcurl - хотя тогда он изменит эту настройку для всех программ, использующих libcurl, и вы, вероятно, этого не захотите (в зависимости от вашего способа запроса)

  2. поместите "LD_LIBRARY_PATH=[каталог, в котором находится ваш специальный libcurl] git" в скрипт или псевдоним с именем "git2" и используйте его вместо обычного git.

Другие вопросы по тегам