Nel corso della guida a Let's Encrypt abbiamo visto in dettaglio come ottenere un certificato HTTPS gratuito, valido per un dominio come miosito.com
oppure www.miosito.com
. Se però facciamo uso di numerosi domini di terzo livello (esempio: test.miosito.com
, shop.miosito.com
, abbonamenti.miosito.com
eccetera) e non vogliamo esplicitarli tutti singolarmente, possiamo richiedere un unico certificato che li copra tutti (*.miosito.com
), detto "certificato wildcard". Vediamo allora come procedere per generare un certificato wildcard gratis con Let's Encrypt
Passo 1: Installare certbot
Per prima cosa, installiamo il client "certbot". Per la guida passo passo, vi rimando all'articolo principale su Let's Encrypt:
Se già l'avete installato, lanciate certbot --version
e assicuratevi che la versione sia uguale o superiore alla 0.26.1
. Così non fosse, aggiornate il pacchetto prima di proseguire: il supporto ai certificati wildcard è infatti relativamente recente e funziona meglio con le ultimissime versioni.
Passo 2: Richiedere il certificato wildcard
Ora non dobbiamo fare altro se non impartire un comando simile a questo:
sudo certbot --email mioindirizzo@gmail.com --agree-tos --manual-public-ip-logging-ok certonly --manual --preferred-challenges dns -d 'miosito.com,*.miosito.com'
Dove:
-
--email mioindirizzo@gmail.com
: è l'indirizzo email al quale il servizio remoto invierà varie comunicazioni di servizio, fra le quali l'importantissimo "reminder" relativo all'imminente scadenza del certificato e la conseguente necessità di rinnovarlo -
--agree-tos
: si accettano i termini del servizio -
--manual-public-ip-logging-ok
: si accetta il logging dell'indirizzo IP del server -
certonly
: si desidera semplicemente creare un certificato HTTPS. L'installazione avverrà manualmente -
--manual
: identifica il metodo manuale di verifica dell'identità - è richiesto per i certificati wildcard -
--preferred-challenges dns
: specifica che la verifica avverrà tramite un record DNS - è richiesto per i certificati wildcard -
-d 'miosito.com,*.miosito.com'
: indica i domini per i quali si sta richiedendo il certificato
Il software ci risponde con un codice: copiatelo e passate allo step successivo senza premere nulla
Passo 3: Inserire un record nel DNS
Dobbiamo ora aprire il pannello di gestione DNS del dominio per il quale stiamo richiedendo il certificato HTTPS.
Inseriamo dunque un nuovo record di tipo TXT
valorizzandolo in questo modo:
-
host
: inseriamo_acme-challenge.miosito.com
(ovviamente sostituendo amiosito.com
il nostro dominio! L'importante è mantenere_acme-challenge.
) -
valore
: incollare qui il codice mostratoci da certbot al passo precedente
Salviamo e procediamo.
Passo 4: Verifica del DNS
Tornati al terminale di certbot, premete un tasto qualsiasi per proseguire.
Ci viene così richiesto di creare un secondo record TXT nel DNS, ma con un codice di verifica diverso. Ripetete dunque il Passo precedente, questa volta inserendo il nuovo codice
Passo 5: Pausa o passeggiata
È ora necessario attendere qualche minuto affinché le modifiche al DNS vengano propagate. In caso contrario, Let's Encrypt non riuscirà a leggerle e dovremo ripetere l'operazione capo (non è divertente, credetemi!).
Per aiutarci a capire quando è il momento giusto di proseguire, inseriamo _acme-challenge.miosito.com
(ovviamente sostituendo a miosito.com
il nostro dominio! L'importante è mantenere _acme-challenge.
) su DNS Text Lookup: non appena compaiono in pagina i record TXT che abbiamo appena inserito, possiamo proseguire
Da notare che il popolarissimo provider Aruba imposta automaticamente un TTL di 24 ore sui record DNS. Di conseguenza, utilizzando questo provider è necessario attendere almeno 1 giorno prima di poter proseguire. Per maggiori informazioni e la configurazione per risolvere:
» Leggi: DNS Aruba: come abbassare/ridurre il TTL?
Passo 6: Verifica del DNS
Non appena riceviamo la conferma che i record TXT si sono propagati, torniamo a certbot e premiamo Invio
.
Appare così la dicitura Waiting for verification...
. Dovrebbe rimanere a schermo per pochi istanti, per poi risponderci Congratulations! Your certificate and chain have been saved at:
: è il segnale che l'operazione è terminata con successo e il certificato wildcard è pronto all'uso
Passo 7: Configurare il webserver
I file che costituiscono il certificato sono ora disponibili in una sottocartella simile a /etc/letsencrypt/live/miosito.com/
Procediamo dunque a configurarli all'interno del webserver come dettagliato nell'articolo principale su Let's Encrypt:
Passo 8: rinnovare un certificato wildcard di Let's Encrypt
I certificati HTTPS di Let's Encrypt hanno una durata relativamente breve: 90 giorni. Questo significa che, entro 3 mesi al più dalla data di generazione, sarà imperativo procedere al rinnovo.
Purtroppo, il rinnovo dei certificati wildcard non è automatico. Possiamo verificarlo immediatamente impartendo il comando di rinnovo forzato:
certbot renew --force-renewal
Questo ci tornerà un errore simile al seguente:
The manual plugin is not working; there may be problems with your existing configuration.The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping.
Il rinnovo genera infatti nuovi codici che devono essere sostituiti sul DNS, esattamente come visto durante il setup iniziale.
La soluzione, al momento, prevede di passare al comando di rinnovo uno script che si autentichi automaticamente sul nostro DNS e svolga la sostituzione dei codici in autonomia. L'operazione non è banale, richiede il supporto esplicito del fornitore del DNS e può differire da fornitore a fornitore. Non ho dunque approfondito il tema e mi sono limitato ad impostare un "reminder" sull'agenda pochi giorni prima della scadenza per svolgere l'incombenza manualmente.