Tutoriel : Partie 6 - Sécuriser le site en https
- Installer Certbot et obtenir un certificat
- Modifier le fichier de configuration du site
- Modifier le
NAT/PATau niveau de la box - Tester la sécurité du site
- Renouveler automatiquement le certificat
- Il est possible de sécuriser un site en utilisant les services de Cloudflare. Mais dans la mesure où on utilise un Dyn DNS (No-IP), la procédure est plutôt complexe, nécessitant par exemple de passer par DNS-O-Matic.
- Il est finalement plus simple d’utiliser Certbot, d’autant que l’on peut automatiser le renouvellement des certificats. La manière la plus simple d’installer certbot est d’utiliser la commande snap.
- Activer le module ssl
sudo a2enmod ssl - Activer le module rewrite
sudo a2enmod rewrite - Prendre en compte les modifications
sudo systemctl restart apache2
- La manière la plus simple d’installer Certbot est de passer par la commande snap
- Installer snapd
sudo apt install snapdA l’invite de commande, taper O (oui)
- Rebouter le système
sudo reboot - Tester snap
sudo snap install hello-worlddoit vous renvoyer :
hello-world 6.4 from Canonical✓ installed - Installer core
sudo snap install core
- Installer Certbot
sudo snap install --classic certbot - Créer un lien symbolique de /snap/bin/certbot vers /usr/bin/certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
- On peut laisser Certbot installer le certificat et modifier lui-même les fichiers Apache. Il est préférable d’installer le certificat mais de modifier soi-même les fichiers de configuration du site, notamment pour pouvoir maîtriser certains paramètres de sécurité.
- Lancer la commande
sudo certbot certonly --apache --rsa-key-size 4096On a fixé la taille de la clé RSA à 4096 bit contre 2048 par défaut.
- Répondre aux invites de commandes
- Entrer (ou non) son adresse mail.
- Read the terms of service : accepter en tapant
Yà l’invite de commande - Electronic Frontier Foundation : accepter ou non
- Quel nom activer pour le certificat : deux options
Soit rien n’est proposé : rentrer le nom du site (monsite.freeddns.org par exemple)
Soit deux options sont proposées :
- 1 :
<nom du site>(monsite.freeddns.orgpar exemple) - 2 :
www.<nom du site>(www.monsite.freeddns.orgpar exemple)
Taper 1 car c’est le nom qui a été donné à No-IP.
- 1 :
- Ouvrir le fichier
sudo nano /etc/apache2/sites-available/project-camera.conf - Faire un
copierdu contenu du VirtualHost 80 (voir plus loin) - Modifier le contenu de
<VirtualHost *:80>(en remplaçant<nom du site>par le nom de votre site) comme indiqué ci-dessousServerName <nom du site> ServerAlias www.<nom du site> Redirect permanent / https://<nom du site> - Créer le VirtualHost 443
<VirtualHost *:443>
et sous cette ligne copier l’ancien contenu du VirtualHost80
- Ajouter les lignes concernant le certificat en remplaçant
<nom du site>par le nom de votre siteSSLEngine on SSLCertificateFile /etc/letsencrypt/live/<nom du site>/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/<nom du site>/privkey.pem - Ajouter les lignes concernant la sécurité
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder on SSLCompression off SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384 SSLOptions +StrictRequire - Forcer le STS
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains;" - Balise de fermeture du VirtualHost
</VirtualHost> - Le contenu du fichier doit être semblable à celui du fichier
project-camera.conf V5disponible ici - Si vous copiez/collez le contenu de ce fichier, vous devrez modifier l’IP locale, le nom du site, les ports des caméras… en fonction de vos paramètres.
SSLEngine on: Activation du moduleSSLSSLCertificateKeyFile: chemin vers le fichierprivkey.pemSSLCertificateChainFile: chemin vers le fichierchain.pemSSLProtocol: Désactive les protocoles les moins sûrs :SSLv3,TLSv1etTLSv1.1SSLHonorCipherOrder: Quand activé, le serveur force ses préférences de protocoles et non le navigateur du client.SSLCompression: La compression SSL n’est pas activéeSSLOptions +StrictRequire: Exige une connexion SSL stricteSSLCipherSuite: Liste des algorithmes de chiffrement disponiblesHeader always set Strict-Transport-Security: ouHSTS. Indique aux navigateurs que seul le https est supporté.
- Entrer dans la box en tapant
192.168.1.1dans la barre d’adresse du navigateur (à modifier selon l’opérateur et le réseau) - Ajouter la règle dans le
NAT/PATApplication Service: donner un nouveau nom, par exemple Web Server httpsPort interne: 443Port externe: 443Protocole: TCPEquipement: votre raspberryIP externe: toutes, sauf si vous voulez limiter l’accès
- En accédant au site depuis l’extérieur du réseau, vous constatez que le symbole cadenas précède l’adresse de votre site.
- Tester le niveau de sécurité
- Aller sur le site de SSL Labs
- Entrez le nom de votre site pour le tester
- Théoriquement vous devez obtenir la note
A+
- Le certificat est valable 90 jours ; on écrit un script bash pour le renouveler automatiquement.
- Créer le script et l’ouvrir en écriture
nano ~/script/certbotRenew.sh - Écrire le script en ajoutant les deux lignes
#!bin/bash echo "1" | sudo certbot certonly --force-renew -d <nom du site> - Modifier <nom du site> par le nom du site, par exemple monsite.net
- Il est nécessaire d’utiliser le flag -d, car deux sites ont été créés : <nom du site> et www.<nom du site>
echo "1"permet de forcer la réponse à la question posée par certbot :How would you like to authenticate with the ACME CA?et qui propose trois réponses.- Vérifier en lançant la commande
sudo certbot certonly --force-renew -d <monsite>que la réponse 1
1: Apache Web Server plugin (apache)est la plus appropriée - Éditer le crontab
crontab -e - Lancer le script tous les deux mois en ajoutant la ligne
10 02 3 2,4,6,8,10,12 * sh /home/pi/script/certbotRenew.shLe script sera lancé à 2 heures 10 le troisième jour des mois pairs. Dans la mesure où certains trimestres durent 92 jours, on doit renouveler le certificat tous les deux mois.
- Pour une raison obscure la commande suivante (équivalente à la précédente) n’a pas fonctionné :
10 02 3 */2 * sh /home/pi/script/certbotRenew.sh - Pour vérifier la validité du certificat, lancer depuis le terminal de n’importe quel ordinateur la commande :
echo | openssl s_client -connect <nom du site>:443 -servername <nom du site> 2>/dev/null | openssl x509 -noout -datesen adaptant <nom du site>, par exemple monsite.freeddns.org
- La commande doit renvoyer une réponse du style :
notBefore=Oct 5 05:23:04 2023 GMT notAfter=Jan 3 05:23:03 2024 GMT - Il est possible de vérifier la validité du certificat depuis la raspberry en lançant la commande :
sudo certbot certificates
- Votre site est sécurisé https
- Il a un score global A+
- Le certificat de Let’s Encrypt est renouvelé automatiquement tous les deux mois.
- Automatiser les mises à jour de la raspberry
- Être informé des redémarrages de la raspberry
- Etre informé des changements d’IP de la box
- Mettre en place un accès par ssh sur la raspberry depuis son téléphone portable