[Edit] Le support de LetsEncrypt est maintenant natif. Consulter l’article

GitLab c'est bien, mais Gitlab en SSL c'est mieux ! Un petit article rapide pour vous montrer la simplicité de mise en place des certificats SSL gratuit fourni par LetsEncrypt.

La première étape acme.sh

Le plus simple sous Linux pour générer des certificats LetsEncrypt c'est le client en bash Acme.sh :

curl https://get.acme.sh | sh

Ou via le sources :

git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh
./acme.sh --install

😎 Pas besoin d’être root.

Configurer GitLab

Maintenant que nous avons notre client « Acme LetsEncrypt », il faut configurer GitLab pour qu'il accepte la connexion entrante venant de LetsEncrypt et qui va valider que vous êtes le propriétaire du nom de domaine. Pour ça il va falloir modifier la configuration « par défaut » de GitLab.

Il faut éditer le fichier /etc/gitlab/gitlab.rb pour ajouter la configuration suivante :

nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"
mattermost_nginx['custom_gitlab_mattermost_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"

⚠️ Dans mon cas je vais valider également un certificat pour le Mattermost inclus dans GitLab.

Maintenant que la configuration est modifiée il faut la faire prendre en compte par GitLab :

$ gitlab-ctl reconfigure

On va également créer un dossier qui va recevoir le fichier .key et .crt.

$ mkdir -p /etc/gitlab/ssl/

Demander un certificat

Pas grand-chose à faire, il suffit juste de taper la bonne commande :

$ acme.sh --issue -d gitlab.votre_domaine.fr -d mattermost.votre_domaine.fr -w /var/www/letsencrypt --keypath /etc/gitlab/ssl/cert.key --certpath /etc/gitlab/ssl/cert.crt --fullchain-file /etc/gitlab/ssl/fullchain.crt

Et voilà, normalement les fichiers sont disponibles dans le dossier /etc/gitlab/ssl/

Activer le SSL dans GitLab

Maintenant que le certificat a été généré il faut activer réellement le SSL dans GitLab, pour ça retournons dans le fichier /etc/gitlab/gitlab.rb et ajouter la configuration suivante :

# Permet d’indiquer l’emplacement des certificats SSL
mattermost_nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.crt"
mattermost_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/cert.key"
nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/cert.key"

# Permet la redirection du HTTP vers le HTTPS
nginx['redirect_http_to_https'] = true
mattermost_nginx['redirect_http_to_https'] = true

Changer la configuration de vos URL dans le /etc/gitlab/gitlab.rb pour ajouter un s après http :

Finalisont en appliquant la configuration :

$ gitlab-ctl reconfigure

Et voilà votre GitLab est maintenant configuré en SSL.

Renouvellement

Les certificats LetsEncrypt ont une durée de validité de 90 jours, mais ils peuvent être renouvelés à l'infinies, avec acme.sh pas de soucis un cron a automatiquement été mis en place lors de l'installation du client acme. Normalement tous les 60 jours vos certificats seront automatiquement renouvelés. Dans mon cas :

$ crontab -l
52 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null