Aggiungere un certificato Wildcard autoaggiornante al NAS Synology
In questa guida cerco di spiegare passo-passo (non proprio
per principianti, ma in maniera molto semplice) come poter come poter creare un
certificato wildcard personalizzato (quindi NON un “synology.me”) su NAS
Synology. Come sempre cercherò di scrivere un articolo come piace a me:
inserirò le informazioni necessarie senza dilungarmi troppo, senza continue
ripetizioni (in stile SEO) e andando al punto, ma inserendo le informazioni che
è necessario sapere (per capire cosa si sta facendo).
Come prima cosa, naturalmente, dovete avere un NAS Synology e un dominio registrato presso un register (ad esempio “pippopluto.io”). Va bene anche un dominio DuckDns.
1.
Configurazione tipo (HW/SW)
Nel mio caso mi trovo nella seguente situazione (cioè, se avete la mia stessa configurazione e seguite la guida, vi garantisco che funziona):
- Synology DS-1522+
- DSM 7.2.2 Update3
2.
Prerequisiti
Come detto dovete naturalmente avere:
- NAS Synology
- DSM 7.x
- Dominio registrato (es. “pippoluto.io”) e DNS gestito presso uno dei gestori supportati
3.
Breve introduzione/spiegazione
Per chi non lo sapesse, i certificati wildcard permettono di
gestire tutti i sottodomini, con la stessa radice, tramite un unico certificato
comune, invece di dover creare un singolo certificato univoco per ogni
sottodominio. Ad esempio si può creare un certificato per “*.pippopluto.io” e
usarlo per i sottodomini “paperino.pippopluto.io”, “www.pippopluto.io”, “quellochevuoi.pippopluto.io”,
ecc.
I vantaggi sono numerosi, ma i principali sono:
- Velocità di creazione di un sottodominio: non bisogna più passare per la procedura di generazione del certificato da parte della CA (Let’s encrypt o chi per esso), ogni volta che dobbiamo creare un nuovo sottodominio
- Un solo certificato da rinnovare ogni 3 mesi, invece che decine!
Se, come me, usate molto i container docker e avete un
sottodominio per ognuno di essi, probabilmente sfrutterete la comodità del
Reverse Proxy (NGINX) integrato in Synology. Ma vi sarete anche resi conto di
quanto sia scomodo il vincolo imposto da Synology che non accetta la creazione
di certificati wildcard diversi dal DDNS Synology (synology.me).
In questa guida vi spiegherò come fare per poter aggirare
questo vincolo.
NOTA:
per riuscire a fare quanto appena detto, mi sono basato su varie guide (alcune
anche abbastanza vecchie) trovate in rete, oltre a post su Reddit (anche sul
blog di Home Assistant) e alla documentazione ufficiale. Le difficoltà principali
che ho incontrato sono dovute al fatto che nessuna delle guide da me lette è
completa al 100%. Tutte quante “si dimenticano” dei pezzi, o sono incomplete, o
ancora sono troppo specifiche. Quello che trovate qui è un “estratto” di quello
che ho fatto io per riuscire ad ottenere il risultato deidrato (e soprattutto IN
ITALIANO).
Le guide principali a cui potete fare riferimento anche voi, se volete, sono:
- https://www.sysadmiral.xyz/posts/2021-03-04-adding-wildcard-certificate-to-synology/
- https://dr-b.io/post/Synology-DSM-7-with-Lets-Encrypt-and-DNS-Challenge
ATTENZIONE!!!!
Questa guida richiede l’accesso al
NAS tramite SSH. Se non avete accesso SSH, dovete prima abilitarlo ed essere
sicuri di riuscire ad accedere alla console.
Dovete anche essere in grado di accedere con un utente con permessi
amministrativi.
4.
Verifica dei requisiti
Come prima cosa, come dicevo poco sopra, dovete essere in
possesso di un dominio (non necessariamente a pagamento). Tale dominio deve
essere gestito da uno dei provider supportati in questo elenco: https://github.com/acmesh-official/acme.sh/wiki/dnsapi
Se il vostro gestore non è in elenco, è meglio se cercate un
altro metodo perché bisogna essere molto skillati per riuscire a farlo
funzionare tramite alias o tramite custom API.
5. Creazione
di un utente amministrativo
Questo step è opzionale. Se volete potete creare un
utente (con permessi di admin) apposito per la gestione dei certificati.
Come detto questo step non è obbligatorio, se volete potete
passare subito al successivo e usare direttamente il vostro utente admin.
Per prima cosa dobbiamo andare in “Control Panel”
Quindi su “User & Group”
Poi clicchiamo sul bottone “Create” e dal menu a tendina scegliamo
“Create user”
Nella finestra che si apre inseriamo il nome dell’utente che
vogliamo creare (ad esempio “certuser”) e inseriamo una password. Poi
clicchiamo sul bottone “Next”.
Ora spuntiamo la casella relativa al gruppo “administrators”
e poi clicchiamo sul bottone “Next”
Diamo gli accessi che vogliamo all’utente (di default può
accedere a tutto, essendo nel gruppo degli amministratori). L’importante è che
abbia accesso alla “homes”. Poi clicchiamo su “Next”
Di nuovo “Next”
E ancora “Next”
Sempre “Next”
E infine “Done”
A questo punto l’utente è stato creato
Consiglio: fate un accesso con l’utente appena creato e abilitate
la 2FA (two-factor authentication), perché vi darà meno problemi alla fine in
fase di creazione del certificato.
Possiamo passare al prossimo punto.
6.
Installare acme.sh
Il primo passo reale della procedura di generazione di un
certificato wildcard è l’installazione di acme.sh, uno script che permette di
gestire la creazione ed il rinnovo di certificati direttamente da shell. Qui
potete trovare tutti i dettagli: https://github.com/acmesh-official/acme.sh
Dobbiamo quindi collegarci tramite SSH al NAS Synology. Io
di solito uso PuTTY (https://www.putty.org/), che considero il più comodo tool
per effettuare queste operazioni.
Lanciamo il collegamento SSH al NAS
Inseriamo l’utente (amministratore) e poi la password
relativa
Vi troverete davanti ad una situazione del genere
Ora diamo il seguente comando (se volete fare il
copia-incolla, in PuTTY potete incollare tenendo premuto il tasto CTRL mentre
cliccate con il tasto destro del mouse):
sudo su -
Vi verrà chiesta la password. Inseritela
Ora diamo questo comando per scaricare acme.sh:
wget
https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
Ora inseriamo il comando per scompattare l’archivio appena
scaricato:
tar xvf
master.tar.gz
E poi il commando per navigare nella directory appena
estratta:
cd acme.sh-master/
Ora diamo il comando per installare effettivamente acme.sh. Naturalmente
dovete sostituire “paperino@pippopluto.io” con il vostro indirizzo email:
./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail paperino@pippopluto.io
Bene, lo script acme.sh è installato. Possiamo chiudere la connessione
SSH (ci servirà di nuovo più tardi, ma per poter utilizzare acme.sh è comunque
necessario disconnettersi e riconnettersi). E passare al prossimo punto.
7.
Abilitazione delle API presso il gestore del DNS
Da qui in avanti vi farò vedere come generare il token per
Cloudflare (il gestore che uso io), ma la procedura può essere fatta per qualunque
altro gestore supportato. Dovete solo cercare come farlo.
Come dicevo appena sopra, queste istruzioni sono specifiche
per Cloudflare, il concetto è che dobbiamo ottenere un token o una chiave per
la gestione dei DNS, da passare a acme.sh.
Cloudflare ha 2 opzioni: le API Key (più potenti) e gli API Token. Visto quello
hce deve fare lo script, preferisco generare un Token, che dà meno “poteri” ed
è più gestibile.
Apriamo la pagina Cloudflare per la creazione degli API
Token (https://dash.cloudflare.com/profile/api-tokens)
e clicchiamo sul tasto “Create Token”
Selezioniamo il template “Edit zone DNS”
Non so se serve, ma per sicurezza gli ho dato anche il
permesso di lettura (anche se credo dovrebbe già essere incluso nell’Edit).
Clicchiamo su “+ Add more”
E inseriamo i dati per la lettura
Ora, nella sezione “Zone Resources”, selezioniamo il dominio
che vogliamo gestire (ad esempio “pippopluto.io”
Il resto lo lasciamo così e clicchiamo su “Continue to
summary”
Viene mostrato il riepilogo. Clicchiamo su “Create Token”
Copiamoci il token appena creato, che ci servirà tra poco
8.
Registrazioni delle variabili d’ambiente
Apriamo nuovamente la shell SSH e diamo i seguenti comandi
per riportarci nella posizione precedente
sudo su -
cd acme.sh-master/
Ora registriamo le variabili d’ambiente relative a
Cloudflare. Se usate un altro gestore, verificate a questa pagina quali sono le
variabili da utilizzare: https://github.com/acmesh-official/acme.sh/wiki/dnsapi
Nel caso di Cloudflare usate questi comandi sostituendo a “MY_CLOUDFLARE_TOKEN”
il token che avete copiato precedentemente e a “paperino@pippopluto.io” la
vostra mail di registrazione a Cloudflare
export CF_Token=MY_CLOUDFLARE_TOKEN
export CF_Email=paperino@pippopluto.io
I comandi sopra
riportati sono “silenti”, cioè se sono giusti non vedete nulla dopo aver fatto “invio”.
Però vengono registrati correttamente.
Ora diamo i
seguenti comandi per registrare le altre informazioni relative all’account
Synology. Questi comandi sono uguali per tutti, NON sono specifici di
Cloudflare.
Al posto di “certuser” dovete inserire il nome vostro utente amministratore di
Synology.
Al posto di “MY_PASSWORD” la password di tale utente.
Al posto di “Certificato Wildcard” la descrizione che volete dare al
certificato.
export SYNO_Username=certuser
export SYNO_Password=MY_PASSWORD
export SYNO_Certificate=”Certificato Wildcard”
export SYNO_CERTIFICATE="Let's Encrypt"
export SYNO_Create=1
Bene, ora è tutto pronto per passare alla generazione del
certificato
9.
Generare il certificato
Ora diamo il seguente comando per generare e scarica il
certificato. Sostituite “pippopluto.io” e “*.pippopluto.io” con il vostro
dominio e “dns_cf” con il vostro gestore dei DNS (se diverso da Cloudflare):
acme.sh –server letsencrypt –issue -d pippopluto.io -d “*.pippopluto.io” –dns dns_cf –home
Ci siamo quasi! Non rimane che dare il comando per dire al
DSM di iniziare a usare il certificato appena creato. Per farlo diamo il
seguente comando, sempre sostituendo “pippopluto.io” con il vostro dominio:
acme.sh --deploy -d pippopluto.io -d “*.pippopluto.io” –deploy-hook synology_dsm –home
Se avete abilitato la 2FA per l’utente, vi chiederà il
codice OTP. Inseritelo e la procedura si concluderà con successo.
Ora possiamo verificare che il certificato sia installato e
attivo.
Torniamo sull’interfaccia web del NAS e andiamo su “Control
Panel”
Clicchiamo su “Security”
Andiamo sulla linguetta “Certificate”
Il nuovo certificato sarà il default (il primo in alto).
Apriamo i dettagli con la freccia apposita
E vediamo che avremo il nostro certificato wildcard
10.
Impostare il rinnovo
Per effettuare il rinnovo del certificato è necessario
lanciare un comando di acme.sh, ma non è necessario fare ogni volta la
procedura di accesso SSH. Infatti possiamo farlo schedulando un task che esegua
il comando con una ricorrenza fissa.
Per farlo apriamo di nuovo il “Control Panel”
Selezioniamo “Task Scheduler”
Scegliamo
dal menu “Create Task” -> “Scheduled Task” -> “User-defined script”
Nella finestra che si apre impostiamo un nome per il task e
selezioniamo l’utente amministratore con cui abbiamo registrato il certificato
Nel tab “Schedule” impostiamo la ricorrenza con cui eseguire
il comando di rinnovo (ad esempio io ho messo ogni primo lunedì del mese alle 6
di mattina)
In “Task Settings” spuntiamo la casella per essere avvisati
via mail ad ogni esecuzione dello script e come script mettiamo il seguente comando
(nturalmente sostituendo “pippopluto.io” con il vostro dominio):
/usr/local/share/acme.sh/acme.sh --renew -d pippopluto.io -d "*.pippopluto.io" --home /usr/local/share/acme.sh --server letsencrypt
Poi clicchiamo su “OK” per salvare il task
Fine. Ora possiamo aggiungere tutti i sottodomini che
vogliamo nel reverse proxy, usando questo certificato
Commenti
Posta un commento