Aujourd’hui, il est temps de mettre en place le HTTPS sur votre site. Rien de plus simple avec letsencrypt, cette solution vous permet d’installer un certificat SSL gratuit en quelques « clics ». Elle est soutenue par tout le gratin techno, on part clairement en direction du tout secure.. et c’est pas plus mal !
On va donc se pencher sur le cas d’une installation sur nginx, pas besoin de le présenter, si tu es là c’est que tu connais ce fameux : sinon, tu fais semblant 🙂
Sommaire
Nginx est il compatible ? :
Vérifions en premier si la version de nginx a été installé avec le module SSL :
nginx -V
Si tu as quelques part dans les modules :
--with-http_ssl_module
C’est opé, let’s go !
MISE A JOUR : JUILLET 2016
Depuis quelques mois (je n’ai pas la date exacte), Le binaire de letsencrypt ont été renommé.
Maintenant, c’est encore plus simple :
De LetsEncrypt vers Certbot :
Il suffit de te rendre sur : https://certbot.eff.org/, sélectionner ton Webserver et ton Operating-system
Et de lancer la commande :
certbot certonly
Il n’est plus nécessaire de stopper le server web pour générer les certificats. Attention cependant, le domaine doit être accessible via internet pour pouvoir créer les certificats.

Ensuite, un petit :
certbot certonly
Il suffit de renseigner une adresse email, les domaines/sous-domaines à gérer et c’est parti.
Les paramètres Nginx restent les mêmes 😉
(Attention pour Debian 8, Il faut activer les dépôts Backport)
Installation de letsencrypt (out of date) :
On va donc installer, letstencrypt.
cd /opt git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt
Déjà? La puissance.
Avant de lancer letenscrypt, on va stopper nginx avec le classic :
service nginx stop
Tu vas me dire, le serveur est Down pendant ce temps, oui mais ça va tellement vite que personne n’aura rien vu !
./letsencrypt-auto certonly -d vinvin.dev -d www.vinvin.dev --rsa-key-size 4096
Sélection du mode « Standalone », dans l’écran suivant il suffira d’entrer une adresse email de contact.
Congrats. Tu peux relancer ton nginx, on fera un reload un fois les configurations SSL de nginx éditées.
Configuration de Nginx :
Un petit tour du côté des configurations de votre site : « /etc/nginx/site-enabled/votre-site.fr » ou « /etc/nginx/nginx.conf »
On va faire ça en deux étapes :
- Configurations et optimisations de la couche SSL
- Redirections du HTTP vers le HTTPS
Configuration :
C’est assez simple, il faut changer le port d’écoute de nginx en 443, ajouter les certificats fraichement générés par letsencrypt et ajouter quelques configurations pour faire tourner ça aux petits oignons. D’ailleurs, le but ultime est d’obtenir une bonne note au test : ssllabs
On va avant tout générer une clé de chiffrement par nous même (La fameuse clé de Diffie et Hellman)
openssl dhparam -out /etc/ssl/private/dhparams.pem 4096
(Peut prendre quelques heures a générer la clef en 4096bits… )
La version avec le param -dsaparam est plus rapide (Si tu as un train à prendre) :3
sudo openssl dhparam -out /etc/ssl/private/dhparams.pem -dsaparam 4096
Ensuite, on va ajouter ces lignes aux confs :
server { listen 443 ssl http2; ssl_certificate /etc/letsencrypt/live/vinvin.dev/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/vinvin.dev/privkey.pem; ssl_dhparam /etc/ssl/private/dhparams.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; # HSTS : add_header Strict-Transport-Security max-age=15768000; # OCSP stapling ssl_stapling on; ssl_stapling_verify on; }
Attention : Pour le fameux A+ sur SSLabs, On a ajouté le http2 dans le listen et la directive Strict Transport Security. Elles nécessitent une version de nginx à jour 😉
Voila, avec ça on atteint des sommets. Ocsp stapling et HTTP Strict Transport Security configuré et des ciphers intermédiaire, résultat :

Redirections HTTP -> HTTPS :
On va donc rediriger le traffic venant du port 80 vers le https. juste au dessus du bloc server que l’on vient de voir. On va ajouter un nouveau bloc server :
server { listen 80; server_name ton-domain.fr www.ton-domain.fr; return 301 https://$server_name$request_uri; }
Nous voila au top ! après un « service nginx configtest » pour s’assurer de la bonne syntaxe des fichiers de configuration, tu peux reload « service nginx reload » et admirer le vert 🙂
On discute du renouvellement très rapidement..
2 réponses sur « Mise en place du HTTPS avec letsencrypt & NginX »
Super tuto, merci !
[…] Aujourd’hui, il est temps de mettre en place le HTTPS sur votre site. Rien de plus simple avec letsencrypt et nginx. Letsencrypt offre une solution gratuite […]