Mon petit problème est à la fois, concret et… déroutant.
Je voulais sécuriser au mieux (mode parano) mon accès ici à home assistant par l’intermédiaire du protocole HTTPS. Jusque là, l’intention est louable bien qu’un peu capilotractée car mon home-assistant n’est accessible qu’en local !
Avec l’aide notement de Pihole, Unbound, NPM et Proxmox (pour le pare-feu mais ça c’est pour plus tard), non sans mal j’ai réussi à créer mes certificats TLS/SSL, mon CA, installer tout ce joyeux bordel où il faut et ça fonctionne sur mon PC. Sauf…
SAUF sur Android !!! Dixit ChatGPT :
Pourquoi Android rejette le certificat ?
Depuis Android 7 (Nougat), les certificats racines ajoutés par l’utilisateur ne sont pas utilisés par défaut pour les connexions HTTPS des applications (notamment Chrome, Firefox, etc.), pour des raisons de sécurité.
Seules les applications système (ou explicitement configurées) acceptent les certificats utilisateurs.
Les navigateurs peuvent aussi avoir leurs propres règles.
Du coup, si jamais quelqu’un a une solution fonctionnelle, qu’il n’hésite pas à se faire connaître ^^
Je précise que la solution de rooter son téléphone c’est non pas plus que d’ouvrir sa box à internet pour obtenir un certificat Let’s Encrypt.
Etant chez Free, si je dois avoir un accès distant à mon HA, je passe en VPN Wireguard et c’est tout simple.
Ou tu l’ouvre sur l’extérieur et ok le ssl est indispensable autant en interne c’est vraiment inutile
Après si tu possèdes en pihole tu peux faire au plus simple en spoofant un nom de domaine avec ton DNS interne et générer un certificat ssl avec un challenge DNS
A première vue, tu as créé une CA privée avec un certificat de CA autosigné et tu as signé le certificat serveur de HA avec cette CA privée.
Comme, sauf bidouille, tu ne peux pas enregistrer ton certificat de CA dans le magasin de ton téléphone Android, le certificat de ton serveur HA n’est pas considéré digne de confiance.
C’est comme une carte d’identité tamponnée avec un tampon de jouet.
Si tu tiens absolument à utiliser HTTPS pour les accès locaux, il te faut installer un certificat pour le serveur HA signé par une CA officielle. Il en existe de gratuits; voir détails sur le forum, notamment sur le renouvellement automatique des certificats qui ont une durée de vie assez courte.
Dans le futur, si je veux faire des choses avec les assistants vocaux ou des trucs nécessitant une ouverture du serveur HA sur l’extérieur, là oui il me faudra en passer cette ouverture.
Mais avant cela, je ne vois pas l’intérêt d’ouvrir grand ses portes (et ses ports) exposées au monde entier uniquement dans un but de certifier une connexion.
Je trouve l’idée absurde et contre intuitive : « pour vous aider à sécuriser, ouvrez grand votre serveur… »
j’ai jamais dit cela c’est pour ça que j’ai parlé de challenge DNS qui permet de valider les certificats via un enregistrement DNS comme le supporte duckdns,OVH et bien d’autres
mais encore si tu n’ouvres pas de port le SSL n’a aucun intérêt
Oui, logique que ce soit un certificat « auto-signé » puisque le travail se fait en local.
Avec Windows, on arrive encore à implémenter un CA de confiance dans le magasin et ça roule.
Sous Android, c’est verrouillé de chez verrouillé ! En rootant son téléphone ça devrait être possible mais ça revient à s’auto-pirater.
Même si je pense que les certificats ssl/TLS en local sont pas forcément utile .
Le soucis sur android, c’est que même si tu peux ajouter un certificat, ce n’est pas dit que les applications l’acceptent, et tu auras sans arrêt un message « votre traffic est potentiellement surveillé », à part ça, rien de compliqué pour installer un certificat .
Une solution serait de passer par un autre type de challenge que le http pour avoir un certificat valide, mais ça veut dire être propriétaire du domaine, et le forcer à passer par l’intérieur … ( tu peux avoir des soucis avec les économiseurs de datas par exemple )
Alors cette solution m’intéresse
Je ne sais pas si c’est bien facile mais comprenez que ma philosophie dans l’histoire c’est bien de renforcer ma connexion entre mon serveur et n’importe quel terminal client.
Même j’en convient qu’en utilisation local, les risques sont bien moindres car le pirate aura donc des entrées « locales », je trouve le challenge passionnant que de vouloir appliquer les même règles de sécurité, peu importe le contexte.
C’est comme si les « locaux » pouvez accéder au coffre fort de leur banque sur simple faciesse alors que d’autres, eux doivent présenter tout un dossier bien plus complexe.
2 poids 2 mesures.
Installer un certificat sur Android, c’est très simple en effet mais Android après n’en tient tout bonnement pas compte xD Même pas d’avertissement que le trafic n’est pas sure : Blocage direct ! ERR_CONNECTION_REFUSED
j’ai rarement vu une comparaison aussi pourrie
une fois que tu es dans la banque dans la salle des coffres le coffrre s’ouvre avec une simple clé c’est la porte vers l’exterieure qui est securisée, et comparer ton serveur de domotique avec la salle des coffres dune banque il n’y a qu’un pas
j’espère que tu as aussi prévu de mettre ton HA dans un vlan en filtrant uniquement le port https que tu vas exposer, quid des autres ports potentiellement attaquables ?
sinon pas bien compliqué tu installes l’addon duckdns qui vas te générer( et renouveller) tes certificats que tu paramètre dans ton home assistant, puis tu créé une règle dns dans ton pihole qui vas renvoyer ton domaine xxxxxx.duckcdns.org vers ton ip locale de ton ha 192.168.1.x
te voila avec un certificat valide et une communication locale
je ne pense pas que ce soit comparables … là tu compares un accès à travers un firewall, et un accès sans … la seule différence, c’est que ton paquet sera chiffré entre ton client et ton serveur … sauf que vue que ça ne passe qu’en local, à moins que tu ai un hacker sur ton réseau …
sans compter, que j’imagine que tu ne gères pas tous les autres ports ? ( j’espère que ton ha n’utilise pas directement le tls, mais tu utilises un reverse proxy pour faire l’intermédiaire … sinon, tu auras un soucis car certains appareils ne le supporteront pas … et si un jour tu en utilise un, tu devras tout défaire ) .
Si tu veux vraiment te protéger, il faudrait aussi bloquer tous les autres, ports, et mettre tes serveurs derrière un autre firewall pour être réellement « protéger » … Donc, sauf à investir des centaines d’€, énormément de temps … tu auras toujours « 2 poids 2 mesures » …
En général, on considère le lan comme « sur » … et il faut le garder lui sûr un maximum .
ceci dis, le certificat peut être nécessaire pour certaines choses, notamment les notifications .
en fait, ce que tu fais là, c’est comme la blague du belge qui laisse la porte des toilettes ouvertes, pour pas qu’on regarde par le trou de la serrure … ( blague française, j’imagine que c’est l’inverse en belgique )
Tu tentes de sécuriser un tout petit truc, qui risque de t’apporter beaucoup plus de soucis que ça ne résouds de problèmes …
( car pareil, après un certificat, ça expire, donc il faut le renouveler … celui de ton authorité de certification va aussi expirée au bout d’un moment … sans compter que certains appareils ne permettent pas d’ajouter d’authorités … un shelly par exemple ) .
Et puis si j’ai bien compris, tu passes par npm ? donc, si tu vas sur http://homeassistant.local:8123 tu tombes sur l’interface sans https ?