Installez votre certificat de sécurité en quelques minutes seulement grâce à Certbot

publié le 24/03/2019

Certbot Nginx Ubuntu

Certbot est un programme qui permet de créer des certificats Let's encrypt très facilement. Dans cet article, nous allons installer un certificat de sécurité et activer le protocole https d'un site servi par Nginx, en moins de 5 minutes je vous assure. En prime, nous mettrons en place un cron pour renouveler automatiquement les certificats.


Pré-requis

  1. vous êtes propriétaire d'un domaine
  2. votre sytème d'exploitation est Ubuntu
  3. votre site est servi par Nginx

Ma configuration Nginx

Je pars sur une configuration hyper-simple. Une réponse 200 et un basique "Hello world". Remarquez que nous n'écoutons que le port 80. Je n'écris rien en lien avec le protocole https. En fait, c'est Certbot qui va éditer la configuration lorsque nous lancerons la commande.

# /etc/nginx/nginx.conf
events {}

http {
    server {
        listen 80;
        server_name demo.geekco.fr;
        location / {
            return 200 "Hello world";
        }
    }
}

Votre configuration sera forcément différente. Celle-ci est concise pour les besoins de cet article.


Installation de Certbot

Allez sur le site officiel de Certbot. Sur la page d'accueil de leur site, vous trouverez les consignes d'installation spécifiques à votre système d'exploitation. Pour ma part, j'utilise Ubuntu 18.04 et Nginx, donc voici les commandes que je dois utiliser pour l'installer:

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python-certbot-nginx 

Création du certificat

Il y a plusieurs manières d'installer un certificat. La plus simple est d'ajouter le flag nginx pour que certbot édite directement notre configuration.

sudo certbot --nginx

On se laisse guider ensuite. Certbot va automatiquement détecter les domaines servis par Nginx sur votre machine et vous demander le ou les sites pour lesquels vous souhaitez installer un certificat.

Vous pouvez choisir de forcer la redirection sur port 443 si vous le souhaitez.

Et c'est tout pour l'installation. Si certbot ne rencontre pas de problème, il aura installé votre certificat, édité votre config nginx et redémarré le serveur. Voici mon fichier de configuration après lancement de la commande. Merci Certbot !!

events {}

http {
    server {
        server_name demo.geekco.fr;
        location / {
            return 200 "Hello world";
    }
    
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/demo.geekco.fr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/demo.geekco.fr/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

	}

	server {
		if ($host = demo.geekco.fr) {
			return 301 https://$host$request_uri;
		} # managed by Certbot


		listen 80;
		server_name demo.geekco.fr;
		return 404; # managed by Certbot
	}
}

J'ai dû redémarrer le serveur lorsque j'ai choisi de forcer la redirection. Vous devrez peut être le faire aussi. Si c'est le cas, pour redémarrer Nginx

sudo nginx -t && sudo nginx -s reload

Les certificats créés par Certbot sont de très bonne qualité. Si vous voulez vérifier, vous pouvez tester la qualité de votre certificat en lançant un audit sur SSLLabs.
summary ssl labs

Audit SSLLabs


Renouvellement automatique

Les certificats sont valides pendant 90 jours. On va configurer un cron pour que le renouvellement soit automatique.

sudo crontab -e

Ajouter cette ligne au fichier existant:

@daily certbot renew

Tous les jours, cette commande s'exécutera et renouvellera les certificats si la date d'expiration est trop proche.