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
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
Add new comment