Partimos de la base que tenemos un servidor GitLab instalado y corriendo tal como vimos en este post: http://blog.malditopc.com/nuestro-propio-servidor-git-con-gitlab. Nuestro servidor de repositorios es funcional, pero por supuesto sería más recomendable que toda la información que intercambiamos con el mismo viajase de forma segura, para lo cual obligaremos a que nuestro servidor GitLab trabaje bajo https en lugar de bajo http.
Por defecto GitLab espera que nuestros archivos de certificado (claves publica y privada) se encuentren en el directorio /etc/gitlab/ssl/ bajo los nombres: nuestro-fqdn.key y nuestro-fqdn.crt. Así que creamos ese directorio:
mkdir -p /etc/gitlab/ssl
Ahora empleamos OpenSSL para generar nuestro propio certificado autofirmado:
openssl req -x509 -nodes -days 1825 -newkey rsa:2048 -keyout /etc/gitlab/ssl/gitlab.malditopc.com.key -out /etc/gitlab/ssl/gitlab.malditopc.com.crt
Con este comando estamos indicando:
- -x509: El certificado estará autofirmado.
- -nodes: La clave no se genera encriptada. El problema de generar una clave encriptada es que posteriormente nos pedirá la contraseña (passphrase) usada para encriptar la clave al reiniciar el servidor o el servicio, lo cual puede ser un problema. Otra opción sería no usar este parámetro y cuando nos pregunte por la passphrase dejarla en blanco. Claramente es de vital importancia que nadie tenga acceso a este archivo al no estar la clave privada encriptada.
- -days 1825: El certificado tendrá una validez de 5 años.
- -newkey rsa:2048: Indicamos que tanto la solicitud de certificado como la clave privada se generarán al mismo tiempo y se empleara el algoritmo RSA con una longitud de clave de 2048 bits.
- -keyout fqdn.key: Archivo que contendrá la clave privada.
- -out fqdn.cert: Archivo que contendrá el certificado (clave publica).
Al ejecutar este comando se nos realizarán una serie de preguntas:
- Country Name (2 letter code) –> Código de país en formato ISO de dos letras (ES para España).
- State or Province Name (full name) [Some-State] –> Estado o provincia.
- Locality Name (eg, city) []: –> Localidad o ciudad.
- Organization Name (eg, company) [Internet Widgits Pty Ltd]: –> Nombre de la organización.
- Organizational Unit Name (eg, section) [] –> Nombre del departamento dentro de la organización
- Common Name (eg, YOUR name) []: –> El FQDN. Muy importante que este valor sea correcto.
- Email Address: –> Dirección de correo de contacto.
Adecuamos los permisos:
chmod -R 600 /etc/gitlab/ssl/ chmod 700 /etc/gitlab/ssl/
Después debemos editar el archivo /etc/gitlab/gitlab.rb en el cual lo primero que modificaremos es la directiva external_url que indica la URL de GitLab modificando el http por https y que se encuentra al principio del fichero gitlab.rb:
external_url 'https://gitlab.malditopc.com'
Ahora modificaremos algunas de las opciones presentes en la sección GitLab Nginx. Al modificar la URL externa, el servidor nginx dejara de servir las peticiones http, así que vamos a obligar a que estas sean redirigidas a https, para lo cual descomentamos la directiva nginx[‘redirect_http_to_https’] estableciendo su valor a true.
nginx['redirect_http_to_https'] = true
Si observamos en esta misma sección tenemos varias directivas que podríamos modificar para adecuar el entorno a nuestro gusto. Por ejemplo, si queremos almacenar nuestros certificados en otra ruta y/o otros nombres, bastaría con descomentar y modificar las directivas nginx[‘ssl_certificate’] y nginx[‘ssl_certificate_key’]. Pero a nosotros nos vale con los valores por defecto.
Por último tan solo queda ejecutar el comando de reconfiguración de GitLab para que se apliquen las modificaciones indicadas en /etc/gitlab/gitlab.rb a nuestro entorno:
gitlab-ctl reconfigure
Y eso es todo, a partir de este momento GitLab funcionara de forma segura bajo https.