self-signed-certificate voor https

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.