Aller au contenu principal

Plug and Play securise pour ESP32 sur Ethernet

Objectif

Mettre en place un systeme dans lequel un Raspberry Pi ou Compute Module detecte automatiquement les controleurs ESP32 presents sur le reseau Ethernet, verifie leur identite, puis les connecte automatiquement de maniere securisee.

Le flux est separe en 6 etapes:

  1. Decouverte
  2. Identification
  3. Authentification
  4. Autorisation
  5. Enregistrement
  6. Communication securisee
ESP32 branche au reseau
|
v
Decouverte automatique
|
v
Identification
|
v
Authentification cryptographique
|
v
Autorisation
|
v
Enregistrement
|
v
Connexion securisee

Architecture generale

GARAGE

+-----------------+
| Raspberry / CM5 |
| |
| Device Manager |
| MQTT Broker |
| Local CA |
+--------+--------+
|
Ethernet
|
+------v------+
| Switch PoE |
+---+---+---+-+
| | |
Cat6A Cat6A Cat6A
| | |
v v v
ESP32 ESP32 ESP32
Salon Cuisine Chambre

Le Raspberry Pi ou Compute Module joue le role de controleur central. Chaque ESP32 est un controleur local autonome.

1. Attribution d'adresse IP

Lorsqu'un ESP32 est branche au reseau, il demande automatiquement une adresse IP via DHCP.

Dans cette architecture:

  • le serveur DHCP effectif est local au reseau domotique (routeur local ou dnsmasq sur le RPi),
  • la partie domotique est independante de central: attribution IP puis communication ESP32 -> RPi en TCP (MQTT local).
ESP32
|
| DHCP request
v
RPi (dnsmasq) ou routeur local / DHCP
|
| IP address
v
ESP32

192.168.10.21

Aucune configuration manuelle d'IP n'est necessaire sur chaque carte.

2. Decouverte automatique avec mDNS et DNS-SD

Chaque ESP32 annonce sa presence sur le reseau local.

Exemple hostname:

room-controller-8F32.local

Exemple service:

_homecontroller._tcp.local

Exemple d'informations detectees:

ESP32 #01
Device ID: HC-000001
IP: 192.168.10.21
Type: room-controller
Firmware: 1.3.2

ESP32 #02
Device ID: HC-000002
IP: 192.168.10.22
Type: room-controller
Firmware: 1.3.2

Important: mDNS sert uniquement a la decouverte. Ce n'est pas une preuve d'identite.

3. Identite cryptographique de chaque ESP32

Chaque carte possede une identite unique provisionnee en fabrication:

Device ID
+
Private Key
+
Device Certificate

Exemple:

Device ID:
HOME-CTRL-00000427

Certificate:
CN=HOME-CTRL-00000427

Private Key:
[SECRET]

La cle privee ne doit jamais quitter l'appareil.

4. Secure Element

Pour renforcer la securite, la cle privee peut etre stockee dans un composant dedie.

+-----------------------------+
| Room Controller |
| |
| ESP32 |
| | |
| +---- Secure Element |
| | |
| +-- Private Key |
| +-- Certificate |
| |
| Ethernet + PoE |
+-----------------------------+

Le microcontroleur peut signer sans exposer la cle privee.

5. Autorite de certification locale

Le systeme utilise sa propre CA locale.

HOME AUTOMATION CA
|
+----------+----------+
| | |
ESP32 #1 ESP32 #2 ESP32 #3

Les certificats des controleurs sont signes par cette CA. Le controleur central determine alors si la carte appartient au systeme.

6. Verification d'un nouvel appareil

Lorsqu'un nouvel ESP32 apparait:

Raspberry / CM5
|
| demande d'identite
v
ESP32
|
| certificat
v
Raspberry / CM5

Checks minimaux:

Signature valide ? YES
CA reconnue ? YES
Certificat expire ? NO
Device revoque ? NO
Device ID autorise ? YES

En cas d'echec, le device reste refuse.

7. mTLS

Apres verification, les communications passent en mTLS.

ESP32 CM5
| |
|---- certificat ----------->|
|<--- certificat ------------|
| |
| verification mutuelle |
| |
+===== canal chiffre ========+

Le Raspberry verifie l'ESP32 et l'ESP32 verifie le Raspberry.

8. MQTT securise

MQTT est utilise comme protocole applicatif au-dessus du canal securise.

CM5
+----------------+
| MQTT Broker |
| Device Manager |
| Local CA |
+-------+--------+
|
Switch PoE
|
+-------------+-------------+
| | |
mTLS mTLS mTLS
| | |
v v v
ESP32 ESP32 ESP32
Salon Cuisine Chambre

Chaque ESP32 se connecte au broker avec son identite.

9. Organisation des topics MQTT

Exemples de topics:

home/livingroom/temperature
home/livingroom/light/1/state
home/livingroom/window/state

home/kitchen/temperature
home/kitchen/light/1/state

home/bedroom/shutter/1/state

Commande:

home/livingroom/light/1/set

Payload:

ON

10. ACL et permissions

Chaque controleur doit avoir uniquement les permissions necessaires.

Exemple:

DEVICE: HOME-CTRL-LIVINGROOM

ALLOW publish:
home/livingroom/#

ALLOW subscribe:
home/livingroom/command/#

DENY:
home/bedroom/#
home/kitchen/#

Une compromission locale ne doit pas donner acces aux autres zones.

11. Procedure Plug and Play

CAT6A connecte
|
v
ESP32 POWER ON
|
v
DHCP
|
v
Adresse IP
|
v
Annonce mDNS / DNS-SD
|
v
CM5 decouvre l'appareil
|
v
Verification certificat
|
v
Authentification mTLS
|
v
Association a une piece
|
v
Enregistrement
|
v
Connexion MQTT securisee
|
v
READY

12. Premiere association

Pour la securite, decouverte automatique ne signifie pas autorisation automatique.

Exemple UX:

NEW DEVICE DETECTED

Room Controller
ID: HC-000042
Firmware: 1.4.2
Network: Ethernet
Security: VERIFIED

Assign to room:

- Living room
- Kitchen
- Bedroom
- Garage

[ ACTIVATE ]

L'utilisateur autorise une seule fois. Les connexions suivantes deviennent automatiques.

13. Provisioning en fabrication PCB

PCB ASSEMBLY
|
v
ESP32 programmed
|
v
Device ID generated
|
v
Cryptographic identity generated
|
+-- Device certificate
|
+-- Private key
|
v
Secure Element
|
v
Functional test
|
v
Shipment

14. Architecture recommandee

Ethernet / PoE
|
v
DHCP
|
v
mDNS / DNS-SD
|
v
Device Certificate
|
v
mTLS
|
v
MQTT
|
v
ACL

Role de chaque technologie

TechnologieRole
Ethernetreseau physique
PoEdonnees + alimentation
DHCPattribution automatique des IP
mDNS / DNS-SDdecouverte des appareils
X.509 / certificatsidentite des appareils
Secure Elementprotection des cles privees
mTLSauthentification mutuelle et chiffrement
MQTTmessages et commandes domotiques
ACLpermissions par appareil

15. Principe de securite

Le principe fondamental:

Decouvrir automatiquement n'est pas faire confiance automatiquement.

Un appareil peut etre detecte sans avoir le droit de controler la maison. L'acces est accorde uniquement apres verification cryptographique et autorisation.

Architecture cible

RASPBERRY PI / CM5
|
+---------+----------+
| Device Manager |
| MQTT Broker |
| Certificate CA |
| ACL |
+---------+----------+
|
Ethernet / PoE
|
Switch PoE
|
+-------------+-------------+
| | |
v v v
Controller Controller Controller
ESP32 ESP32 ESP32
Salon Cuisine Chambre
| | |
GPIO/I2C GPIO/I2C GPIO/I2C
| | |
Relais Capteurs Volets

Cette architecture donne un systeme domotique local, modulaire, evolutif et securise.

Mapping avec l'implementation du daemon C++

Dans le daemon nodes/agent:

  • Le daemon ne fait pas serveur DHCP natif.

  • Le DHCP reste un service local de l'infrastructure domotique (souvent dnsmasq sur le RPi).

  • Apres attribution IP, le daemon prend le relais pour l'onboarding securise.

  • Endpoint POST /secure/discover: reception des infos de decouverte + certificat PEM.

  • Verification X.509 via CA locale + regles d'autorisation.

  • Registre SQLite network_device_registry avec statuts: discovered, verified, rejected, active.

  • Endpoint GET /secure/pending: devices verifies en attente d'activation.

  • Endpoint POST /secure/activate/<device_id>/<room>: activation explicite.

  • Endpoint GET /secure/devices: registre complet.

Configuration node.json associee:

{
"secure_network": {
"enabled": true,
"require_activation": true,
"require_crl": false,
"discovery_ttl_s": 300,
"ca_cert_path": "/etc/leukos/pki/ca.crt",
"crl_path": "/etc/leukos/pki/crl.pem",
"mqtt_topic_prefix": "home",
"allowed_device_ids": [
"HOME-CTRL-000001",
"HOME-CTRL-000002"
]
}
}

Limitations actuelles et etapes suivantes

Actuellement, l'onboarding securise est pret cote daemon et API, mais la decouverte mDNS DNS-SD native n'est pas encore integree en thread interne. Elle peut etre branchee via un service de decouverte externe qui appelle POST /secure/discover.

Le DHCP local est hors daemon (service reseau dedie) et reste a orchestrer selon la topologie locale (dnsmasq sur RPi ou routeur local).

Suite recommandee:

  1. Ajouter la decouverte mDNS DNS-SD native dans le daemon.
  2. Ajouter une connexion MQTT mTLS device-to-broker complete.
  3. Generer ACL dynamiques basees sur room et device_id.
  4. Ajouter gestion de revocation en ligne et rotation certif.