Il y a deux ans, je m’étais penché sur la mise en place du chiffrement HTTPS avec les 2 articles suivants :
Dans le second article, je vous avais présenté StartSSL, une autorité de certification qui offrait un certificat de base gratuit.
Malheureusement, suite à une gestion calamiteuse de la distribution des certificats par la société tierce WoSign, les différents éditeurs de navigateurs ont décidé de retirer la confiance aux certificats émis par StartSSL.
Apple écrit dans son billet du 5 décembre 2016 :
L’autorité de certification WoSign a rencontré de multiples problèmes de contrôle dans ses processus d’émission de certificats pour la CA intermédiaire WoSign CA Free SSL Certificate G2. Même si aucune racine WoSign ne figure dans la liste des racines de confiance Apple, cette CA intermédiaire utilisait des relations de certificats signés de manière croisée avec StartCom et Comodo pour se faire approuver sur les produits Apple.
À la lumière de ces découvertes, nous avons pris des mesures pour protéger les utilisateurs dans une mise à jour de sécurité. Les produits Apple ne se fient plus à l’autorité de certification intermédiaire WoSign CA Free SSL Certificate G2.
Firefox écrit dans son billet du 24 octobre 2016 :
Mozilla a découvert qu’une autorité de certification appelée WoSign a rencontré un certain nombre d’échecs techniques et de gestion. Très sérieusement, nous avons découvert qu’ils anti-dataient les certificats SSL afin de contourner la date limite du 1er janvier 2016 à laquelle les CA devront cesser de délivrer des certificats SSL SHA-1. En outre, Mozilla a découvert que WoSign avait acquis la pleine propriété d’un autre CA appelé StartCom sans le signaler, comme l’exige la politique de Mozilla. Les représentants de WoSign et de StartCom ont nié et continué de réfuter ces deux allégations jusqu’à ce que des données suffisantes aient été recueillies pour démontrer que les deux allégations étaient correctes. La malhonnêteté affichée par les représentants de cette entreprise a conduit Mozilla à se méfier des futurs certificats chaînés jusqu’à l’actuel WoSign inclus et les certificats racines StartCom.
Concrètement, les versions de Firefox et Chrome qui sortiront à partir janvier n’accepteront plus les certificats signés après les 21 octobre.
Chez Apple, les nouvelles versions de Safari n’accepteront plus de se connecter aux sites dont le certificat a été signé après le 30 novembre 2016.
C’est déjà le cas de Safari inclus dans iOS 10.2.
Let’s Encrypt est une autorité de certification propulsée par l’Internet Security Research Group (ISRG) qui vise à augmenter significativement la part de trafic HTTPS sur les sites web.
Elle est soutenue par des ténors d’internet comme : l’Electronic Frontier Foundation (EFF), la Fondation Mozilla, Akamai, Cisco Systems, PlanetHoster, OVH, …
Je vous laisse lire la page Wikipedia du projet pour comprendre son fonctionnement.
Nous allons nous placer dans le dossier /home/pi
:
$ cd /home/pi
Puis, nous allons cloner le repo GitHub :
$ git clone https://github.com/letsencrypt/letsencrypt
On se place dans le dossier nouvellement créé :
$ cd letsencrypt
Un petit ls
nous retourne ceci :
Le script python qui nous intéresse est certbot-auto
.
La commande ./certbot-auto --help
nous retourne l’aide toujours utile à avoir sous la main.
On va commence par arrêter le serveur web Nginx pour permettre le mode standalone :
$ sudo service nginx stop
Puis on va exécuter le script :
$ ./certbot-auto certonly --standalone --rsa-key-size 4096
certonly
permet d’obtenir un certificat, mais de ne pas l’installer automatiquement.
--standalone
va exécuter un petit serveur Web autonome pour l’authentification. Ceci nous évitera d’installer un plugin à Nginx.
--rsa-key-size 4096
va générer un certificat avec une clef RSA de 4096 bits. La valeur par défaut est de 2048.
NB.: La première exécution du script peut prendre plusieurs minutes car celui-ci va installer tous les composants python nécessaires à son fonctionnement.
L’adresse email sera utilisée pour avertir l’utilisateur de l’imminence de la fin de validité d’un certificat.
Les certificats générés seront placés dans le dossier : /etc/letsencrypt/live/www.domaine.tld/
On retiendra ces deux ci : fullchain.pem
et privkey.pem
Voici un exemple de configuration Nginx :
server { listen 80; ## listen for ipv4; this line is default and implied default_server; # Accès uniquement depuis www.domaine.tld server_name www.domaine.tld; # Force le HTTPS depuis un appel en HTTP return 301 https://$server_name$request_uri; } server { listen 443 default_server; server_name www.domaine.tld; root /var/www/; index index.php index.html index.htm; # Turn on SSL and SSL specific settings. ssl on; # SSL certificate and key location. ssl_certificate /etc/letsencrypt/live/www.domaine.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domaine.tld/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header X-Content-Type-Options nosniff; #ssl_session_tickets off; # Requires nginx >= 1.5.9 #ssl_stapling on; # Requires nginx >= 1.3.7 #ssl_stapling_verify on; # Requires nginx => 1.3.7 resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; }
Une fois la configuration d’Nginx terminée, on le relance :
$ sudo service nginx start
$ sudo service nginx stop
$ ./certbot-auto renew
$ sudo service nginx start
$ sudo ./certbot-auto delete --cert-name nom.domaine.tld
$ sudo ./certbot-auto certificates
Références :