TLS et ESPHome via MQTT

Hello,

J’ai configuré TLS sur Mosquitto en suivant ce tuto.
Comment faire en sorte que ESPHome accepte de s’y connecter ?
esphome logs <fichier.yaml> me retourne une erreur parce que le certificat est auto-signé.
à part changer le nom du certificat en broker au lieu de server, j’ai suivi les mêmes instructions.

Ma config Mosquitto:

listener 1883
listener 8883
cafile /mosquitto/config/ca_certificates/ca.crt
certfile /mosquitto/config/certs/broker.crt
keyfile /mosquitto/config/certs/broker.key
#listener 1883 127.0.0.1
allow_anonymous false
password_file /mosquitto/config/auth_users

Il faut utiliser comme indiqué dans la doc ESPHome le SSL Fingerprint pour cela :wink:
Petite question: ton serveur mqtt est local au reste de ta domotique ? Dans ce cas je désactiverais le TLS qui ne va que te faire chier à tous les coups et qui est totalement inutile dans un LAN :sunglasses:

Tu as fait comment pour créer les certificats?
Quel nom/adresse tu utilises dans la config esphome pour donner le nom du broker mqtt?
Quelle est l’erreur exacte?
Dans la configuration de mqtt de esphome, je crois comprendre que tu ne peux pas dire d’ignorer un certificat foireux.
Donc, il faut forcément que le certificat soit valide (donc le bon nom et pas créé « à la main »)…

Ce que j’ai fait :slight_smile:

Oui, il est sur le même réseau que le reste de ma domotique.
Totalement inutile dans un LAN, avec le paramètre wifi j’en ai un avis plus nuancé par contre.

J’ai créé un certificat CA :
openssl req -new -x509 -days 365000 -extensions v3_ca -keyout ca.key -out ca.crt
Dans le common name j’ai mis un nom d’hôte que je n’utiliserais pas pour accéder à MQTT.
Pui j’ai généré une clé privée pour le broker:
openssl genrsa -out broker.key 2048
Généré le CSR en spécifiant en common name l’adresse IP du broker:
openssl req -out broker.csr -key broker.key -new
Signé avec la clé CA:
openssl x509 -req -in broker.csr -CA ../ca_certificates/ca.crt -CAkey ../ca_certificates/ca.key -CAcreateserial -out broker.crt -days 365000

L’adresse IP du broker, que j’ai spécifié en common name pour la CSR.

ERROR Cannot connect to MQTT broker: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)

OK donc comme je le craignait, il semble que je sois bel et bien dans une impace avec mon certificat CA maison…

Ou peut-être qu’en ajoutant mon CA dans les root certificates côté système… Mais on a vu plus propre :wink:

Ou alors, utiliser un « vrai » certificat et te débrouiller avec un DNS menteur qui donne l’adresse IP locale lors de la résolution. C’est faisable avec pihole par exemple.

C’est à dire, faire en sorte que mqtt.mondomaine.fr (pour lequel tu peux avoir un certificat valide) soit accessible avec ton @IP interne 192.168.x.y. et pas via Internet.

Ou encore plus simple… Oublier TLS :slight_smile:

1 « J'aime »

oui ou tout simplement modifier le fichier hosts de l’instance/système qui héberge ha :smiley:

Non… Le « problème » c’est le côté ESPHOME. Il faut mettre un nom (et pas une IP) dans la config. Et ESPHOME ça s’appuie sur le DNS.

Je ne suis pas certain.
J’ai plus l’impression que la ligne de commande est la partie qui pose problème. Vu que côté ESPHome ça se base sur le fingerprint.
Finalement ça me fait penser, avec une variable de substitution il y aurait la possibilité de se connecter de deux façons différentes…
Après à voir à quel point je suis excessif de vouloir du TLS pour une connexion en réseau local, ça me semble être un point assez subjectif.

Ben si tu as un pass Wifi qui tient la route, le risque me parait assez négligeable ? Que quelqu’un compromette les données envoyées par ton ESP ou prenne le contrôle de ce que contrôle ton ESP ? Toute facon si ton pass Wifi a été compromis je pense que les soucis seront bien plus importants que tes ESP qui seront probablement un des derniers trucs attaqués (en général plus intéressant de s’en prendre aux ordis du LAN ou aux équipements routeur et compagnie…
C’est mon avis perso :wink:

1 « J'aime »