Come richiedere un certificato LetsEncrypt utilizzando Acme – CloudSavvy IT


Crittografiamo

LetsEncrypt ha cambiato il mondo dei certificati SSL quando la sua offerta di certificati SSL brevi e gratuiti ha consentito a un gran numero di persone e aziende di proteggere le proprie applicazioni web gratuitamente. Con questo servizio, dovrebbe esistere l’infrastruttura necessaria e, a tale scopo, è emerso un gran numero di applicazioni che soddisfano le esigenze dell’emissione SSL.

Una delle utility più comuni è quella di CertBotche può funzionare bene, ma è un’altra applicazione open source disponibile acme.sh. Questo è un client ACME completamente basato su shell (il protocollo utilizzato da LetsEncrypt per emettere certificati SSL). Con un gran numero di funzioni avanzate integrate, questo client consente configurazioni complesse.

Il modo più semplice per installare [acme.sh]() è il seguente, che scarica ed esegue lo script da qui, https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh.

curl  | sh

La fonte per quel sito si trova qui, se vuoi controllare cosa sta facendo lo script reale

L’installazione scaricherà e sposta i file in ~/.acme.she installa un alias sul tuo ~/.bashrc archivio. Inoltre, verrà installato un cron job, se disponibile.

Installa Acme.shc

Primi passi

Molto di come usi [acme.sh]() dipende dal metodo e dall’applicazione per cui si richiede il certificato. Acme.sh offre molti metodi diversi per richiedere un certificato, come:

In questo articolo, ho intenzione di dimostrare due diversi modi per richiedere un certificato. Includo le configurazioni del server Web per NGINX e Apache, che utilizza il metodo Webroot. Il metodo in modalità DNS utilizza un file di configurazione per creare record CNAME utilizzati per verificare il dominio, anziché creare un file sul file system.

Configurazione del server Web

Configurazione di LetsEncrypt di NGINX

NGINX semplifica la creazione di una configurazione condivisa da utilizzare durante l’utilizzo webroot metodo di richiesta di un certificato.

letsencrypt.conf

Si consiglia di creare una configurazione separata che può essere inclusa secondo necessità nelle configurazioni del vhost, in questo modo: include /etc/nginx/letsencrypt.conf

# Rule for legitimate ACME Challenge requests (like /.well-known/acme-challenge/xxxxxxxxx)
# We use ^~ here, so that we don't check other regexes (for speed-up). We actually MUST cancel
# other regex checks, because in our other config files have regex rule that denies access to files with dotted names.
location ^~ /.well-known/acme-challenge/ {
    # Set correct content type. According to this:
    # 
    # Current specification requires "text/plain" or no content header at all.
    # It seems that "text/plain" is a safe option.
   default_type "text/plain";
}

# Direct access returns a 404
location = /.well-known/acme-challenge/ {
   return 404;
}

Apache

Come NGINX, Apache può creare un file di configurazione separato. Di seguito è mostrato un esempio di questa configurazione.

/etc/apache2/conf-available/letsencrypt.conf

In questo caso, la configurazione di Apache è specifica per l’host virtuale a causa della necessità di includere la posizione del disco. Di seguito è riportato un percorso comune, ma può variare in base alla configurazione specifica.

Alias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"

    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS

Configurazione DNS

In questo articolo, sto dimostrando la modalità DNS utilizzando Cloudflare in quanto offre modifiche DNS estremamente veloci e funziona eccezionalmente bene con questo metodo.

Acme.sh utilizza due variabili ambientali per dns_cf metodo: CF_Key e CF_Email. Per includerlo nel proprio ambiente all’avvio, è possibile includere queste impostazioni all’interno di .bashrc archivio.

Potrebbe non essere ovvio, ma c’è uno spazio precedente prima di ogni comando di esportazione, che generalmente garantisce che non verranno letti dalla cronologia, per ogni evenienza.

 export CF_Key="#########..."
 export CF_Email="cfaccount@email.com"

Rilascia il certificato tramite il metodo Webroot

Emettendo il comando seguente, due domini vengono definiti in un singolo certificato. Questo per garantire che quando viene richiesto uno dei nomi host (e spesso reindirizzato al canonico), la richiesta sarà comunque protetta da una connessione sicura.

acme.sh --issue -d example.com -d www.example.com -w /var/www/html

I certificati emessi sono in /.acme.sh/acme.sh/{domain_name}

Rilascia il certificato tramite il metodo DNS

Quando si utilizza il metodo di trasmissione DNS, un temporaneo txt il record viene creato tramite l’API Cloudflare e LetsEncrypt verifica il dominio utilizzando quel record temporaneo. Questo è un metodo più pulito, dal momento che webroot È richiesta la configurazione.

# Multiple Domains
acme.sh --issue --dns dns_cf -d example.com -d www.example.com

I certificati emessi sono in /.acme.sh/acme.sh/{domain_name}

Certificato di rinnovo

Per impostazione predefinita, Acme.sh creerà un cronjob come la seguente voce:

48 0 * * * "/home/user/.acme.sh/acme.sh" --cron --home "/home/user/.acme.sh" > /dev/null

Per forzare un aggiornamento, è possibile emettere il seguente comando, che utilizzerà lo stesso metodo di emissione di quello originariamente utilizzato:

acme.sh --renew -d example.com -d www.example.com

Elimina certificati

Se non desideri più rinnovare un certificato, è molto facile da rimuovere. Tuttavia, ciò non rimuove il certificato dal disco. Per farlo, dovrai navigare verso ~/.acme.sh/ ed elimina la directory contenente i certificati.

acme.sh --remove -d example.com -d www.example.com

Ciò consente di ripulire i certificati configurati per il rinnovo, che è possibile verificare elencando i certificati come segue:

acme.sh --list

conclusione

LetsEncrypt offre un servizio eccellente e di facile utilizzo per il provisioning dei certificati SSL da utilizzare sui siti Web. La creazione di un sito Web sicuro è più semplice che mai e l’utilizzo del client acme.sh significa che hai il controllo completo su come ciò accade sul tuo server web.

Con diversi metodi per ottenere un certificato, anche metodi molto sicuri, come un dominio delegato, consentono di recuperare correttamente i certificati necessari.