Let's encrypt logo

Générer des certificats SSL gratuits avec Let’s Encrypt

Depuis le début du mois de Décembre, une nouvelle autorité de certificats est apparue et propose un service entièrement gratuit.

Let’s Encrypt est un projet appartenant à la Linux Foundation et possède des partenaires ayant un impact majeur sur Internet. On parle de Mozilla, Google, Cisco, Akamai, Facebook, OVH et d’autres entreprises. La particularité de Let’s Encrypt est que la génération des certificats est gratuite, valables 90 jours et permet une installation automatique des certificats sur votre serveur Web. Let’s Encrypt fonctionne uniquement sur Linux pour l’instant.

Dans cet article, je vous propose l’installation et la configuration de Let’s Encrypt avec Nginx. La config d’Nginx permet d’avoir une note A+ sur SSLLabs ou d’autres outils de tests.

 

Installation et configuration de Let’s Encrypt

Premièrement, il est nécessaire d’installer git (si vous n’avez pas Nginx, installez-le ou bien compilez-le pour avoir droit au protocole SPDY ou HTTP/2) :

apt install git

Ensuite, il faut cloner le dépôt Let’s Encrypt disponible sur Github à cette adresse : https://github.com/letsencrypt/letsencrypt :

git clone https://github.com/letsencrypt/letsencrypt

La première étape consiste à lier une adresse e-mail et accepter le TOS en utilisant la commande :

./letsencrypt-auto --email monemail@domain.tld --agree-tos

Ensuite, il faut générer le certificat pour le ou les domaines :

./letsencrypt-auto certonly -d domain.tld -d domaine.tld

Note : Chaque domaine doit obligatoirement pointer vers l’adresse IP du serveur.
Note 2 : Il est possible de générer le certificat et l’installer directement en utilisant la commande ./letsencrypt-nginx mais cette fonctionnalité est pour le moment expérimentale.

Ensuite il faut générer le fichier dhparams.pem pour Nginx, pour cela je vous recommande de vous faire du café et attendre…. longtemps 😀

cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 4096

Vous pouvez réduire la clé à 2048 bits mais je vous recommande vraiment en 4096 bits.

Après quelques heures d’attentes, la clé est enfin prête ! Il faut maintenant configurer Nginx !

Configuration de Nginx

La configuration d’Nginx est relativement simple. Commençons sans plus attendre !

/etc/nginx/site-available/monsite

 server {
 listen 443 ssl spdy; # Ajoutez SPDY ou http2 si vous avez le support d'une des deux fonctionnalités
 server_name monsite.fr www.monsite.fr;
 root /var/www/dossier;
 index index.html index.htm index.php;

 add_header Strict-Transport-Security 'max-age=31536000';

 ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
 ssl_certificate /etc/letsencrypt/live/monsite.fr/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/monsite.fr/privkey.pem;
 ssl_prefer_server_ciphers on;
 ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 +SHA !aNULL !eNULL !LOW !MD5 !EXP !DSS !PSK !SRP !kECDH !CAMELLIA !RC4 !SEED';
 ssl_dhparam /etc/ssl/certs/dhparam1.pem;
 ssl_session_cache shared:SSL:10m;
 ssl_session_timeout 10m;
 keepalive_timeout 70;

 [...] # Reste de votre configuration (PHP, Directory, etc ...
}

Note : Si vous souhaitez utiliser plusieurs sites, sachez qu’il est impossible de mettre plusieurs fois ssl_session_cache shared:SSL:10m et ssl_session_timeout 10m. Il faudra donc concevoir un fichier ssl.conf dans /etc/nginx/conf.d/ avec toutes les informations SSL (sauf celles du certificat).

Redémarrez Nginx

service nginx reload

Pour finir, il ne vous reste plus qu’à connaitre votre score sur SSLLabs ou sur CryptCheck et essayer votre site en utilisant le protocole https://.

Si vous souhaitez rediriger tout le trafic HTTP vers HTTPS, il suffit de modifier le serveur HTTP de votre site (sur le port 80 normalement) en rajoutant ses lignes :

return 301 https://$server_name$request_uri;

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
        }

Note : Si vous utilisez cette technique, n’oubliez pas qu’il n’est plus nécessaire de laisser les règles de dossiers, de PHP ou tout autre interpréteur.

 

Et voilà ! Votre site possède désormais un certificat signé valable 90 jours. Pensez à faire une tâche cron avant l’expiration du certificat ou à faite-le à la main tous les 3 mois 😉

 

Le cadenas est orange :/

Si le cadenas est orange sur votre site, vérifiez les liens de vos images ou scripts, et utilisez le protocole https:// ou bien utilisez // pour tous vos scripts et images.

 

Soyez fiers ! Vous avez réussi à installer un certificat Let’s Encrypt sur votre serveur Nginx ! Si vous avez le moindre problème, question, n’hésitez pas à lire la documentation disponible ici ou bien d’en parler dans les commentaires 😉

Poster un Commentaire

1 Commentaire sur "Générer des certificats SSL gratuits avec Let’s Encrypt"

avatar

trackback

[…] des serveurs Web, je recommande à tous l’utilisation d’un certificat SSL (avec Let’s Encrypt par exemple) ce qui permettra de sécuriser les échanges entre vos postes et le serveur (Safety […]

wpDiscuz