Home Assistant Mariadb container ajout flux chiffré ssl=true

Mon problème

Bonjour à tous,
je suis en train de tester Mariadb comme alternative à la base par defaut de home assistant.
je suis parti d’une installe docker sans passer par l’addon pour mariadb.
Home assistant est installé en supervised sur debian11.
j’arrive à faire fonctionner HA avec Mariadb sans soucis.
Maintenant je voudrais que la connexion HA → mariadb soit chiffré.
j’ai créé mes certificats et suivi la doc pour configuré mariadb
j’ai fait un test de connexion avec depuis un client mariadb-clients et ça marche :

Current user: phpuser@172.50.10.1
SSL: Cipher in use is TLS_AES_256_GCM_SHA384
Current pager: stdout
Using outfile: ‹  ›
Using delimiter: ;
Server: MariaDB
Server version: 10.8.3-MariaDB-1:10.8.3+maria~jammy mariadb.org binary distribution
Protocol version: 10
Connection: 172.50.0.2 via TCP/IP

j’essai de le faire pour home assistant (j’ai repris le meme user pour etre sur « phpuser »
j’ai ajouté dans mon configuration.yaml :

recorder:
  purge_keep_days: 30
  db_url: !secret recorder_db_url

et dans secret :

recorder_db_url: mysql://phpuser:xxxxx@172.30.32.10/home_assistant?charset=utf8mb4;ssl=true

mais je vois pas bien comment cela peut marcher si il ne va pas chercher mes certificats clients
je les ai placé dans /usr/share/hassio/ssl mais ça ne marche pas.
la doc de recorder via mariadb donne bien cette info de ssl=true mais c’est tout :

MariaDB (omit pymysql, using TLS encryption)

et mon message d’erreur dans HA :

[homeassistant.components.recorder.core] Error during connection setup: (MySQLdb.OperationalError) (2019, « Can’t initialize character set utf8mb4;ssl=true (path: compiled_in) »)

comme si il ne comprenait pas le « ;ssl=true » qui considère comme partie entière de charset :thinking:

là je sèche, merci de votre aide !

Ma configuration


[center]##

version core-2022.7.6
installation_type Home Assistant Supervised
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.5
os_name Linux
os_version 5.10.0-16-amd64
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Debian GNU/Linux 11 (bullseye)
update_channel stable
supervisor_version supervisor-2022.07.0
agent_version 1.2.2
docker_version 20.10.17
disk_total 28.7 GB
disk_used 10.7 GB
healthy true
supported failed to load: Unsupported
supervisor_api ok
version_api ok
installed_addons File editor (5.3.3)
Dashboards
dashboards 1
resources 0
mode auto-gen
[/center] ___

Salut,

Je met de coté le fait discutable qu’avoir du mariadb en substitution apporte déjà quelque chose mais puisque les 2 containers (HA et mariadb) sont normalement sur un vlan docker identique pour communiquer:

  • Assure-toi qu’uniquement ces 2 là y sont connectés (vlan dédié type bridge), les flux seront déjà isolés
  • le chiffrage coute en cpu/mémoire/bande passante
  • les certificats sont à gérer (autorité, renouvellement etc)

Si on fait le calcul, la mise en place d’un tel chiffrage de la connexion n’a absolument AUCUN apport/gain et ajoute SEULEMENT des contraintes. Une bonne gestion du réseau docker est suffisante. Donc la question est quel est le besoin ?

merci pour ton retour…

Je ne vais pas rentrer dans les détails du pourquoi du comment… quel est l’interet de chiffrer et encore moins
le cout sur les perfs (on parle de HA là :wink: on peut faire un autre topic sur le sujet pas de soucis !

Je souhaite tout simplement faire le test et voir si ça marche et si c’est possible.
pour les certificats j’ai mis 365000 jours avant que j’ai besoin de les renouveler donc ça va le faire :grinning:
Comme je l’ai dis plus haut la connexion sans ssl de HA vers Mariadb fonctionne donc oui ils sont bien dans un network où ils se voient et communiquent bien !

Je propose de commencer plus ‹ ouvert › et sans SSL, just pour voir si c’est les certificats ou non.
Mon réseau est sur 192.168.x.x., mon HA sur ‹ host › et je ne doit pas specifier l’IP du container, just l 'ip de la machine ou mysql marche

Soit : l’intérêt pédagogique est certain. Une bonne config docker tout autant
De là à faire du SSL sur HA et à l’exploiter au quotidien par HA c’est plus tout à fait pareil

« De là à faire du SSL sur HA et à l’exploiter au quotidien par HA c’est plus tout à fait pareil »

:ok_hand:

Sûrement en effet mais encore une fois là n est pas le sujet … c est un super exercice je trouve

Alors comme je l ai dis sans ssl ça marche
C est à dire : ne pas mettre ssl=true dans db_url et repasser le compte phpuser en connexion normal : tout fonctionne :+1:

C’est aussi le sujet car si de ton coté, tu va jouer avec SSL et faire l’exercice : pas de souci. Sauf que dans quelques semaines, un autre utilisateur qui tombera sur ce sujet et voudra prendre exemple sans forcément comprendre les tenants et aboutissants d’un tel choix. Là au moins les choses sont dites même si tu juges que pour toi ça ne sert à rien.

Personnellement moi je remplacerai ;ssl=true par &useSSL=true c’est beaucoup plus conforme au standard jdbc

Merci Pulpy la piste était bonne la syntaxe correct est :
recorder_db_url: 'mysql://ha_user:<mot_de_passe>"@172.xx.xx.xx/home_assistant?charset=utf8mb4&ssl=true'

j’ai donc HA en SSL / Base de données Mariadb et connection chiffrée entre ha et mariadb
:ok_hand: