ESP32/ESP8266 avec cryptage HTTPS et SSL/TLS : concepts de base

ESP32/ESP8266 avec cryptage HTTPS et SSL/TLS : concepts de base

Cet article est une introduction simple et rapide au chiffrement HTTPS et SSL/TLS avec la carte ESP32 et ESP8266 NodeMCU. Nous allons examiner certains concepts et termes que vous avez probablement déjà entendus, mais dont vous ne savez peut-être pas exactement ce qu’ils signifient : HTTPS, SSL/TLS, certificats, chiffrement à clé asymétrique et symétrique, etc.

ESP32 ESP8266 Concepts de base du cryptage HTTPS et SSL TLS NodeMCU

Table des matières

Tout au long de cet article, nous aborderons les sujets suivants :

Qu’est-ce que le HTTPS ?

HTTPS est la version sécurisée du protocole HTTP, d’où le « S », qui signifie sécurisé.

HTTP est un protocole de transfert de données sur Internet. Lorsque ces données sont chiffrées avec SSL/TLS, elles s’appellent HTTPS.

Protocole de requêtes HTTP vs HTTPS

Pour simplifier, HTTPS n’est que le protocole HTTP mais avec des données cryptées à l’aide de SSL/TLS.

Pourquoi avez-vous besoin de HTTPS ?

L’utilisation de HTTPS garantit ce qui suit :

  • Intimité: personne ne peut espionner vos requêtes et vos mots de passe car les messages sont cryptés.
  • Intégrité: le message n’est pas manipulé sur son chemin vers sa destination (empêche les attaques d’hommes du milieu).
  • Identification: en utilisant HTTPS, via des certificats SSL, vous vous assurez d’être connecté au serveur auquel vous vous attendez.

Qu’est-ce que SSL/TLS ?

SSL représente Ssécurisé Spoche Loui et TLS représente Jtransport Loui Ssécurité. Ce sont deux protocoles utilisés pour le chiffrement sécurisé. SSL est actuellement obsolète. TLS 1.3 est actuellement le protocole le plus récent utilisé pour le chiffrement sécurisé sur le Web.

Comment fonctionne le cryptage SSL/TLS ?

Il existe deux types d’algorithmes de chiffrement : algorithme à clé symétrique et algorithme à clé asymétrique.

Chiffrement à clé symétrique

Avec un algorithme à clé symétrique, la même clé est utilisée pour chiffrer et déchiffrer les messages. Ainsi, le client et le serveur doivent avoir la même clé.

Cryptage à clé symétrique Comment fonctionne le cryptage SSL TLS

L’inconvénient de l’utilisation d’un algorithme à clé symétrique est que les clés sont difficiles à partager et que vous devez faire attention à la manière et à qui vous distribuez la clé.

Chiffrement de clé asymétrique

Le cryptage SSL/TLS utilise des clés asymétriques.

Cryptage à clé asymétrique SSL Cryptage TLS

Comment fonctionne le chiffrement à clé asymétrique ? Très brièvement:

  • Vous disposez de deux clés asymétriques : une clé publique et une clé privée.
  • La clé publique et la clé privée fonctionnent ensemble.
  • La clé publique, comme son nom l’indique, est visible par tous.
  • Seule la clé privée peut déchiffrer le message chiffré avec la clé publique correspondante.

Clé publique et clé privée

En résumé, voici comment cela fonctionne :

  • Le client du navigateur essaie de contacter le serveur.
  • Le serveur envoie la clé publique au client (navigateur) via le certificat SSL du serveur.
  • Le navigateur envoie un message au serveur chiffré avec la clé publique.
  • Seuls ceux qui ont la clé privée (le serveur) peuvent déchiffrer le message.

Communication via HTTPS

Comment fonctionne la communication entre le serveur et le client via HTTPS ? Le diagramme suivant montre un aperçu de haut niveau de son fonctionnement.

Communication HTTPS avec certificat SSL
  • Vous, le client de votre navigateur, essayez de vous connecter au serveur (1);
  • Le serveur renvoie son certificat (2) afin que le navigateur puisse vérifier l’authenticité du serveur (3). Le certificat contient la clé publique.
  • Si le certificat est valide, le client crée une nouvelle clé (appelée clé de session) (4) qui sera utilisé plus tard pour chiffrer la communication entre le client et le serveur.
  • Le client chiffre la clé de session à l’aide de la clé publique envoyée par le serveur (5).
  • Le serveur reçoit la clé de session chiffrée avec la clé publique et peut déchiffrer le message car seul le serveur a accès à la clé privée correspondante pour déchiffrer le message (6);
  • A partir de maintenant, le client et le serveur ont une clé secrète (qui n’est connue que d’eux) qu’ils peuvent utiliser pour chiffrer les communications ultérieures (sept) (cryptage à clé symétrique).

Certificats SSL

Les certificats SSL sont émis par des autorités de certification légitimes. L’un des plus connus est LetsEncrypt. Les autorités de certification confirment également l’identité du propriétaire du certificat et fournissent la preuve que le certificat est valide.

Lorsqu’une autorité de certification émet un certificat, elle signe le certificat avec son certificat root. Ce certificat root doit se trouver dans la base de données des certificats de confiance.

Certificats SSL Interaction client-serveur

Votre navigateur vérifie alors si le certificat est valide (s’il a été signé avec un certificat root sur la base de données des certificats root de confiance) et affiche une icône de cadenas vert sur la barre du navigateur si c’est le cas.

Certificats auto-signés

Vous pouvez auto-signer vos certificats. Ceux-ci fournissent le même niveau de cryptage que celui généré par une autorité, et ils sont gratuits. Cependant, tous les navigateurs vérifieront si le certificat est émis par une autorité de certification de confiance. Ainsi, vous serez averti par votre navigateur que le site que vous visitez n’est pas sûr car il ne fait pas confiance au certificat et ne peut donc pas identifier son propriétaire.

Navigateur Web de certificats auto-signés

Le navigateur Web affichera un signe d’avertissement et les lettres HTTPS en rouge. Cela signifie que le site Web a un certificat, mais que le certificat n’est pas vérifié (comme les certificats auto-signés) ou obsolète. Cela signifie que la connexion entre vous et le serveur est cryptée, mais personne ne peut garantir que le domaine appartient réellement à la société indiquée sur le site.

Les certificats auto-signés conviennent parfaitement à vos projets DIY et IoT, aux intranets, comme votre réseau local, ou à l’intérieur du réseau d’une entreprise. Toutefois, si vous créez un projet pour une entreprise qui sera accessible par des clients extérieurs au réseau de l’entreprise, comme un site Web public, il est préférable d’utiliser un certificat d’une autorité de certification.

Les certificats SSL ont une date d’expiration. Ainsi, si vous utilisez un ESP32 pour vous connecter à un site Web via HTTPS, vous devez garder à l’esprit que vous devrez mettre à jour le code avec le certificat du nouveau site Web à l’avenir.

Si vous êtes toujours confus à propos de tous ces nouveaux termes, nous vous recommandons de jeter un œil au site Web suivant qui explique de manière amusante comment tout fonctionne : https://howhttps.works/.

ESP32 : Requêtes HTTPS (IDE Arduino)

Si vous êtes familier avec les requêtes HTTP avec l’ESP32, la « migration » vers HTTPS est très simple.

ESP32 HTTPS Demandes Certificat SSL du serveur client de connexion sécurisée Arduino IDE

Si vous utilisez le Client WiFi bibliothèque, il vous suffit d’apporter les modifications suivantes :

  1. Utilisation WiFiClientSecure.h bibliothèque au lieu de WiFiClient.h
  2. Utiliser le port 443 au lieu de port 80
  3. Remplacez l’URL de l’hôte par https à la place de http

Avec cela, vous vous assurez que votre communication est cryptée à l’aide de TLS.

Une étape de sécurité supplémentaire consiste à vérifier le certificat du serveur (le certificat du site Web auquel vous souhaitez vous connecter). Vous pouvez ignorer cette étape lors des tests et du prototypage. La communication sera cryptée, mais vous ne serez pas sûr de l’intégrité du serveur avec lequel vous essayez de communiquer.

Vous pouvez également trouver des exemples utilisant HTTPS avec le Client HTTP bibliothèque.

Si vous souhaitez commencer à travailler sur vos requêtes HTTPS tout de suite, jetez un œil aux exemples fournis dans le package ESP32 pour le noyau Arduino.

Serveur HTTPS ESP32 (IDE Arduino)

ESP32 HTTPS Demandes Certificat SSL du serveur client de connexion sécurisée Arduino IDE

Pour le moment, il n’y a pas beaucoup d’exemples de construction d’un serveur Web HTTPS avec l’ESP32 utilisant le noyau Arduino. Malheureusement, le AsyncWebServer bibliothèque que nous utilisons dans la plupart de nos projets, ne prend pas entièrement en charge HTTPS pour le moment.

Néanmoins, il existe une autre bibliothèque qui fournit des méthodes simples pour créer un serveur Web HTTPS ESP32, y compris un exemple qui génère des certificats à la volée. Voici un lien vers la bibliothèque : bibliothèque esp32_https_server.

Si vous connaissez ESP-IDF, vous pouvez consulter la documentation sur le lien suivant :

Requêtes HTTPS ESP8266 (IDE Arduino)

ESP8266 NodeMCU HTTPS demande le certificat SSL du serveur client de connexion sécurisée Arduino IDE

Il existe plusieurs exemples qui montrent comment faire des requêtes HTTPS avec l’ESP8266. Vous pouvez consulter les exemples disponibles dans votre IDE Arduino. Assurez-vous que la dernière version des cartes ESP8266 est installée pour vous assurer que vous avez accès à la dernière version des exemples et que ceux-ci fonctionneront.

Pour mettre à jour l’installation des cartes ESP8266, il vous suffit de vous rendre sur Outils > Planches > Gestionnaire de tableauxrechercher ESP8266, et installez la dernière version.

Ensuite, vous aurez accès à la dernière version des exemples. Vous pouvez vérifier les exemples suivants :

  • Client HTTPS de base utilisant le Client ESP8266HTTP bibliothèque: Dossier > Exemples > Client ESP8266HTTP > BasicHttpsClientBasicHttpsClient
  • Client HTTPS de base utilisant WiFiClientSécurisé bibliothèque: Dossier > Exemples > ESP8266Wi-Fi > HTTPSRequest

Vous devrez mettre à jour les certificats et les empreintes digitales pour que les exemples fonctionnent. Si vous ne parvenez pas à faire fonctionner les exemples, ne vous inquiétez pas, nous publierons bientôt des tutoriels avec des exemples et des instructions.

Serveur HTTPS ESP8266 (IDE Arduino)

ESP8266 NodeMCU Server HTTPS Requests Arduino IDE Secure Connection Client Server SSL Certificate

L’ESP8266 n’est pas optimisé pour la cryptographie SSL, donc l’exécution d’un serveur HTTPS sur l’ESP8266 est très exigeante. Vous devez régler la fréquence d’horloge sur 160 MHz et même ainsi, vous risquez d’obtenir des réinitialisations inattendues sur la carte.

Pour un serveur Web HTTPS ESP8266, vous pouvez jeter un œil à un exemple en utilisant le ESP8266WebServer bibliothèque sur le lien suivant :

Conclusion

Dans ce didacticiel, nous avons examiné le protocole HTTPS, le cryptage SSL/TLS et les certificats SSL. Je suis loin d’être un expert dans ces sujets, donc si quelque chose ne va pas dans cet article, faites-le moi savoir dans les commentaires ci-dessous.

Nous avons également examiné rapidement les moyens possibles de sécuriser vos projets IoT ESP32/ESP8266 : comment effectuer des requêtes HTTPS et comment configurer l’ESP32/ESP8266 en tant que serveur HTTPS avec un certificat. Nous créerons d’autres tutoriels avec des exemples pratiques sur ces sujets dans les semaines à venir, alors restez à l’écoute.

Si vous avez des exemples de serveurs HTTPS avec l’ESP32 ou si vous connaissez d’autres bibliothèques pour créer un serveur HTTPS, veuillez les partager dans les commentaires ci-dessous.

Merci d’avoir lu.