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

Guida ottenere certificato HTTPS "wildcard" gratis Let's Encrypt (*.miosito.com)

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:

» Leggi: Come ottenere un certificato HTTPS (SSL/TLS) gratis: la Grande Guida a Let's Encrypt su Linux CentOS/Ubuntu (rating SSL Labs: "A+")

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

Guida ottenere certificato HTTPS "wildcard" gratis Let's Encrypt (*.miosito.com)

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 a miosito.com il nostro dominio! L'importante è mantenere _acme-challenge.)
  • valore: incollare qui il codice mostratoci da certbot al passo precedente

Guida ottenere certificato HTTPS "wildcard" gratis Let's Encrypt (*.miosito.com) - Mobile_zShot_1532900817

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

Guida ottenere certificato HTTPS "wildcard" gratis Let's Encrypt (*.miosito.com)

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

Guida ottenere certificato HTTPS "wildcard" gratis Let's Encrypt (*.miosito.com) - Mobile_zShot_1532978413

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?

Guida ottenere certificato HTTPS "wildcard" gratis Let's Encrypt (*.miosito.com) - Mobile_zShot_1532972131

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

Guida ottenere certificato HTTPS "wildcard" gratis Let's Encrypt (*.miosito.com) - Mobile_zShot_1532978785

Passo 7: Configurare il webserver

I file che costituiscono il certificato sono ora disponibili in una sottocartella simile a /etc/letsencrypt/live/miosito.com/

Guida ottenere certificato HTTPS "wildcard" gratis Let's Encrypt (*.miosito.com) - letsencrypt files

Procediamo dunque a configurarli all'interno del webserver come dettagliato nell'articolo principale su Let's Encrypt:

» Leggi: Come ottenere un certificato HTTPS (SSL/TLS) gratis: la Grande Guida a Let's Encrypt su Linux CentOS/Ubuntu (rating SSL Labs: "A+")

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.