Automatisation de la gestion des certificats TLS sur NGINX avec Let’s Encrypt sous Debian GNU/Linux stable

J’en parlais ici, mais je n’avais pas encore pris le temps de parcourir les 10e de documentations existantes pour mettre en application la chose.

Je me suis finalement basé sur « Automatic certificates from Let’s Encrypt with Certbot and nginx » par Aleksander Skraastad, qui est une méthode simple et propre, que je retranscris/traduis partiellement ci-dessous, en apportant quelques petites précisions

En résumé, voilà les différentes étapes :

  • Installation via les backports
  • Préparer NGINX
  • Configurer les vhosts
  • Valider la configuration
  • Générer les certificats
  • Utiliser les certificats générés
  • Vérifier le fonctionnement des futures demandes de renouvellement
  • Renouvellement automatique

Et le détail…

Installation via les backports

# echo "deb http://ftp.debian.org/debian jessie-backports main contrib" >> /etc/apt/sources.list
# apt-get update
# apt-get install certbot -t jessie-backports

Préparer NGINX

Pour vérifier le propriétaire du domaine, certbot va utiliser le repertoire .well-known. Il va y déposer un fichier et voir si le site distant de gestion des certificats peut y accéder. Il faut donc configurer NGINX pour laisser le processus se dérouler.

Créer un répertoire et fichiers /etc/nginx/mixins/certbot.conf contenant :

location ~ /.well-known {
    allow all;
    root /var/www;
}

Cela permet d’avoir un seul emplacement pour les requêtes vers les /.well-known de tous vos sites, sans perturber le processus si votre site n’est qu’un reverse proxy, ou si vous avez mis en place une restriction d’accès quelconque (authentification, filtrage ip…). Tout se passera dans /var/www/.well-known

Configurer les vhosts

Sur chacun des vhost configuré ajouter la ligne suivante, après la directive server_name par exemple :

# Let's Encrypt Challenge
include mixins/certbot.conf;

Si toutes vos requêtes http sont redirigées vers https, mettre la directive dans le block https

Valider la configuration

# nginx -t

Relancer nginx

# systemctl nginx reload

Générer les certificats

Créer le nouveau certificat pour chaque site (remplacer uniquement <adresse-du-site>)

# certbot certonly --webroot -w /var/www -d <adresse-du-site>

La première fois il faudra saisir une adresse email de contact et accepter les conditions d’utilisations (que je n’ai pas lues…).

Utiliser les certificats générés

Modifier les directives ssl_certificate de chaque site pour faire pointer vers les nouveaux certificats :

ssl_certificate     /etc/letsencrypt/live/<adresse-du-site>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<adresse-du-site>/privkey.pem;

Si vous n’aviez pas encore configuré de https pour votre site, il est temps de mettre en place la configuration « qui va bien« , en utilisant entre autre les directives ci-dessus

Valider la configuration et relancer NGINX

Vérifier le fonctionnement des futures demandes de renouvellement

# certbot renew --dry-run

Renouvellement automatique

Créer le fichier /etc/cron.weekly/certbot avec le contenu :

#!/bin/sh
certbot renew >> /var/log/certbot.log
systemctl nginx reload

Puis

# chmod 755 /etc/cron.weekly/certbot

Et il n’y a plus qu’à vérifier que la configuration est suffisamment sécurisée.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *