Let's Encrypt - Comment se faciliter la vie ?
Mon serveur web est composé d'un frontend nginx et d'un backend apache. L'ensemble de mes certificats (à l'exception du wildcard deblan.org) est géré par Let's Encrypt. Mon problème jusqu'à aujourd'hui était que lors de la création ou le renouvellement d'un certificat, mon service nginx devait être coupé pour réaliser l'authentification nécessaire à la validation faite par Let's Encrypt.
Le service nginx, tel que je l'ai configuré, possède un fichier de configuration unique qui écoute sur le port 80. Ce fichier permet :
- d'indiquer mon backend apache
- de gérer les problématiques de cache des assets (images, css, javascripts, etc.)
Vous pouvez remarquer l'include
à la ligne 20. Voici le contenu du snippet :
Il identifie un répertoire unique où seront générés les fichiers d'authentification de Let's Encrypt. Il aura fallu créer ce répertoire au préalable (sudo mkdir -p /var/www/letsencrypt/
).
Reste à présent 2 scripts :
- celui qui permet de générer un certificat
- celui qui permet de renouveler les certificats qui vont expirer
Pour la génération d'un certificat, j'ai souhaité une ligne de commande simple : le-get-certificate monsite.com www.monsite.com foo.monsite.com
. Voici son contenu :
Edit : la commande cerbot renew
fait le travail tout seul. L'intérêt de mon script pourrait d'ajouter rapidement des domaines à certifier en augmentant le CSR automatiquement.
Edit 2 : certbot renew --webroot -w /var/www/letsencrypt --agree-tos
est sans doute la meilleurs manière de renouveler les certificats. J'ai rencontré quelques problèmes avec le script proposé ci-dessous.
Concernant le renouvellement, le script suivant s'appuie sur un fichier de configuration que vous devrez alimenter à chaque création de certificat. Il doit être créé à cet emplacement : /etc/letsencrypt/domains.conf
. Voici à quoi il ressemble chez moi et j'ai ajouté la ligne nécessaire pour l'exemple de la commande de création :
Voici à présent le script que devra être exécuté périodiquement pour le renouvellement :
J'espère que cela pourra vous être utile et si vous avez des remarques, n'hésitez pas à m'en faire part :)

Matrix-Synapse : migrer de SQLite à PostgreSQL
Matrix-Synapse est un service de messagerie décentralisé et interopérable avec d'autres mess…

Détecter les vulnérabilités dans les dépendances de son projet
La gestion des dépendances dans un projet est quelque chose de complexe. Il y a autant de ge…

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)
En septembre 2018, je publiais un article pour automatiser l'authentification sur Sharepoint…
- Bonjour,
A la lecture de ton article, je me posais quelques questions.
J'avais à la base une configuration analogue :
- un serveur par défaut écoutant en HTTP sur le port 80, gérant les requêtes Let's Encrypt et sinon faisant un "return 301 https://$server_name$request_uri;"
- un server écoutant en HTTPS sur le port 443 pour chaque FQDN.
Le problème était que, dans le cas du serveur par défaut, la variable "$server_name" était vide...
J'ai donc désormais deux fichiers par FQDN :
- un "FQDN_http" pour Let's Encrypt et la redirection vers le HTTPS
- un "FQDN_https" qui sert le réel contenu du serveur.
Je ne sais pas s'il y a une solution plus élégante.
Sinon, pour le renouvellement de certificats, pourquoi ne pas simplement utiliser la commande "certbot renew" ? Cette commande va utiliser les infos dans "/etc/letsencrypt/renewal" (sous Debian) pour renouveler les certificats uniquement si nécessaire.
D'ailleurs, l'installation du paquetage sous Debian crée un fichier "/etc/cron.d/certbot" avec le contenu suivant "0 */12 * * * root perl -e 'sleep int(rand(3600))'; certbot -q renew" : lancement du renouvellement (en mode silencieux) deux fois par jour avec un délai aléatoire d'un heure, ce qui correspond aux préconisations de Let's Encrypt.
- Hello gjherbet,
Pour ton problème de variable, tu peux utiliser `$host` à la place de `$server_name`.
Quand j'avais utilisé la version non packagé de letsencrypt, je me rappel avoir rencontré des soucis, cependant, après un test sur le package debian (backporté), ça fonctionne effectivement bien. Je vais donc mettre à jour ma configuration et éditer l'article ! Merci :)
- Je me suis fais la remarque que mon script peut avoir un intérêt dans la mesure où l'on peut ajouter des domaines pour un certificat existant (mise à jour du CSR).
- Merci pour la qualité de ton tuto. ;)
et pour le reste de tes articles très utile.
- Très heureux que mes articles te plaisent !