Debian 11 Bullseye - Nginx : passer votre site en HTTPS gratuitement avec Let’s Encrypt

Je 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 smiley

 

Expiration du certificat...

Les certificats délivrés par Let’s Encrypt ne sont valides que 90 joursindecision.
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

Add new comment

You must have Javascript enabled to use this form.