En este post vamos a ver como podemos agregar certificados SSL a nuestra instancia de GitLab (ya sea Enterprise o Community) ejecutandose en Linux o Docker.
Todas las aplicaciones al dia de hoy deberian estar utilizando comunicacion segura a traves de TLS mediante certificados, y si bien estos no son gratituos podemos utilzar la CA gratitua Let's Encrypt: https://letsencrypt.org/
Let's Encrypt ha ganado mucha popularidad en los ultimos años debido a que puede emitirnos certificados SSL de manera automatizada, segura y gratis para nuestras aplicaciones, de hecho muchas aplicaciones tienen integracion nativa e integrada con Let's Encrypt para la emision y actualizacion de certificados SSL, y GitLab no es la excepcion.
Let's Encrypt puede emitir 3 tipos de certificados
Certificado SSL Standalone
Certificado SSL SAN
Certificado SSL Wildcard
Voy a dar un pequeño repaso de que son cada uno de ellos:
Certificado SSL Standalone
Firma un solo dominio o subdominio, por ej. si tenemos el sitio example.domain.com solo este sitio estara protegido por el certificado
Certificado SSL SAN
Este tipo de certificado esta emitido para un dominio o subdominio pero puede contener nombres alternativos dentro del mismo certificado, por ej. un certificado emitido para example.domain.com podria contener los nombres demo.example.com y demo10.example.com
Dependiendo el tipo de CA que se use pueden imponer un limite en la cantidad de nombres alternativos a firmar
Certificado SSL Wildcard
Este tipo de certificado firma todos los subdominios de un dominio, por ej. si tenemos el dominio example.com todo lo que se encuentre delante de example.com va a poder ser firmado por el certificado.
Bueno, esta fue una breve explicacion de los certificados SSL (creo que me fui por las ramas un poco), ahora veamos como podemos integrar estos dentro de GitLab.
Antes de avanzar con el setup es necesario definir 2 registros DNS del tipo "A" apuntando a la IP de nuestro GitLab, dado que en este caso queremos segurizar el acceso a GitLab y a su registro vamos a crear dos:
gitlab.cloudlegion.com.ar
registry.cloudlegion.com.ar
Ambas apuntando a la IP de nuestro GitLab (40.113.245.121)
Para esto vamos al archivo de configuracion que utiliza GitLab para mapear las configuraciones, para este post se utilizo una version enterprise pero es lo mismo si se utiliza una version community.
nano /etc/gitlab/gitlab.rb
Dentro de el buscamos la linea "Let's Encrypt" y lo configuramos de la siguiente manera
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['cibiri@cloudlegion.com.ar']
letsencrypt['group'] = 'root'
letsencrypt['key_size'] = 2048
letsencrypt['owner'] = 'root'
letsencrypt['wwwroot'] = '/var/opt/gitlab/nginx/www'
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = 0
letsencrypt['auto_renew_minute'] = 30
letsencrypt['auto_renew_day_of_month'] = "*/4"
Modificamos la linea de la configuracion para el registro:
registry_external_url 'https://registry.cloudlegion.com.ar'
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = "registry.cloudlegion.com.ar"
gitlab_rails['registry_port'] = "443"
gitlab_rails['registry_path'] = "/var/opt/gitlab/gitlab-rails/shared/registry"
Modificados estos cambios reinicamos GitLab mediante el siguiente comando:
sudo gitlab-ctl reconfigure
O bien reiniciamos el contenedor de Docker si es que lo estamos ejecutando de esa manera.
Con esto ya tenemos andando nuestro GitLab con acceso seguro:
Esta no es la unica manera en la que se puede proporcionar SSL a una instancia de GitLab, tambien se puede utilizar un proxy reverso con terminacion SSL, esto lo veremos en un post futuro.
Espero que les sirva


