Installer Let's Encrypt sur un serveur Cloud avec nginx et certbot (certonly)
Introduction
Pour utiliser les certificats Let’s Encrypt sans que Certbot ne modifie la configuration du serveur web, il est nécessaire de préparer correctement le serveur web pour le défi HTTP.
Conditions préalables
- Vous disposez d’un serveur Cloud hosting.fr qui possède un enregistrement DNS valide, par exemple
demo.mustermann-domain.fr. - Un accès shell privilégié sur le système.
Installer les paquets
apt update
apt install nginx certbot
Configurer Nginx
Créer un répertoire pour les défis HTTP
mkdir /var/www/letsencrypt
Créer un extrait Nginx à inclure dans différents vhosts sous /etc/nginx/snippets/letsencrypt.conf avec le contenu suivant
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}
Modifier la configuration pour le vhost (par exemple sous /etc/nginx/sites-enabled/demo.mustermann-domain.fr)
server {
listen 80;
# si l'enregistrement AAAA est défini
listen [::]:80;
server_name demo.mustermann-domain.fr;
include snippets/letsencrypt.conf;
location / {
return 301 https://$server_name$request_uri;
}
}
Ensuite, vérifier la configuration Nginx avec nginx -t pour vérifier l’exactitude, puis redémarrer le serveur web (systemctl restart nginx.service)
Configurer Certbot
Si vous ne souhaitez pas recevoir d’emails de rappel pour les certificats expirants, vous pouvez également exécuter certbot sans adresse email (--register-unsafely-without-email)
certbot certonly --webroot -w /var/www/letsencrypt/ -d demo.mustermann-domain.fr --register-unsafely-without-email
Après que certbot ait terminé, vérifiez avec systemctl list-timers si le certbot.timer est actif.
Intégrer les certificats dans Nginx
Si vous n’avez pas encore intégré de certificats SSL/TLS dans Nginx, vous pouvez utiliser le Générateur de configuration SSL de Mozilla comme aide.
Si la même configuration SSL doit être utilisée dans plusieurs vhosts, il est également conseillé d’utiliser un extrait. Pour cela, créez le fichier /etc/nginx/snippets/mozilla-modern.conf avec le contenu suivant
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # environ 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
ssl_stapling on;
ssl_stapling_verify on;
resolver 95.129.51.51;
Ensuite, le fichier /etc/nginx/sites-enabled/demo.mustermann-domain.fr doit être étendu pour utiliser les certificats
server {
server_name demo.mustermann-domain.fr;
include snippets/mozilla-modern.conf;
ssl_certificate /etc/letsencrypt/live/demo.mustermann-domain.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/demo.mustermann-domain.fr/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/demo.mustermann-domain.fr/fullchain.pem;
. . .
}
Enfin, vérifiez à nouveau la configuration Nginx avec nginx -t pour vérifier son exactitude et redémarrer le serveur web (systemctl restart nginx.service)