Debian 11 Bullseye - Nginx : passer votre site en HTTPS gratuitement avec Let’s Encrypt
dim, 10/31/2021 - 14:46 — geek17Je vous propose dans cet article de passer votre site, propulsé par nginx, en version sécurisé HTTPS, le tout gratuitement grace à Let’s Encrypt.
Let’s Encrypt propose en effet des certificats gratuits et un outil de mise en oeuvre.
L'HyperText Transfer Protocol Secure, plus connu sous l'abréviation HTTPS — littéralement « protocole de transfert hypertexte sécurisé » — est la combinaison du HTTP avec une couche de chiffrement comme SSL ou TLS.
Les données transitant entre le site web et l'utilisateur sont ainsi chiffrées et ne sont plus transmissent en claire sur internet (comme les mots de passe sur un formulaire de connexion non sécurisé...).
Installation du client Let’s Encrypt
Le client Let’s Encrypt est disponible dans le dépôt Debian, il s'appelle cerbot et on lance son installation.
sudo apt-get install certbot
Une fois le client installé, vous pouvez afficher les options d'utilisation avec la commande certbot --help
certbot --help
certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...
Certbot can obtain and install HTTPS/TLS/SSL certificates. By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. The most common SUBCOMMANDS and flags are:
obtain, install, and renew certificates:
(default) run Obtain & install a certificate in your current webserver
certonly Obtain or renew a certificate, but do not install it
renew Renew all previously obtained certificates that are near
expiry
enhance Add security enhancements to your existing configuration
-d DOMAINS Comma-separated list of domains to obtain a certificate for
(the certbot apache plugin is not installed)
--standalone Run a standalone webserver for authentication
(the certbot nginx plugin is not installed)
--webroot Place files in a server's webroot folder for authentication
--manual Obtain certificates interactively, or using shell script hooks
...
Génération du certificat SSL
Nous allons générer un certificat SSL qui sera utilisable pour le domaine geek17.com ainsi que pour le sous-domaine www.geek17.com
Pour cela, nous allons exécuter la commande suivante
sudo certbot certonly --webroot -w /var/www/geek17.com -d www.geek17.com -d geek17.com -m xxx@geek17.com --agree-tos
Dans cet exemple, j'ai spécifié :
- l'emplacement racine des fichiers de mon site web /var/www/geek17.com avec l'option -w
- 2 domaines : www.geek17.com et geek17.com avec l'option -d
- un email de contact. Il est très important de spécifier un adresse email valide car vous recevrez les infos d'expiration du certificat à cette adresse.
Pour vérifier que vous êtes bien le propriétaire des domaines spécifiés, le client Let’s Encrypt va créer un fichier avec un contenu spécifique dans le dossier /.well-known/acme-challenge de votre site web.
Donc dans /var/www/geek17.com/.well-known/acme-challenge pour moi.
Le serveur Let’s Encrypt tente ensuite d'accéder à ce fichier http://www.geek17.com/.well-known/acme-challenge/xxxxx pour valider que vous êtes bien le propriétaire du serveur.
A la première exécution de certbot, vous devez accepter les conditions d'utilisation de votre email ci-dessous
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Et vous obtiendrez le message ci-dessous si tout se passe bien pendant la vérification.
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.geek17.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.geek17.com/privkey.pem
Your certificate will expire on 2022-01-22. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Configuration du vHost nginx
Ouvrer la configuration de votre vhost
sudo nano /etc/nginx/sites-enabled/www.geek17.com.conf
Puis ajouter une entrée server qui écoute sur le port 443.
J'ai ajouté en même temps l'option http2 à la chaine d'écoute. Et cela suffit pour que votre serveur web soit maintenant compatible HTTP/2 !
Vous remarquerez que l'emplacement de nos certificats SSL est spécifiée avec les options ssl_certificate et ssl_certificate_key
....
server {
listen 0.0.0.0:443 ssl http2;
server_name www.geek17.com geek17.com;
root /var/www/geek17.com;
index index.php index.html index.htm;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.geek17.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.geek17.com/privkey.pem;
}
Reste à redémarrer nginx pour activer la modification
sudo service nginx restart
Maintenant, si vous ouvrez l'adresse de votre site web en mettant https:// devant, le cadenas vert indique que vous avez un certificat valide
Expiration du certificat...
Les certificats délivrés par Let’s Encrypt ne sont valides que 90 jours.
Mais la bonne nouvelle, c'est qu'ils vont se renouveler automatiquement !
En effet, un job cron est automatiquement créé à l'installation de certbot (etc/cron.d/certbot) et il se charge de renouvelez automatiquement les certificats générés sur le serveur.
Il utilisera les mêmes paramètres que ceux utilisés à la création du certificat et qui sont stockés dans /etc/letsencrypt/renewal
Le job cron exécute la commande cerbot renew que vous pouvez aussi lancer à la main quand vous le souhaitez via sudo certbot renew
Le certificat sera renouvelé que s'il est proche de la date d'expiration !
Vous pouvez également simuler (sans aucune modification) le renouvellement avec la commande sudo certbot renew --dry-run
Aller plus loin...
Il est possible d'améliorer l'efficacité et la sécurité de votre site HTTPS : Nginx : améliorer la sécurité et la rapidité de votre site HTTPS
Enfin, pour rediriger automatiquement vos visiteurs vers la version sécurisée HTTPS de votre site, suivez cet article Nginx : rediriger toutes vos url vers votre site HTTPS