Avoir un site en HTTPS est un gage de confidentialité et de meilleure indexation. Peu de choses semblent justifier aujourd’hui de ne pas mettre en place votre site web en https (et désactiver le http).
Je profite donc d’avoir terminé la migration en HTTPS des 13 noms de domaines que j’auto-héberge pour écrire ce petit mémo.
Les exemples utilisés dans cet article seront adaptés à un serveur Debian avec Apache.
Installation d’un certificat HTTPS avec Let’s encrypt
Droits nécessaires: droits root sur le serveur d’hébergement
Let’s encypt est une autorité de certification mise en place par projet porté par l’Electronic Frontier Foundation, Mozilla et d’autres partenaire privés qui veulent généraliser l’usage de connexions sécurisées sur l’internet. Elle permet d’avoir gratuitement un certificat HTTPS.
Pour ce lancer dans cette étape il faut avoir déjà un site fonctionnel en HTTP.
Ensuite on peut utiliser l’outil très puissant de l’EFF, Certbot. Voici comment l’installer et le lancer pour un serveur apache :
wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto mv certbot-auto /mon_dossier/mes_scripts/ sudo /mon_dossier/mes_scripts/certbot-auto --apache
Durant l’installation, indiquer les options par défaut et autoriser certbot à modifier votre configuration apache et de rediriger le trafic http vers https.
On termine en configurant la tache de renouvellement automatique:
sudo crontab -e 0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /mon_dossier/mes_scripts/certbot-auto renew
Migrez tout vos liens en HTTPS
Droits nécessaires: webmaster
Sur votre site, remplacez tous les liens http que vous avez en https.
Sur WordPress il faut intervenir à plusieurs endroits:
- Modifier l’adresse de votre site dans la page de réglages généraux (menu Réglages→Généraux)
- Mettre à jour tous les liens de vos anciens articles (notamment les images). Vous pouvez utiliser un plugin Search Regex pour automatiser tout cela.
- Éventuellement vous devrez intervenir en rééditant vos widget, corriger des liens dans vos menus, et (plus rare) dans le code de votre thème si vous avez rajouté des liens manuellement.
Vous devez avoir un cadenas vert en affichant votre site, ce qui signifie que tout vos éléments sont passés en https:
Si vous n’avez pas ce cadenas vert:
vous pouvez rechercher les éléments manquants en vous aidant par exemple avec le site WhyNoPadlock.
Accélérez le HTTPS
Droits nécessaires: droits root sur le serveur d’hébergement
L’agrafage OCSP permet d’éviter aux navigateurs de faire une requête supplémentaire vers l’autorité de certification. Voici comment le mettre en place:
echo 'SSLStaplingCache shmcb:/tmp/stapling_cache(2097152)' >> /etc/apache2/conf-available/ssl.conf
a2enconf ssl
et ajouter la ligne suivante dans le fichier /etc/letsencrypt/options-ssl-apache.conf
:
SSLUseStapling on
Testez et améliorez la sécurité de votre certificat
Le site de Qualys SSL Labs SslTest est excellent pour tester la sécurité de vos certificats.
N’utiliser que des protocoles fiables
Droits nécessaires: droits root sur le serveur d’hébergement ou par défaut droit d’écriture sur le vhost d’apache
Pour améliorer la note au SslTest, il faut modifier les lignes suivantes du fichier /etc/letsencrypt/options-ssl-apache.conf
:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:!DSS
Publier votre autorité de certification
Droits nécessaires: droits de configuration du DNS de votre nom de domaine
Il faut aussi graver dans le marbre de votre DNS le fait que ce soit Let’s Encrypt qui vous procure le certificat. Voici l’entrée DNS à rajouter dans votre interface de configuration de votre registraire de nom de domaine :
example.org. CAA 128 issue "letsencrypt.org"
Le 128 (valeur maximale possible) signifie que le certificat est impératif.
Activer HSTS
Droits nécessaires: droits root sur le serveur d’hébergement ou droit d’écriture sur le vhost d’apache
Enfin il vous faut configurer les headers http en rajoutant ces lignes dans votre fichier de configuration virtual host d’apache:
#Activer HSTS pour le site et les sous-domaines pendant 1 an (pour HTTPS)
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Puis il faudra soumettre votre site sur https://hstspreload.org/ afin d’empêcher totalement l’accès non https.