CHANGELOG wrote:
• Ajout d'un avertissement concernant HSTS + suppression de la directive ssl_dhparam le 12/12/15 par Hardware
• Mise à jour du tuto pour la beta publique du mois de décembre le 9/12/15 par magicalex
Les certificats générés ne sont valables que 90 jours. Il faudra ensuite les renouveler en réutilisant la méthode décrite ci-dessous.
Installation et génération du certificat via let's Encrypt !
Vous allez voir c'est très simple !
On va commencer par stopper nginx le temps de l'installation car Let's Encrypt a besoin du port 80 pour fonctionner.
service nginx stop
On va mettre à jour le serveur et installer git
apt-get update && apt-get upgrade
Ensuite on va cloner le repo et se placer dans le répertoire :
cd /tmp
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto --help all
Après cette étape il faut générer le certificat via let's encrypt, avec une clé RSA de 4096bits pour les plus parano.
Vous pouvez retirer le paramètre "--rsa-key-size 4096" la clé rsa sera de 2048bits (paramètre par défaut)
--standalone fait appel au serveur web de letsencrypt pour générer le certificat.
./certbot-auto --help
./certbot-auto certonly --standalone --rsa-key-size 4096
Différentes choses vont vous être demandées :
• Une adresse e-mail pour pouvoir vous transmettre et vous prévenir de l'expiration de vos certificats.
• Les domaines pour lesquels vous souhaitez générer le certificat (en général
www.votresite.fr et votresite.fr)
• L'acceptation des conditions.
ou directement avec cette commande (sans interaction de notre part)
./certbot-auto certonly \
--standalone \
--rsa-key-size 4096 \
--agree-tos \
--email john.doe@mondedie.fr \
--domains mondedie.fr \
--domains www.mondedie.fr
Configuration de nginx avec le certificat
En premier lieu on va améliorer la configuration par défaut de nginx en suivant les recommandations le Mozilla.
Création du fichier params.conf
# nano /etc/nginx/ssl/params.conf
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_ecdh_curve secp384r1;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA";
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
resolver 8.8.8.8;
Note : la directive max age de Strict-Transport-Security correspond à 6 mois.
Attention: Avec HSTS, une mauvaise gestion de votre configuration SSL peut amener votre domaine à être complètement inaccessible pour vos utilisateurs, merci d'utiliser ce header en toute connaissance de cause. Wikipédia
On n'oublie pas d'inclure le fichier params.conf entre les balises http {} dans le fichier nginx.conf
# nano /etc/nginx/nginx.conf
http {
include /etc/nginx/ssl/params.conf;
}
Les fichiers générés par Let's Encrypt sont placés dans le répertoire /etc/letsencrypt.
Si tout s'est bien passé, le certificat et la clé que vous venez de générer se trouvent donc dans /etc/letsencrypt/live/www.votresite.fr.
Exemple :
root@server:/etc/letsencrypt/live/www.votresite.fr# ls -l
total 0
lrwxrwxrwx 1 root root 45 Nov 4 08:34 cert.pem -> ../../archive/www.votresite.fr/cert1.pem
lrwxrwxrwx 1 root root 46 Nov 4 08:34 chain.pem -> ../../archive/www.votresite.fr/chain1.pem
lrwxrwxrwx 1 root root 50 Nov 4 08:34 fullchain.pem -> ../../archive/www.votresite.fr/fullchain1.pem
lrwxrwxrwx 1 root root 48 Nov 4 08:34 privkey.pem -> ../../archive/www.votresite.fr/privkey1.pem
Ce qui nous intéresse ici ce sont ces deux fichiers :
fullchain.pem et
privkey.pem.
Dans votre fichier de configuration du vhost nginx (/etc/nginx/sites-enabled/rutorrent.conf si vous utilisez celui-ci), il suffit donc de renseigner l'emplacement de la chaine de certificat et de la clé.
Exemple
server {
listen 443 ssl;
server_name www.votresite.fr;
ssl_certificate /etc/letsencrypt/live/www.votresite.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.votresite.fr/privkey.pem;
## etc
}
On redémarre nginx :
service nginx restart
Votre domaine est maintenant doté d'un certificat SSL signé par Let's Encrypt.
Comment vérifier la configuration de nos certificats
Il y a quelques sites pour cela, en voici 2. Le but étant d'avoir un A+
Renouveler un certificat
service nginx stop
./certbot-auto renew
service nginx start
Ou alors vous pouvez regénérer de nouveau le certificat avec ./certbot-auto certonly (cf voir au dessus)