Let's Encrypt, comment l'usage d'un reverse proxy permet l'obtention de certificats sans se soucier nullement de la nature du service sous-jacent, cas pratique avec Pound et Apache
Quand on utilise un reverse proxy, il est possible de grandement simplifier l'usage de Let's Encrypt pour protéger tous ses accès avec HTTPS.
Méthodologie
Pour mémoire, afin de vérifier la bonne possession d'un domaine abc.tld, Let's Encrypt appelle l'adresse 'abc.tld/.well-known/acme-challenge/X' où X correspond à un nom de fichier unique que le client Let's Encrypt (par exemple certbot) aura créé lors du challenge ACME. Si le test réussit, c'est que l'utilisateur qui revendique le domaine en a pleinement la possession puisqu'il est capable de créer et rendre visible un fichier à sa racine ; le certificat est alors accordé et créé.
Dès lors : créons une règle sur le reverse proxy qui redirige toutes les requêtes de l'ACME challenge vers un seul emplacement dans lequel le client Let's Encrypt écrira !
En pratique avec Pound comme reverse proxy
Ajoutons un paragraphe en tête de la configuration de Pound :
Service URL "/.well-known/acme-challenge/.*" BackEnd Address 1.2.3.4 Port 8000 End End
Désormais, toute requête de type ACME challenge est envoyé vers le serveur 1.2.3.4 sur le port 8000.
Imaginons que ce serveur soit un Apache. Paramétrons-le comme suit :
- dans /etc/apache2/ports.conf, on ajoute une ligne Listen 8000
- dans /etc/apache2/sites-available/letsencrypt.conf, on ajoute ceci :
<VirtualHost *:8000> DocumentRoot /var/www/letsencrypt <Directory /var/www/letsencrypt/> Options FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> </VirtualHost>
- on active le site par a2ensite letsencrypt.conf
- on redémarre Apache par service apache2 restart
Dès lors, tout appel à
certbot certonly --renew-by-default -a webroot --webroot-path /var/www/letsencrypt/ -d mondomaine.tld
devra aboutir à la génération du certificat souhaité, quelque soit le service sous-jacent !
En pratique avec un autre reverse proxy ?
La même stratégie est possible ! Seule la configuration du reverse proxy changera. On pourra également utiliser tout autre serveur web (même le micro-serveur web fourni dans python) pour servir les fichiers du ACME challenge !