我怎么能让git告诉curl使用openssl而不是gnutls而不重build软件包?

我们有一个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似乎在Ubuntu 14.04.2 LTS中使用了GnuTLS,因此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引擎(即不是从源重buildgit)?

git是为了使用libcurl而构建的,libcurl是为了使用一个固定的TLS库而构建的,不能在运行时更改。

但是,您可以强制git在运行时使用不同的libcurl构建,并且libcurl可以使用OpenSSL。 最简单的办法是将OpenSSL-使用libcurl放在一个单独的目录中,然后再执行下面的一个:

  1. 确保/etc/ld.so.conf在旧的libcurl托管目录之前列出了新的目录 – 尽管如此,它将使用libcurl更改所有程序的设置,而且您可能不希望这样做(根据您的提问方式)

  2. 把“LD_LIBRARY_PATH = [你的特殊libcurl所在的目录] git”放到一个名为“git2”的脚本或别名中,并用它来代替普通的git。