L’autore ha selezionato il Fondo di assistenza per COVID-19 per ricevere una donazione come parte del programma Scrivi a scopo di donazione.
Introduzione
La maggior parte dei certificati di Let’s Encrypt è emessa utilizzando la validazione HTTP, che consente un’installazione facile dei certificati su un singolo server. tuttavia, la validazione HTTP non è sempre adatta per l’emissione di certificati da utilizzare su siti web bilanciati, e nemmeno può essere utilizzata per emettere certificati wildcard.
La validazione DNS consente la verifica delle richieste di emissione di certificati tramite i record DNS invece di servire il contenuto tramite HTTP. Questo significa che i certificati possono essere emessi simultaneamente per un cluster di server web che girano dietro un bilanciatore di carichi, o per un sistema che non è direttamente accessibile tramite internet. I certificati wildcard sono supportati anche utilizzando la validazione DNS.
Lo strumento acme-dns-certbot viene utilizzato per collegare Certbot a un server DNS di terze parti in cui i record di validazione del certificato possono essere impostati in modo automatico tramite un’API quando si richiede un certificato. L’avantage di questo è che non è necessario integrare Certbot direttamente con il tuo account del fornitore di DNS, né è necessario concedergli accesso illimitato alla configurazione DNS completa, cosa che è beneficia alla sicurezza.
Le zone DNS delegate sono utilizzate per reindirizzare le ricerche per i record di validazione del certificato al servizio DNS di terze parti, quindi una volta completato l’installazione iniziale, puoi richiedere quanti certificati vuoi senza dover eseguire alcuna validazione manuale.
Un’altra vantaggio importante di acme-dns-certbot è che può essere utilizzato per emettere certificati per server individuali che potrebbero essere in esecuzione dietro un load balancer o non sono direttamente accessibili tramite HTTP. La validazione tradizionale del certificato HTTP non può essere utilizzata in questi casi, a meno che non imposti i file di validazione su ciascuno dei server. L’strumento acme-dns-certbot è anche utile se vuoi emettere un certificato per un server che non è accessibile via internet, come un sistema interno o un ambiente di staging.
In questo tutorial, userai l’hook acme-dns-certbot di Certbot per emettere un certificato Let’s Encrypt utilizzando la validazione DNS.
Prerequisiti
Per completare questo tutorial, avrai bisogno di:
-
Un server Ubuntu 18.04 configurato seguendo la Configurazione iniziale del server con Ubuntu 18.04, incluso un utente non amministratore con privilegi di sudo.
-
Un nome di dominio per il quale è possibile ottenere un certificato TLS, inclusa la possibilità di aggiungere record DNS. In questo esempio specifico, userai
your-domain
esubdomain.your-domain
, nonché*.your-domain
per un certificato wildcard. Tuttavia, questo può essere adattato per altri domini, sottodomini o wildcard se necessario.
Una volta che questi sono pronti, effettua l’accesso al tuo server come utente non amministratore per iniziare.
Passo 1 — Installazione di Certbot
In questo passaggio, installerai Certbot, un programma utilizzato per emettere e gestire i certificati Let’s Encrypt.
Certbot è disponibile nei repository ufficiali Ubuntu Apt, tuttavia, è raccomandato utilizzare il repository mantenuto dai creatori di Certbot, in quanto contiene sempre la versione più aggiornata del software.
Inizia aggiungendo il repository di Certbot:
Dovrai premere INVIO
per accettare l’invito e aggiungere il nuovo repository al tuo sistema.
Successivamente, installa il pacchetto Certbot:
Una volta completata l’installazione, puoi controllare che Certbot sia stato installato correttamente:
Questo mostrerà qualcosa di simile al seguente:
In questo passaggio hai installato Certbot. Successivamente, scaricherai e installerai l’hook acme-dns-certbot.
Passo 2 — Installazione di acme-dns-certbot
Ora che il programma base di Certbot è stato installato, puoi scaricare e installare acme-dns-certbot, che permetterà a Certbot di operare in modalità di validazione DNS.
Inizia scaricando una copia del script:
Nota: Come migliore pratica, assicurarsi di revisionare questo repository Github e lo script prima di eseguirlo. Puoi anche prima clonare questo repository e poi utilizzare l’script acme-dns-certbot.py
. Questo clonaggio fornisce un ulteriore strato di sicurezza, garantendo che lo script rimanga sotto il nostro controllo e sia meno soggetto a modifiche non verificate.
Una volta completato il download, contrassegna lo script come esecutabile:
Poi, modifica il file utilizzando il tuo editor di testo preferito e regola la prima riga per forzare l’uso di Python 3:
Aggiungi un 3
alla fine della prima riga:
#!/usr/bin/env python3
. . .
Questo è richiesto per assicurarsi che lo script utilizzi la versione supportata più recente di Python 3, invece della vecchia versione di Python 2.
Una volta completato, salva e chiudi il file.
Infine, sposta lo script nella directory di Certbot Let’s Encrypt così che Certbot possa caricarlo:
In questo passaggio, hai scaricato e installato l’hook acme-dns-certbot. Successivamente, puoi iniziare il processo di configurazione e lavorare verso l’emissione del tuo primo certificato.
Step 3 — Impostazione di acme-dns-certbot
Per iniziare a utilizzare acme-dns-certbot, dovrai completare un processo di installazione iniziale e emettere almeno un certificato.
Inizia facendo partire Certbot per costringerlo a emettere un certificato usando la validazione DNS. Questo eseguirà lo script acme-dns-certbot e attiverà il processo di installazione iniziale:
Usa l’argomento --manual
per disabilitare tutte le funzionalità di integrazione automatica di Certbot. In questo caso stai emettendo un certificato grezzo, invece di installarlo automaticamente su un servizio.
Configura Certbot per usare l’hook acme-dns-certbot tramite l’argomento --manual-auth-hook
. Esegui l’argomento --preferred-challenges
così che Certbot dia priorità alla validazione DNS.
Devi anche dire a Certbot di rallentare prima di tentare la validazione del certificato, che fai con l’argomento --debug-challenges
. Ciò consente di impostare i record DNS CNAME
richiesti da acme-dns-certbot, che viene illustrato più avanti in questo passaggio. Senza l’argomento --debug-challenges
, Certbot non rallenterà, quindi non avrai tempo per fare il cambiamento DNS richiesto.
ricordare di sostituire ognuno dei nomi di dominio che desideri utilizzare usando gli argomenti -d
. Se vuoi emettere un certificato a wildcard, assicurarsi di sostituire l’asterisco (*
) con un backslash (\
).
Dopo aver seguito le standardi procedure di Certbot, verrai infine invitato con un messaggio simile al seguente:
Dovrai aggiungere il record DNS CNAME
richiesto alla configurazione DNS del tuo dominio. Questo delegherà il controllo del sottodominio _acme-challenge
al servizio DNS ACME, che permetterà ad acme-dns-certbot di impostare i record DNS richiesti per validate la richiesta di certificato.
Se utilizzi DigitalOcean come provider DNS, puoi impostare il record DNS nel tuo pannello di controllo:
è raccomandato impostare il TTL (time-to-live) a circa 300 secondi per aiutare a garantire che eventuali cambiamenti al record siano propagati rapidamente.
Una volta configurato il record DNS, torna a Certbot e premi INVIO
per validare la richiesta di certificato e completare il processo di emissione.
Questo richiede alcuni secondi, e poi vedrai un messaggio che conferma l’emissione del certificato:
Hai avviato acme-dns-certbot la prima volta, impostato i record DNS richiesti e emesso un certificato con successo. Successivamente configurerai le rinnovazioni automatiche del tuo certificato.
Passo 4 — Utilizzare acme-dns-certbot
In questo ultimo passaggio, userai acme-dns-certbot per emettere altri certificati e rinnovare quelli esistenti.
Prima di tutto, avendo già emesso almeno un certificato con acme-dns-certbot, puoi continuare a emettere certificati per gli stessi nomi di dominio DNS senza dover aggiungere un altro record CNAME DNS. tuttavia, se desideri ottenere un certificato per una sotto-domanda diversa o per un nuovo dominio completamente diverso, verrai richiesto di aggiungere un altro record CNAME.
Ad esempio, potresti emettere un certificato a wildcard autonomo standalone senza dover ripetere la verifica:
Tuttavia, se provi a emettere un certificato per una sotto-domanda, verrai richiesto di aggiungere un record CNAME per la sotto-domanda:
Questo mostrerà un output simile a quello dell’installazione iniziale che hai condotto nel Passo 3:
Ora che sei in grado di utilizzare acme-dns-certbot per emettere certificati, è anche utile considerare il processo di rinnovo.
Una volta che i tuoi certificati si avvicinano alla scadenza, Certbot può rinnovarli automaticamente per te:
Il processo di rinnovo può avvenire da start-to-finish senza interazione utente, e ricorderà tutte le opzioni di configurazione che hai specificato durante l’installazione iniziale.
Per testare che questo funzioni senza dover attendere fino alla data di scadenza, puoi attivare una simulazione. Questa simulerà il processo di rinnovo senza apportare alcuna modifica alla tua configurazione reale.
Puoi attivare una simulazione usando il comando standard renew
, ma aggiungendo l’argomento --dry-run
:
Questo genererà output simile a quanto segue, che ti fornirà la certezza che il processo di rinnovo funziona correttamente:
In questo ultimo passaggio, hai emesso un altro certificato e hai testato il processo di rinnovo automatico in Certbot.
Conclusione
In questo articolo, hai impostato Certbot con acme-dns-certbot per emettere certificati usando la validazione DNS. Questo consente l’uso di certificati wildcard nonché la gestione di un ampio insieme di server web diversi che potrebbero essere situati dietro un load balancer.
Fai attenzione al repository acme-dns-certbot per eventuali aggiornamenti dello script, in quanto è sempre consigliato eseguire la versione supportata più recente.
Se sei interessato a conoscere ulteriori informazioni su acme-dns-certbot, potresti voler rivedere la documentazione del progetto acme-dns, che è l’elemento server di acme-dns-certbot:
Il software acme-dns può anche essere ospitato in loco, che può essere utile se operi in ambienti con alto livello di sicurezza o complessità.
In alternativa, puoi approfondire le dettagli tecnici della validazione di ACME DNS revisionando la sezione pertinente del documento ufficiale RFC che descrive come funziona il processo: