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:
- Decouverte
- Identification
- Authentification
- Autorisation
- Enregistrement
- 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
| Technologie | Role |
|---|---|
| Ethernet | reseau physique |
| PoE | donnees + alimentation |
| DHCP | attribution automatique des IP |
| mDNS / DNS-SD | decouverte des appareils |
| X.509 / certificats | identite des appareils |
| Secure Element | protection des cles privees |
| mTLS | authentification mutuelle et chiffrement |
| MQTT | messages et commandes domotiques |
| ACL | permissions 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_registryavec 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:
- Ajouter la decouverte mDNS DNS-SD native dans le daemon.
- Ajouter une connexion MQTT mTLS device-to-broker complete.
- Generer ACL dynamiques basees sur
roometdevice_id. - Ajouter gestion de revocation en ligne et rotation certif.