Let's Encrypt

Installazione del client acme.sh

Il client acme.sh non e` il client ufficiale di Let's Encrypt, e` un client di terza parte che non richiede altro che bash e wget per girare. Puo` essere eseguito anche se non si e` root, pero` dovete ricordarvi che lo script deve poter scrivere dentro la vostra webroot (o accedere alle config del vostro dns) per funzionare.

Aggiormamento del client acme.sh

Il client, una volta installato, puo` essere aggiornato col comando acme.sh --upgrade. Puo` anche essere messo in auto-aggiornamento con il comando acme.sh --upgrade --auto-upgrade. Io pero` l'auto-aggiornamento lo eviterei.

Uso del client acme.sh

Per creare i certificati e` necessario un metodo di "autenticazione" del dominio, il piu` comodo per l'automatismo e` un web server che risponda all'hostname (www.dominio.tld, webmail.dominio.ltd, ecc) per il quale vogliamo generare il certificato. In pratica il sistema di Let's Encrypt deve poter scaricare un file dal vostro web server, file che viene generato da acme.sh. Questo significa anche che acme.sh deve poter scrivere nella webroot del vostro web server. (se lo eseguite da root, no problem)

Lo script salvera` i certificati generati, con anche le relative configurazioni, come ad esempio i comandi che lo script in cron deve eseguire per riavviare i demoni che usano i certificati in seguito al rinnovo degli stessi, nella home dell'utente sotto a .acme.sh/. Per comodita` insegno allo script acme.sh a copiare i certificati sotto a /etc/letsencrypt dove saranno a disposizione di tutti i demoni che devono usarli, avendo cura anche di concatenare i vari cert delle varie CA necessari per costruire la corretta catena di trust.

Metodi alternativi di issue del certificato

Se per qualche motivo il metodo "classico" di scrivere un file nella webroot non dovesse essere disponibile, ci sono altri metodi per generare i certificati. Il motivo puo` essere per esempio che sul server non c'e` un web server, o che il web server e` configurato in modo da rendere difficile se non impossibile generare il certificato, per esempio perche` vogliamo un certificato con diversi hostname dentro, ma i diversi hostname puntano tutti a webroot diverse, oppure perche` il web server ha una configurazione con dei redirect o altre stranezze che impediscono al server di Let's Encrypt di leggere il suo file dal nostro web server, eccetera.

Nota bene: l'operazione di "issue" viene ripetuta automaticamente dal cron ogni 60 giorni. E` importante tenere conto che deve poter funzionare anche in seguito, non solo quando diamo il comando a mano per la prima volta

Il client acme.sh supporta diversi metodi, e vi consiglio di leggere la documentazione per vedere come funzionano. Ne cito tuttavia alcuni:

Config e test per Apache2

La configurazione minimale di Apache 2.2 e` questa:

SSLCertificateFile /etc/letsencrypt/mater.kurgan.org.cert
SSLCertificateChainFile /etc/letsencrypt/mater.kurgan.org.cert
SSLCertificateKeyFile /etc/letsencrypt/mater.kurgan.org.key

La configurazione minimale di Apache 2.4.8 o successivo non richiede piu` "SSLCertificateChainFile".

Attenzione: se si usa un redirect da http a https al momento del rinnovo questo fallirà a causa del redirect stesso.

Occorre usare un trucco per evitare il redirect per il file che viene usato per la verifica da let's encrypt. Questo trucco e` presto spiegato: usare un RedirectMatch "negato", ovvero dire ad Apache di ridirigere tutto TRANNE CHE la richiesta al file di "verifica" generato da letsencrypt. Ovviamente non usate "pippo.com", mettete una documentroot che esista, eccetera.

<VirtualHost *:80>
        ServerName www.pippo.com
        ServerAdmin email@pippo.com
        RedirectMatch 301 ^(?!/\.well-known/acme-challenge/).* https://www.pippo.com$0
        DocumentRoot /var/www/dovevuoitu 
</VirtualHost>

<IfModule mod_ssl.c>
   <VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/hostname.cert
        SSLCertificateKeyFile /etc/letsencrypt/hostname.key
        ServerName hostname
        ServerAdmin webmaster@hostname
        DocumentRoot /var/www/dovevuoi
        ErrorLog ${APACHE_LOG_DIR}/hostname-error.log
        CustomLog ${APACHE_LOG_DIR}/hostname-access.log combined
    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>
   </VirtualHost>
</IfModule>

Per testare se tutto funziona, potete usare questo servizio: https://www.ssllabs.com

Config per Dovecot

La configurazione minimale per Dovecot e`:

ssl_cert = </etc/letsencrypt/mater.kurgan.org.cert
ssl_key =  </etc/letsencrypt/mater.kurgan.org.key

Config per Exim 4

La configurazione minimale per Exim 4 e`:

tls_certificate = /etc/letsencrypt/mater.kurgan.org.cert
tls_privatekey =  /etc/letsencrypt/mater.kurgan.org.key
tls_advertise_hosts = *

LetsEncrypt (last edited 2020-08-19 10:14:44 by Kurgan)