← Terug naar blog

Let's Encrypt certificaten voor het lokale netwerk

Ik heb Home Assistant met externe HTTPS-toegang, maar lokaal gaf de browser steeds “Your connection is not private”. Dat komt omdat het lokale IP-adres of de lokale URL niet in het SSL-certificaat staat. Ook de Home Assistant Android-app werkt dan niet goed door de SSL-fout.

Ik vond geen eenvoudige oplossing online en heb daarom zelf een praktische aanpak gemaakt. Deze methode is ook bruikbaar voor andere lokale applicaties.

Wat je nodig hebt:

  • een eigen domein met toegang tot DNS
  • een Linux-server in je lokale netwerk met rootrechten, in mijn geval een Raspberry Pi

Certbot installeren

Log via SSH in op de Raspberry Pi en installeer certbot:

$ sudo apt install certbot

Controleer de installatie:

$ certbot --version

acme-dns-certbot-joohoi installeren

Omdat ik geen poort 80 beschikbaar heb voor ACME-verificatie, gebruik ik DNS-01 verificatie met acme-dns-certbot-joohoi.

$ wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py
$ chmod +x acme-dns-auth.py
$ vi acme-dns-auth.py
#!/usr/bin/env python3
$ sudo mv acme-dns-auth.py /etc/letsencrypt/

Certificaten aanvragen

We maken een wildcard certificaat voor een subdomein, bijvoorbeeld *.home.example.com.

$ sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d home.example.com

Het script geeft een CNAME-record voor DNS-validatie:

_acme-challenge.home.example.com CNAME a14de1b9-e910-4d91-18bf-07a3763b88e6.auth.acme-dns.io.

Voeg bij je DNS-provider records toe zoals:

HostnameTypeValue
_acme-challenge.home.example.comCNAMEa14de1b9-e910-4d91-18bf-07a3763b88e6.auth.acme-dns.io.
home.example.comA<YOUR_PUBLIC_HOME_IP_ADDRESS>
rpi.home.example.comA
extern.home.example.comCNAMEhome.example.com

Uitleg:

  • _acme-challenge.home.example.com: DNS-verificatie voor ACME.
  • home.example.com: publieke IP van je router.
  • rpi.home.example.com: lokaal IP-adres van de Raspberry Pi.
  • extern.home.example.com: externe URL voor bijvoorbeeld Home Assistant.

Wacht daarna tot DNS-propagatie klaar is en start certbot opnieuw. Als het nog niet lukt, controleer dan vooral het _acme-challenge record.

Testen

Forward indien nodig de poorten vanaf je router naar de Raspberry Pi. Voor Home Assistant is dat standaard 8123/tcp.

Lokaal netwerk

Gebruik bijvoorbeeld:

https://rpi.home.example.com:8123

Het certificaat is nu geldig voor het gebruikte domein.

Externe toegang

Gebruik bijvoorbeeld:

https://extern.home.example.com:8123

Ook hier is het certificaat geldig voor dezelfde domeinstructuur.