Přeskočit na hlavní obsah

HTTPS a SSL certifikát pro Home Assistant přes Let's Encrypt (DNS-01 challenge)

Home Assistant běží ve výchozím stavu na nešifrovaném HTTP a při přístupu přes prohlížeč vás dřív nebo později uvítá otravné varování o nezabezpečeném spojení. V tomto článku si ukážeme, jak na něj nasadit platný HTTPS/SSL certifikát zdarma pomocí Let's Encrypt, a hlavně se pořádně podíváme na DNS-01 challenge - způsob ověření, díky kterému získáte certifikát i tehdy, když nemáte veřejnou IP adresu nebo nechcete otevírat žádné porty ven do internetu.

Zaměřím se na to, co lidem na jiných návodech nejčastěji nefunguje: uvedu ověřenou a funkční konfiguraci oficiálního Let's Encrypt addonu, protože právě tady chybné návody napáchají nejvíc škody.

Proč vůbec HTTPS pro Home Assistant?

Bez šifrovaného spojení putují vaše přihlašovací údaje i veškerá komunikace mezi prohlížečem a Home Assistantem po síti v čitelné podobě. HTTPS řeší dvě věci:

  • 🔒 Šifrování provozu - nikdo na síti (ani ve vaší domácí, ani po cestě internetem) nevidí, co posíláte.
  • Žádné varování prohlížeče - prohlížeč u platného certifikátu nehlásí "Vaše připojení není soukromé" a mobilní aplikace i doplňky se chovají spolehlivě.

Let's Encrypt je nezisková certifikační autorita, která vydává důvěryhodné SSL certifikáty zdarma a plně automatizovaně. Certifikát má sice krátkou platnost (90 dní), ale o automatickou obnovu se postará addon za vás, takže se o nic nestaráte.

info

Pokud vám jde jen o vzdálený přístup a nechcete se s certifikáty vůbec párat, existují jednodušší cesty - třeba Home Assistant Cloud (Nabu Casa). Podrobné srovnání metod najdete v článku Vzdálený přístup k Home Assistantu. Tento článek jde o úroveň hlouběji a věnuje se přímo certifikátům.

HTTP-01 vs. DNS-01 challenge

Než Let's Encrypt certifikát vydá, musí ověřit, že doménu opravdu vlastníte. Existují dva hlavní způsoby (challenge):

HTTP-01 challenge

  • Let's Encrypt se pokusí spojit s vaší doménou na portu 80.
  • Vyžaduje tedy veřejně dostupný port 80 ze světa.
  • Nefunguje za CGNAT ani bez port forwardingu.
  • Neumí vydat wildcard certifikát.

DNS-01 challenge

  • Ověření probíhá přes TXT DNS záznam, který addon automaticky vytvoří u vašeho DNS providera.
  • Nepotřebuje žádný otevřený port ani veřejnou IP.
  • Funguje i za CGNAT a pro čistě lokální nasazení.
  • Jako jediná umí wildcard certifikát (*.tvedomenka.cz).

Pro drtivou většinu domácích instalací je proto DNS-01 challenge výrazně praktičtější - a proto se na ni v tomto článku zaměříme nejvíc.

Kdy dává DNS-01 challenge smysl

DNS-01 je pro vás ta správná volba, pokud platí aspoň jedno z následujícího:

  • ✅ Jste za CGNAT nebo nemáte veřejnou IP adresu (typicky mobilní/4G/5G internet nebo někteří poskytovatelé).
  • Nejde vám port forwarding nebo ho z principu dělat nechcete.
  • Nechcete otevírat port 80/443 ven do internetu z bezpečnostních důvodů.
  • ✅ Chcete jen lokální přístup s platným certifikátem - tedy Home Assistant dostupný pod vlastní doménou v domácí síti, ale bez varování o self-signed certifikátu.
  • ✅ Chcete wildcard certifikát (*.tvedomenka.cz) pokrývající více služeb najednou - ten jde získat výhradně přes DNS-01.
Lokální přístup s platným certifikátem

Oblíbený scénář: doma běží Home Assistant, chcete k němu přistupovat přes https://ha.tvedomenka.cz bez varování prohlížeče, ale nechcete ho vystavovat do internetu. Stačí certifikát získaný přes DNS-01 a v místním DNS (nebo přes Cloudflare) nechat doménu mířit na lokální IP. Certifikát je platný, prohlížeč spokojený, a přitom nikde neotvíráte žádný port.

Přehled způsobů, jak dostat HTTPS na Home Assistant

Než se vrhneme na konkrétní návod, pojďme si udělat pořádek v možnostech. Cest, jak k HTTPS přijít, je několik a každá se hodí pro trochu jiného člověka.

MetodaUživatelská přívětivostCenaVlastní doménaOtevírání portůSložitost
Home Assistant Cloud (Nabu Casa)Velmi vysoká$6.50 / měsícVelmi nízká
DuckDNS + Let's Encrypt addonStředníZdarma❌ (subdoména DuckDNS)✅ (pro vzdálený přístup)Střední
Let's Encrypt addon (DNS-01)StředníZdarmaStřední
Reverzní proxy (NPM / Traefik / Caddy)StředníZdarmaPodle scénářeVyšší
Cloudflare TunnelVysokáZdarmaStřední

Home Assistant Cloud (Nabu Casa)

Nejjednodušší cesta ke všemu naráz. Za předplatné $6.50 měsíčně dostanete vzdálený přístup, platný certifikát i doménu (https://xxxxx.ui.nabu.casa) plně automaticky - o nic se nestaráte a navíc podpoříte vývoj Home Assistantu.

Zvolte, pokud: chcete mít vše hotové bez technického ladění a nevadí vám platit.

DuckDNS + Let's Encrypt addon

Klasika mezi bezplatnými řešeními. Addon DuckDNS vám dá zdarma subdoménu, udržuje u ní aktuální vaši IP a rovnou vydá i certifikát Let's Encrypt - a to přes DNS-01 challenge (ověření běží přes DuckDNS token, kvůli certifikátu tedy žádný port otevírat nemusíte). Háček je jinde: DuckDNS je typicky cesta ke vzdálenému přístupu a k tomu už otevřený port a port forwarding (typicky 443/8123) potřebujete. Za CGNAT proto vzdálený přístup touto cestou nefunguje - certifikát se sice vydá, ale zvenčí se na Home Assistant nedostanete.

Zvolte, pokud: máte veřejnou IP, nevadí vám port forwarding a stačí vám subdoména DuckDNS.

Let's Encrypt addon s DNS-01 challenge

Hlavní téma tohoto článku. Certifikát získáte přímo na Home Assistant, pod vlastní doménou a bez otevírání jakéhokoli portu - ověření běží přes DNS. Ideální za CGNAT i pro čistě lokální přístup a jako jediná varianta z addonu umí i wildcard.

Zvolte, pokud: chcete vlastní doménu, platný certifikát přímo na HA a nechcete (nebo nemůžete) otevírat porty.

Reverzní proxy (NGINX Proxy Manager / Traefik / Caddy)

Reverzní proxy je samostatná služba, která stojí před Home Assistantem (a klidně i před dalšími službami) a řeší TLS/certifikáty za ně. Klient se připojuje šifrovaně na proxy, ta provoz předává na HA po interní síti.

Sám na svém homelabu používám NGINX Proxy Manager (NPM) a musím říct, že pro víc než jednu službu je to skvělé řešení.

Výhody:

  • Centralizuje certifikáty pro všechny služby, ne jen pro HA (Node-RED, Grafana, Frigate...).
  • ✅ NPM umí Let's Encrypt DNS challenge sám - má vestavěné DNS pluginy včetně Cloudflare, takže wildcard i DNS-01 zvládne bez HA addonu.
  • Odděluje TLS od Home Assistantu - certifikát řešíte na jednom místě.
  • ✅ Snadné přidání dalších služeb a nastavení access listů (omezení přístupu).

Nevýhody:

  • ⚠️ Další komponenta k údržbě - proxy musíte provozovat a aktualizovat.
  • ⚠️ V Home Assistantu je nutné správně nastavit trusted_proxies a use_x_forwarded_for: true, aby HA věděl, že za ním stojí proxy (jinak uvidí špatné klientské IP a přihlášení nemusí fungovat).

Kdy zvolit proxy vs. přímý addon? Pokud řešíte jen Home Assistant a chcete co nejjednodušší nastavení, sáhněte po Let's Encrypt addonu s DNS-01 přímo na HA. Jakmile ale máte víc služeb, víc domén nebo chcete certifikáty a přístup spravovat centrálně, dává mnohem větší smysl reverzní proxy.

Cloudflare Tunnel

Cloudflare Tunnel vytvoří zabezpečený tunel mezi HA a Cloudflare a certifikát řeší Cloudflare za vás - žádné porty, žádné certifikáty na vaší straně. Podrobně ho rozebírám v článku Vzdálený přístup k Home Assistantu.

Praktický návod: Let's Encrypt addon s DNS-01 challenge (Cloudflare)

Teď to hlavní. Ukážeme si nasazení oficiálního Let's Encrypt addonu s DNS-01 challenge, kde jako DNS providera použijeme Cloudflare (nejrozšířenější volba). Postup je pro ostatní providery téměř totožný, liší se jen jméno providera a přihlašovací údaje.

Předpoklady

Budete potřebovat vlastní doménu a její DNS spravované u podporovaného providera. U Cloudflare stačí bezplatný účet a doména přidaná do Cloudflare (DNS servery přesměrované na Cloudflare).

Krok 1: Vytvoření Cloudflare API tokenu

Addon potřebuje oprávnění vytvořit u vašeho DNS ověřovací TXT záznam. U Cloudflare je doporučený způsob jeden scoped API token s minimálními právy:

  1. Přihlaste se do Cloudflare dashboardu a otevřete My Profile → API Tokens.
  2. Klikněte na Create Token a použijte šablonu Edit zone DNS, nebo vytvořte vlastní token.
  3. Nastavte oprávnění přesně na Zone → DNS → Edit.
  4. V Zone Resources omezte token na konkrétní zónu (vaši doménu) - ne na všechny.
  5. Token vytvořte a zkopírujte si ho (zobrazí se jen jednou).
Minimum oprávnění

Token potřebuje pouze oprávnění Zone → DNS → Edit pro danou zónu. Nedávejte mu Full Access ani globální práva - addon víc nepotřebuje a zbytečně byste zvyšovali riziko.

Legacy: globální API klíč

Starší návody používají dvojici cloudflare_email + cloudflare_api_key (globální klíč k celému účtu). Tento způsob je v dokumentaci addonu označen jako "NOT RECOMMENDED" a zmiňuji ho jen pro úplnost - držte se scoped tokenu výše.

Krok 2: Instalace Let's Encrypt addonu

  1. V Home Assistantu přejděte do Nastavení → Doplňky → Obchod s doplňky.
  2. Vyhledejte Let's Encrypt (oficiální addon) a klikněte na Instalovat.
  3. Po instalaci addon zatím nespouštějte - nejprve ho nakonfigurujeme.

Krok 3: Konfigurace addonu (DNS-01)

Otevřete záložku Konfigurace addonu a nastavte ji přesně takto (přepněte editor do YAML režimu):

domains:
- ha.tvedomenka.cz
certfile: fullchain.pem
keyfile: privkey.pem
challenge: dns
dns:
provider: dns-cloudflare
cloudflare_api_token: <scoped-token>
# propagation_seconds: 60 # u pomalejších providerů zvýšit (např. Netcup >= 630)

Na co si dát pozor:

  • challenge: dns přepíná addon do režimu DNS-01 (bez portů).
  • ✅ Název providera musí mít prefix dns- - tedy dns-cloudflare. Bez prefixu addon providera nenajde (viz řešení potíží níže).
  • cloudflare_api_token je scoped token z kroku 1.
  • propagation_seconds je zakomentovaný - u Cloudflare stačí výchozí hodnota. U pomalejších providerů (např. Netcup) ho odkomentujte a zvyšte (u Netcupu klidně na 630 a víc), aby se DNS záznam stihl rozšířit, než Let's Encrypt spustí ověření.
Jiný DNS provider?

Addon podporuje desítky providerů přes knihovnu lego - například dns-route53, dns-hetzner, dns-duckdns, dns-google nebo dns-godaddy. Změníte jen provider: a příslušné přihlašovací údaje (jméno klíčů se u každého providera liší, najdete je v dokumentaci addonu). Prefix dns- platí pro všechny.

Krok 4: Spuštění a kontrola logu

  1. Uložte konfiguraci a addon spusťte.
  2. Otevřete záložku Log. Addon vytvoří u Cloudflare dočasný TXT záznam, počká na jeho rozšíření a poté získá certifikát.
  3. V logu byste měli vidět, že certifikát byl úspěšně vydán a uložen do /ssl/.

Krok 5: Zapojení certifikátu do Home Assistantu

Teď řekneme Home Assistantu, aby vydaný certifikát používal. Otevřete configuration.yaml a přidejte (nebo doplňte) sekci http:

configuration.yaml
http:
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem
Časté omyly z jiných návodů

Na internetu koluje spousta chybných konfigurací. Držte se přesně toho, co je výše:

  • ❌ Klíč ssl_redirect neexistuje - nepoužívejte ho.
  • trusted_proxies a use_x_forwarded_for sem nepatří - ty se týkají výhradně scénáře s reverzní proxy, ne přímého certifikátu na HA.
  • hass: true ani nginx: true nejsou volby Let's Encrypt addonu - nikde je neuvádějte.

Krok 6: Restart Home Assistantu

Uložte configuration.yaml a Home Assistant restartujte (Nastavení → Systém → Restartovat). Po startu už bude HA dostupný přes https://ha.tvedomenka.cz s platným certifikátem.

Varianta přes NGINX Proxy Manager

Pokud jdete cestou reverzní proxy, mění se rozdělení rolí. Certifikát v tomto scénáři neřeší HA addon, ale NGINX Proxy Manager - ten si přes vestavěný Let's Encrypt (klidně také přes DNS challenge s Cloudflare pluginem) certifikát vyžádá a obnovuje sám.

Princip je následující:

  • Home Assistant běží bez SSL na portu 8123 - u nových instalací Home Assistant OS na portu 80 (sekci http: s ssl_certificate/ssl_key tedy vynecháte).
  • NPM stojí před HA, přijímá HTTPS provoz na portu 443, terminuje TLS a předává požadavky na http://<ip-home-assistantu>:8123 - u nových instalací Home Assistant OS na port 80.
  • V Home Assistantu je potřeba nastavit, že za ním stojí proxy, jinak by HA viděl všechny požadavky, jako by přicházely z IP proxy:
configuration.yaml
http:
use_x_forwarded_for: true
trusted_proxies:
- <ip-adresa-nginx-proxy-manageru>
tip

Detailní klik-po-kliku nastavení NGINX Proxy Manageru je téma na samostatný článek (chystám ho). Tady jde hlavně o princip: certifikát řeší proxy, HA běží bez SSL a jen mu řeknete, komu má věřit přes trusted_proxies. Do trusted_proxies doplňte IP adresu, ze které k HA proxy přistupuje.

Automatická obnova a ověření

Certifikáty Let's Encrypt platí 90 dní, ale obnova je automatická - addon certifikát obnoví zhruba 30 dní před expirací. Nemusíte nic dělat, jen mít addon funkční.

Jak ověřit, že je vše v pořádku:

  • 🔍 V prohlížeči klikněte na ikonku zámku v adresním řádku a zobrazte detail certifikátu - uvidíte vydavatele (Let's Encrypt) i datum platnosti.
  • 📋 Zkontrolujte Log addonu - po obnově tam najdete záznam o vydání nového certifikátu.
  • ⏱️ Pokud vás zajímá přesná expirace z příkazové řádky, můžete použít openssl proti vaší doméně a portu 443.

Řešení potíží

Chyba "Selected DNS Provider: null" Nejčastější příčina je špatný název providera - typicky chybějící prefix dns-. Musí být dns-cloudflare, ne cloudflare. Rozhodně to neznamená chybějící plugin - addon má providery zabudované přes lego.

Certifikát se nevydá nebo neobnoví Zkontrolujte oprávnění API tokenu. U Cloudflare musí mít token oprávnění Zone → DNS → Edit pro danou zónu. Bez práva zapisovat DNS záznamy addon nedokáže vytvořit ověřovací TXT záznam.

Ověření vyprší / timeout u pomalejšího providera Někteří DNS provideři rozšiřují TXT záznamy pomaleji. Odkomentujte a zvyšte propagation_seconds (např. u Netcupu na 630 i více), ať Let's Encrypt počká, než se záznam rozšíří.

Prohlížeč pořád hlásí nedůvěryhodný certifikát Ověřte, že jste po vydání certifikátu restartovali Home Assistant a že v configuration.yaml míří ssl_certificate/ssl_key na správné soubory v /ssl/.

Související články

Zhodnocení

Získat platný HTTPS certifikát pro Home Assistant je dnes zdarma a hlavně udržitelné bez ruční práce - jednou nastavíte a Let's Encrypt se stará o zbytek. DNS-01 challenge je podle mě pro domácí použití nejuniverzálnější volba: funguje i za CGNAT, nepotřebuje otevřený port a jako jediná umí wildcard.

Pokud řešíte jen Home Assistant, sáhněte po Let's Encrypt addonu s DNS-01 přímo na HA - je to nejpřímější cesta. Jakmile ale máte víc služeb, dává větší smysl reverzní proxy typu NGINX Proxy Manager, kterou sám používám a která vám certifikáty i přístup sjednotí na jedno místo. A když se s certifikáty párat vůbec nechcete, tady je Home Assistant Cloud pořád nejpohodlnější volbou. 💚

Pomohl vám tenhle návod?

Návody tu píšu ve volném čase a udržuju je aktuální. Když vám některý ušetřil čas, můžete přispět.

Jednorázově, kartou nebo Apple Pay. Částku lze na další stránce změnit.

Nechcete posílat peníze? Kupujte podle návodů přes moje odkazy na produkty. Cena je pro vás stejná a pomůže to taky.

Komentáře