Add new comment

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
cert. The most common SUBCOMMANDS and flags are:

obtain, install, and renew certificates:
    (default) run   Obtain & install a cert in your current webserver
    certonly        Obtain or renew a cert, but do not install it
    renew           Renew all previously obtained certs that are near expiry
   -d DOMAINS       Comma-separated list of domains to obtain a cert for

  (the cerbot 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 certs 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 /usr/share/nginx/geek17.com -d www.geek17.com -d geek17.com --email xxx@geek17.com --rsa-key-size 4096 --agree-tos

Dans cet exemple, j'ai spécifié :

  • l'emplacement racine des fichiers de mon site web /usr/share/nginx/geek17.com avec l'option -w
  • 2 domaines : www.geek17.com et geek17.com avec l'option -d
  • une clé RSA 4096 bits est utilisée au lieu d'une clé 2048 bits par défaut
  • 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 /usr/share/nginx/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.

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/server1.geek17.com/fullchain.pem. Your
   cert will expire on 2017-09-25. 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 lose your account credentials, you can recover through
   e-mails sent to contact@interestuff.com.
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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/conf.d/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  /home/dev/www/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

Tags: 
You must have Javascript enabled to use this form.