Git: Trabajar con servidores que usan certificados autofirmados

La mayoría de desarrolladores, ¡e incluso algunos DEVOPS!, tienen la horrible costumbre de desactivar la verificación de certificados mediante git config http.sslVerify "false" para trabajar con servidores que usan certificados autofirmados y de esta forma evitar los errores del tipo:

1
2
3
4
C:\Users\antonio.guillen\Projects
λ git clone https://git.my-company.com/antonio.guillen/pymagit.git
Cloning into 'pymagit'...
fatal: unable to access 'https://git.my-company.com/antonio.guillen/pymagit.git/': Peer's certificate issuer has been marked as not trusted by the user.

Este post no tiene por objetivo enumerar los posibles problemas que puede traer desactivar las comprobación de certificados, saludos man-in-the-middle, sino indicar la forma correcta de trabajar en estas circunstancias. Y no, ejecutar git config http.sslVerify "false", no es la forma correcta de trabajar.

Activar la verificación de certificados

El primer paso es volver a activar la verificación de certificados mediante git config --global --unset http.sslVerify, ejemplo:

1
2
3
4
5
6
7
C:\Users\antonio.guillen\Projects
λ git config --global --list | grep http.ssl
http.sslverify=false
C:\Users\antonio.guillen\Projects
λ git config --global --unset http.sslVerify
C:\Users\antonio.guillen\Projects
λ git config --global --list | grep http.ssl

Descargar el certificado

Es posible descargar el certificado usando el navegador o desde un terminal Linux, o Windows siempre y cuando se tengan instaladas las utilidades adecuadas, ejecutando echo | openssl s_client -showcerts -connect git.my-company.com:443 | awk '/^-----BEGIN CERT/,/^-----END CERT/'. ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Users\antonio.guillen\Projects
λ mkdir C:\Users\antonio.guillen\.git-certs
C:\Users\antonio.guillen\Projects
λ echo | openssl s_client -showcerts -connect git.my-company.com:443 | awk '/^-----BEGIN CERT/,/^-----END CERT/' > C:\Users\antonio.guillen\.git-certs\ca-bundle.crt
depth=2 C = US, O = "thawte, Inc.", OU = Certification Services Division, OU = "(c) 2006 thawte, Inc. - For authorized use only", CN = thawte Primary Root CA
verify return:1
depth=1 C = US, O = "thawte, Inc.", CN = thawte SSL CA - G2
verify return:1
depth=0 C = DE, ST = Baden-W\C3\BCrttemberg, L = Stuttgart, O = My COMPANY, OU = Group IT, CN = git.my-company.com
verify return:1
DONE
C:\Users\antonio.guillen\Projects
λ ls C:\Users\antonio.guillen\.git-certs\
total 4.0K
4.0K ca-bundle.crt

Configurar git para confiar en los certificados indicados

Es posible indicar a git la lista de entidades de certificación que debe usar para comprobar los certificados mediante la variable http.sslCAInfo y la ruta absoluta hasta el archivo con las CA; ejemplo:

1
2
C:\Users\antonio.guillen
λ git config --system http.sslCAInfo c:\Users\antonio.guillen\.git-certs\ca-bundle.crt

Comprobar la configuración de git

Es posible listar la configuración global de git con git config --system --list y filtrar mediante grep para limitar la salida; ejemplo:

1
2
3
4
C:\Users\antonio.guillen
λ git config --system --list | grep -i sslcainfo
http.sslcainfo=c:\Users\antonio.guillen\.git-certs\ca-bundle.crt
sslcainfo=c:\Users\antonio.guillen\.git-certs\ca-bundle.crt

Entradas de interés

Contenidos
  1. 1. Activar la verificación de certificados
  2. 2. Descargar el certificado
  3. 3. Configurar git para confiar en los certificados indicados
  4. 4. Comprobar la configuración de git