Om verschillende redenen is het verstandig om SSL certificaten te gebruiken voor het benaderen van websites. De belangrijkste reden is dat het data-verkeer dan versleuteld wordt en daardoor kan de data niet ‘afgeluisterd’ worden.
Binnen Home Assistant is het https-protocol tevens vereist om met een microfoon de Assist voice-assistent aan te kunnen sturen.
Bij het gebruik van Home Assistant OS als operating system kun je wel een ssh verbinding maken met HA, maar ‘openssl’ staat daar niet op en dat hebben we wel nodig om een certificaat aan te maken.
Op een computer met Debian of Ubuntu als OS heb je dat wel en die kun je dan gebruiken voor het aanmaken van een certificaat. Ik gebruik nu een MacBook die dat ook al heeft. Er zijn een aantal stappen nodig:
- CA certificate key
- CA certificate
- Certificate key
- Certificate
Certificates en keys maken
Gebruik het volgende commando in een terminal:
openssl genrsa -out rootCA.key 4096
met het gegenereerde key-bestand kan nu een CA certificaat gemaakt worden:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 825 -out rootCA.pem
Nu de CA key en certificate aangemaakt zijn is het noodzakelijk om twee bestanden aan te maken waarin het domain en IP adres van Home Assistant wordt aangegeven. We beginnen met het bestand rootCA.csr.cnf met de volgende inhoud:
# rootCA.csr.cnf [req] default_bits = 4096 prompt = no default_md = sha256 distinguished_name = dn [dn] C=NL ST=Utrecht L=Maarssen O=Digital Info OU=IT CN = homeassistant.local
waarbij je uiteraard je eigen gegevens invult voor de [dn]. De Common Name (CN) is homeassistant.local hetgeen de default domain name is voor Home Assistant.
Het tweede bestand is v3.ext met de volgende inhoud:
# v3.ext authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names extendedKeyUsage=serverAuth [alt_names] DNS.1 = homeassistant.local IP.1 = 192.168.1.123
waarbij de DNS.1 en IP.1 de waardes dienen te hebben van jouw Home Assistant server.
Vervolgens wordt er een commando gegeven in de terminal om een key certificate request aan te maken waarbij het bestand rootCA.csr.cnf wordt gebruikt:
openssl req -new -sha256 -nodes -out hassio.csr -newkey rsa:2048 -keyout hassio.key -config <( cat rootCA.csr.cnf )
en met de key en het request-bestand kan dan een certificaat aangemaakt worden:
openssl x509 -req -in hassio.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out hassio.crt -days 3650 -sha256 -extfile v3.ext
Omdat we .pem bestanden nodig hebben in Home Assistant maken we van de nieuwe key en certificate .pem-bestanden:
mv hassio.crt fullchain.pem mv hassio.key privkey.pem
RootCA op computer plaatsen
MacOS:
- open rootCA.pem en plaats deze in de Keychain Access.
- Markeer het certificaat als vertrouwd door het te openen en bij ‘Trust’ aangeven ‘Always Trust’
Windows:
- Kopieer rootCA.pem naar rootCA.crt
- Open rootCA.crt in windows en kies onderaan voor ‘Installeren certificaat’
- Kies voor lokale computer
- Kies voor het standaard pad waar het geïnstalleerd wordt
- Kies voor Voltooien
Certificate en key op Home Assistant plaatsen
Deze bestanden dienen op de Home Assistant server in de directory /ssl geplaatst te worden. Dit kan met het commando scp. Via een ssh-sessie naar Home Assistant kan ook de directory /ssl aangemaakt worden indien deze nog niet bestaat. Vanaf mijn MacBook gaat dit met de volgende commando’s:
De directory maken:
ssh root@homeassistant.local [core-ssh ~]$ mkdir /ssl exit
De bestanden kopieren:
scp fullchain.pem root@homeassistant.local:/ssl/fullchain.pem scp privkey.pem root@homeassistant.local:/ssl/privkey.pem
Rechten aanpassen:
ssh root@homeassistant.local [core-ssh ~]$ chmod 600 /ssl/*.pem exit
Home Assistant gebruik latenn maken van ssl certificates
In Home Assistant dient nu het bestand configuration.yaml aangepast te worden en aangevuld met de volgende code:
http: base_url: https://192.168.1.123:8123 ssl_certificate: /ssl/fullchain.pem ssl_key: /ssl/privkey.pem
waarbij het IP adres uiteraard overeen moet komen met de Home Assistant server.
Hierna Home Assistant server geheel herstarten. Hierna is Home Assistant bereikbaar op https.