Come passare da let's Encrypt a Dehydrated per firma SSL su Home Assistant

Come passare da let's Encrypt a Dehydrated per firma SSL su Home Assistant

di Luigi Duchi

18 Giugno 2019

Home Assistant

Luigi Duchi

Una delle prime guide che ho scritto per questo Blog spiegava come creare un account DDNS con Duckdns ed aggiungere una firma SSL al nostro account in modo da poter accedere ad Home Assistant (residente su un Raspberry nella nostra rete locale) tramite connessione sicura (HTTPS) e non semplicemente tramite HTTP.

Tale operazione era assolutamente obbligatoria se si voleva, tramite la console di Google, creare un progetto per integrare i dispositivi presenti sul nostro Home Assistant (il personal Hub Open Source) all'interno di Google Assistant (l'assistente vocale lo Google).

Al seguente link potete trovare quella guida:

https://www.vincenzocaputo.com/picoblog/view/74/come_integrare_google_assistant_in_home_assistant

Per molto tempo ho utilizzato Let's Encrypt per rinnovare i miei certificati.

Purtroppo per noi utilizzatori di Home Assistant su Venv di Python le cose si complicano sempre rispetto agli utilizzatori di Hass.io

Infatti non possiamo contare sui plugin e di conseguenza sull'auto rinnovo del certificato SSL mediante il plugin di Duckdns.

Let's Encrypt infatti ha la noia di garantire il certificato per 90 giorni, al termine dei quali il certificato andrà rinnovato manualmente, pena l'impossibilità di accedere ad Home Assistant.

L'operazione non poteva essere automatizzata in quanto Let's Encrypt per essere rinnovato richiede la porta 80 del nostro router aperta.

Dato che non è cosa buona, ai fini della sicurezza, lasciarla aperta, il rinnovo deve essere eseguito in maniera manuale aprendo momentaneamente tale porta solo per effettuare la procedura.

Di recente mi sono imbattuto in un'altra metodologia per attivare la firma SSL sul nostro DDNS, il suo nome è DEHYDRATED.

I vantaggi sono notevoli, in primis non sfrutta la porta 80 ne per il rinnovo ne per la generazione, di conseguenza sarà possibile automatizzare il rinnovo mediante il crontab del nostro Raspbian.

Per chi non lo sapesse, il comando crontab consente la pianificazione di comandi, ovvero consente la registrazione di questi presso il sistema per essere poi mandati in esecuzione periodicamente in maniera automatica dal sistema stesso. 

Vediamo adesso quali sono i cambiamenti necessari per passare da Let's Encrypt a DEHYATRED.

(se dovete generare per la prima volta il certificato e non avete utilizzato la mia precedente guida o comunque Let's Encrypt saltate questo passaggio)

Seguendo la mia guida vi troverete due cartelle riguardanti Lets Encrypt:

la prima nel percorso /home/pi 

la seconda nel percorso /etc

CANCELLATELE ENTRAMBE!!!

Da qui inizia la procedura per tutti gli utenti, che si avessero o meno i certificati.

 Ovviamente do per scontato che avete tutti un account su Duckdns se cosi non fosse seguite QUESTA guida saltando ovviamente la parte relativa al certificato con Let's Encrypt.

Dovrete avere la porta 8123 aperta sul router (immagino che l'avrete già aperta se avete già installato Home Assistant) per comodità ho indirizzato la porta 443 esterna sulla 8123 interna in modo da non dover inserire :8123 in fondo all'indirizzo di Duckdns per accedere ad Home Assistant.

entrate sull'utente Home Assistant digitando sul terminale il comando:

sudo su -s /bin/bash homeassistant 

successivamente digitate:

cd /home/homeassistant

Come passare da let's Encrypt a Dehydrated per firma SSL su Home Assistant

Vi troverete di fronte a questa schermata.

digitate:

git clone https://github.com/lukas2511/dehydrated.git

attendete la fine della procedura di installazione poi digitate:

cd dehydrated

Vi troverete di fronte alla schermata sottostante

Come passare da let's Encrypt a Dehydrated per firma SSL su Home Assistant

Scrivete il comando:

nano domains.txt

Nel file che si aprirà scrivete il vostro dominio (ad esempio sventrapapere.duckdns.org) e poi uscite salvando premendo contemporaneamente ctrl + X e confermare con Y o S a seconda della lingua del vostro terminale

scrivete il comando:

nano config

Nel file che si aprirà scrivete:

CHALLENGETYPE="dns-01"

HOOK="${BASEDIR}/hook.sh"

dopo uscite salvando premendo contemporaneamente ctrl + X e confermare con Y o S a seconda della lingua del vostro terminale.

 

Digitate:

 

nano hook.sh

Nel file che si aprirà andate a incollare le seguenti stringhe:

#!/usr/bin/env bash
set -e
set -u
set -o pipefail

domain="vostrodominio"
token="vostro-token-duckdns"

case "$1" in
    "deploy_challenge")
        curl "https://www.duckdns.org/update?domains=$domain&token=$token&txt=$4"
        echo
        ;;
    "clean_challenge")
        curl "https://www.duckdns.org/update?domains=$domain&token=$token&txt=removed&clear=true"
        echo
        ;;
    "deploy_cert")
        sudo systemctl restart home-assistant@homeassistant.service
        ;;
    "unchanged_cert")
        ;;
    "startup_hook")
        ;;
    "exit_hook")
        ;;
    *)
        echo Unknown hook "${1}"
        exit 0
        ;;
esac

avendo la cura di sostituire vostro dominio e vostro-token-duckdns appunto con il vostro duckdns e con il token reperibile dalla pagina principale di Duckdns, poi salvate e uscite con la stessa modalità degli altri file ctrl+x

Per dare i permessi di scrittura allo script appena creato digitare il seguente comando:

chmod 755 hook.sh

Dopo tutti questi passaggi possiamo generare i certificati.

digitate:

./dehydrated --register --accept-terms

aspettate che abbia finito dovreste vedere le seguenti stringhe se tutto è andato bene 

+Generating account key...

+Registering account key with ACME server...

+Done!

 

digitate:

 

./dehydrated -c

se tutto ok dovreste vedere una cosa del genere:

 

Processing vostrodominio.duckdns.org

+Signing domains...

+Generating privatekey...

+Generating signing request...

+Requesting challenge forvostrodominio.duckdns.org...

OK

+Responding tochallenge forvostrodominio.duckdns.org...

OK

+Challenge isvalid!

+Requesting certificate...

+Checking certificate...

+Done!

+Creating fullchain.pem...

+Walking chain...

+Done!

 

complimenti avrete generato i vostri certificati, vediamo adesso come autorinnovarli.

digitate:

 

crontab -e

Andate in fondo al file che vi si aprirà e dopo l'ultima riga digitate:

0 1 1 * * /home/homeassistant/dehydrated/dehydrated -c | tee /home/homeassistant/dehydrated/update.log

Adesso spostiamoci nel file configuration.yaml del nostro Home Assistant.

se avevate generato i certificati con Let's Encrypt ricorderete che vi avevo fatto aggiungere i seguenti file:

Come passare da let's Encrypt a Dehydrated per firma SSL su Home Assistant

cancellate le due stringhe ssl_certificate e ssl_key e sostituitele con le nuove che elencherò poco sotto.

Ovviamente se non avevate eseguito la precedente guida non le troverete e dovrete aggiungere le seguenti stringhe sotto la voce http:

ssl_certificate: /home/homeassistant/dehydrated/certs/vostrodominio.duckdns.org/fullchain.pem
ssl_key: /home/homeassistant/dehydrated/certs/vostrodominio.duckdns.org/privkey.pem

esattamente come erano posizionate quelle della foto poco sopra.

Salvate il file configuration.yaml e riavviate Home Assistant.

Al riavvio avrete i certificati installati e ogni primo del mese crontab cercherà di aggiornarli.

potrete eventualmente creare un sensore per vedere i giorni rimanenti inserendo queste stringhe in sensor.yaml:

  - platform: command_line
    name: Scadenza SSL
    unit_of_measurement: days
    scan_interval: 10800
    command: "ssl-cert-check -b -c /home/homeassistant/dehydrated/certs/vostroaccount.duckdns.org/cert.pem | awk '{ print $NF }'"

Anche per questa guida è tutto, vi lascio al video di fine articolo. 

Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.

Luigi Duchi

Luigi Duchi

Nato a Grosseto il 24 Dicembre 1982 perito elettrotecnico che lavora nel mondo della domotica e installazione di impianti elettrici, impianti di allarmi, videosorveglianza e automazioni in genere. Appassionato da sempre di tecnologia e aperto alla conoscenza di nuove soluzioni.

Disqus loading...