git - source - curl windows portable
¿Cómo puedo hacer que git tell curl use openssl en lugar de gnutls sin reconstruir el paquete? (1)
git está diseñado para usar libcurl, libcurl está diseñado para usar una única biblioteca de TLS fija que no se puede cambiar en tiempo de ejecución.
Sin embargo, puede forzar a git a usar una compilación libcurl diferente en tiempo de ejecución, y que libcurl podría estar usando OpenSSL. Es más fácil hacerlo al colocar OpenSSL-using libcurl en un directorio separado del que tiene "estándar" y luego puede hacer uno de estos:
Asegúrate de que
/etc/ld.so.conf
ese nuevo directorio antes del antiguo directorio de alojamiento de libcurl, aunque luego cambiará esta configuración para todos los programas que usan libcurl y probablemente no quieras eso (según tu forma de preguntar)pon "LD_LIBRARY_PATH = [directorio donde tu libcurl especial es] git" en un script o alias llamado "git2" y utilízalo en lugar del git ordinario.
Tenemos un servidor interno que no le gusta a GnuTLS, por ejemplo:
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.
Todo lo que no sea GnuTLS habla bien, pero git parece usar GnuTLS de fábrica en Ubuntu 14.04.2 LTS, por lo que git falla con:
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
Estamos trabajando para solucionar la incompatibilidad con GnuTLS, pero mientras tanto, ¿hay alguna manera de obligar a git a decirle a curl que use otro motor SSL en tiempo de ejecución (es decir, no reconstruir git desde la fuente)?