Une connexion via SSL/TLS protège le trafic de données en envoyant des paquets cryptés. Pour pouvoir établir une telle connexion, vous avez besoin d’un certificat d’un fournisseur digne de confiance, qui coûte généralement plus de 20 dollars par an. Grâce à l’initiative Let’s Encrypt, ces certificats SSL sont désormais accessibles à tous, gratuitement. Le grand avantage est que le certificateur est classé comme digne de confiance dans les navigateurs courants.
Dans cet article, je voudrais montrer comment utiliser les serveurs web Node.JS/Apache etc. Les applications (FTP, etc.) peuvent créer un certificat SSL Raspberry Pi.
Préparation
Pour pouvoir utiliser judicieusement un certificat SSL/TLS, un serveur web ou une application doit être installé sur le Raspberry Pi 3, pour lequel ou laquelle une connexion HTTP (S) doit être établie. Vous pouvez créer un serveur Node.JS.
En outre, je recommande vivement d’installer un serveur DNS dynamique si votre Raspberry Pi n’a pas d’adresse IP statique. Les fournisseurs d’accès Internet ne délivrent généralement une IP statique qu’aux ménages moyennant un supplément. Une adresse IP dynamique change au moins une fois par jour, c’est-à-dire qu’une autre adresse IP devrait être récupérée.
Ce problème peut être évité avec un service dDNS, car une connexion à un domaine (gratuit) est établie dès que l’adresse IP dynamique change. Vous pouvez donc appeler ce domaine au lieu de l’adresse IP qui change et le service dDNS s’occupe de tout le reste. En outre, votre domaine correct (si vous en avez un) peut également pointer vers ce « domaine intermédiaire » via des entrées DNS.
Si vous utilisez un serveur Apache, vous pouvez le terminer de la manière suivante. Pour terminer un serveur Node.JS, il suffit de détruire l’application (si nécessaire, terminez le processus d’arrière-plan).
sudo service apache2 stop
Assurez-vous également qu’en plus du port 80, le port 443 de votre routeur (recommandation : FRITZ ! Box) est également approuvé pour l’adresse IP interne du Raspberry Pi.
Création d’un certificat SSL Let’s Encrypt
Nous utilisons Git pour télécharger l’outil de création de certificats. Celui-ci est déjà inclus dans les versions les plus récentes de Raspbian. Si ce n’est pas sur votre système d’exploitation (par exemple une version Minimal Raspbian), vous pouvez simplement l’installer :
sudo apt-get install git
Nous chargeons ensuite les fichiers dans notre répertoire personnel et allons dans ce dossier :
cd ~
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
Il vous faut à présent tous les domaines auxquels ce certificat doit s’appliquer. Si vous avez, par exemple, des sous-domaines ou si votre domaine est appelé avec et sans « www », vous pouvez tous les spécifier tout de suite. Dans mon exemple, je veux juste créer le certificat SSL pour mon domaine, que j’ai obtenu de NoIP. S’il y a plusieurs domaines, vous devez d’abord entrer le domaine principal.
La commande pour créer le certificat Let’s Encrypt est la suivante (remplacer domaines et mail) :
./letsencrypt-auto -d FIRST_DOMAIN -d SECOND_DOMAIN --redirect -m YOUR_MAIL
Le paramètre --redirect
spécifie que les connexions HTTP normales sont automatiquement transférées vers HTTPS. L’adresse e-mail est nécessaire pour nous contacter ou si le certificat devait être restauré un jour.
Remarque : si vous utilisez un serveur Apache, vous pouvez également laisser l’outil effectuer tous les autres réglages en ajoutant le paramètre --apache
.
Il vous sera maintenant demandé de lire et d’accepter les conditions d’utilisation.
Avec l’option certonly
vous pouvez également spécifier que seuls les certificats doivent être créés. Dans le dossier « /etc/letsencrypt/live/ » il y a un nouveau dossier avec le nom de notre domaine principal. Il y a quatre fichiers clés qui sont nécessaires. Selon l’application, l’installation des certificats SSL est quelque peu différente. Dans Node.JS le certificat doit être par exemple chargé par le code. Vous pouvez découvrir ici comment fonctionne la configuration manuelle pour Apache2.
À ce sujet : Si vous avez besoin d’aide ou si vous voulez voir tous les autres paramètres de l’outil, vous pouvez le faire facilement avec ./letsencrypt-auto --help all
Renouvellement du certificat SSL
Tous les certificats Let’s Encrypt ont une durée de vie de 3 mois. Après cette période, ils expirent et doivent être renouvelés. Le renouvellement du certificat SSL de Raspberry Pi est très facile (n’oubliez pas de l’ajuster) :
./letsencrypt-auto -d FIRST_DOMAIN -d SECOND_DOMAIN --redirect -m YOUR_MAIL --agree-tos --renew-by-default
Ici, c’est le paramètre --renew-by-default
qui est déterminant. Les autres paramètres (supplémentaires) sont identiques à ceux que nous avons spécifiés lors de leur création.
Or, il se trouve qu’en fonctionnement continu, on ne veut pas forcément penser à mettre à jour le certificat tous les 3 mois. Il existe donc une petite astuce : si le Raspberry Pi est (presque) toujours en fonctionnement de toute façon, nous pouvons mettre à jour le certificat plus tôt, par exemple tous les mois. Pour exécuter cette opération automatiquement, nous utilisons Cron:
sudo crontab -e
À la fin de ce fichier, nous ajoutons la ligne suivante (adaptée comme ci-dessus) :
1 |
0 1 2 * * /home/pi/letsencrypt/letsencrypt-auto -d FIRST_DOMAIN -d SECOND_DOMAIN --redirect -m YOUR_MAIL --agree-tos --renew-by-default |
Ceci lancera l’outil le 1er de chaque mois à 02:00 et renouvellera notre certificat SSL Raspberry Pi.
Test du certificat SSL de Raspberry Pi
Si le service DNS dynamique est en cours d’exécution et que votre serveur web est redémarré (sudo /etc/init.d/apache2 start
) vous pouvez maintenant tester dans le navigateur si votre certificat a été reconnu. Pour ce faire, il suffit d’ouvrir le domaine avec https : // au début. Avec apache2 en particulier, il est important que le fichier /etc/apache2/ports.conf
ne comporte qu’une seule entrée qui utilise le port 443 (commentez toutes les autres) :
<IfModule mod_ssl.c> Listen 443 </IfModule>
Le certificat devrait à présent s’afficher dans le navigateur :
De nombreux autres détails peuvent également être trouvés dans la documentation officielle de Let’s Encrypt.