Du SSL rapide et gratuit pour vos services

Il est passé le temps où on était obligé de payer pour un certificat SSL et où il fallait remplir 15 000 papiers et attendre la réponse de l'autorité de certification.

Aujourd'hui nous avons let's encrypt qui a décidé de mettre un gros coup de pied dans la fourmilière en simplifiant tout ça et surtout, en rendant la génération du certificat totalement gratuit.

Voyons comment, en quelques minutes, nous allons pouvoir rendre nos applications accessibles en HTTPS.

Installation de l'utilitaire

Pour commencer, il faut installer un utilitaire appelé certbot sur la machine vers laquelle pointe les domaines que nous souhaitons certifier.

Il est disponible sur les repos backport à partir de la version 8 de debian.

Dans le fichier /etc/apt/sources.list ajouter la ligne :

deb http://ftp.debian.org/debian stretch-backports main

Cela permettra à apt de pouvoir chercher des paquets sur le backport de Stretch (debian 9).

Ensuite l'installation est tout ce qu'il y a de plus classique.

$ sudo apt-get update
$ sudo apt-get -t stretch-backports install "certbot"

Certifions.

La méthode que j'utilise pour certifier un nom de domaine n'est liée à aucune techno ou outil particulier. Elle est générique.

Par contre, elle nécessite de couper tous les services qui potentiellement écoute sur le port 80.

Certbot va lancer un micro serveur qui va fournir sur le port 80 les infos nécessaires pour la certification. Il a donc besoin que ce port soit libre.

$ sudo certbot certonly --standalone -d domaine.com
  • --standalone est la méthode que nous utilisons pour effectuer le processus de certification
  • -d permet d'indiquer les domaines à certifier. Vous pouvez certifier plusieurs domaines en même temps en rajoutant des -d. Bien-sûr il faut que tous ces domaines pointent vers la machine sur laquelle nous lançons cette commande.

Une fois le processus terminé, vous retrouverez les fichiers .pem dans le dossier /etc/letsencrypt/live/[domaine]/.

Exemples d'utilisation

Nginx sert en HTTPS

Demander à Nginx d'écouter sur le port 443 n'est pas compliqué :

server {
  listen *:443 ssl http2;

  ssl_certificate /etc/letsencrypt/live/[domaine]/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/[domaine]/privkey.pem;
}

Tout ce que nous avons eu à faire c'est de lui indiquer qu'il fallait écouter sur le port 443 et où était stocké les certificats/clés.

Gitlab et SSL

Tout aussi simple, le support du SSL par Gitlab nécessite les actions suivantes :

  • Modifier l'adresse de http://[domaine-gitlab] à https://[domaine-gitlab] dans le fichier gitlab.rb
# /etc/gitlab/gitlab.rb

external_url "https://[domaine]"
  • Ajouter les fichiers crt et .key dans le dossier /var/opt/gitlab/ssl/. A créer s'il n'existe pas. Dans le dossier ssl renommez le privkey.pem en [domaine-gitlab].key et fullchain.pem en [domaine-gitlab].crt

Il est aussi possible de faire des liens symboliques pour que les régénérations futures de certificats soient automatiquement pris en compte par les différents service qui les utilisent.

Normalement, ça doit faire moins de 15 min que vous lisez cet article et votre service doit à nouveau être opérationnel avec le support du SSL.