Rinnovo dei certificati letsencrypt su ubuntu server in configurazione nginx (reverse proxy ssl) + apache (web server) o nginx web server ssl + php-fpm sotto cloudflare

R

Hai bisogno di consulenza o assistenza?


Contattami Ora!

Matteo Lavaggi – Sistemista esperto in consulenza informatica e Marketing Digitale

Questa è una configurazione tipo che potete ritrovare in numerosi server web:

CLOUDFLARE PROXY  -> NGINX SSL PROXY -> APACHE o PHP FPM

Sebbene l’utilizzo di cloudflare permetta di NON usare un terminatore ssl lato server (il traffico tra il vostro server web e cloudflare potrebbe essere in chiaro), questo non è consigliato per svariati motivi (sicurezza, rimozione del proxy cloudflare, accesso diretto al web server, ecc).

La soluzione ottimale è quindi quella di utilizzare la cifratura SSL anche tra il web server e il proxy cloudflare, tramite un certificato SSL.

Il problema di questa configurazione è che rende “difficile” l’utilizzo del plugin certbot sul vostro server, in quanto la verifica del dominio utilizzata di default dallo stesso FALLISCE in uno scenario di questo tipo.

Una soluzione semplice è quella di utilizzare il plugin certbot in modalità webroot, in questo modo si istruisce il plugin ad utilizzare una directory precisa per la verifica del dominio, invece che risolvere il server_name e seguire il percorso che farebbe una normale “chiamata” allo stesso dominio (NGINX->APACHE per esempio).

Il funzionamento è molto semplice:

  1. Si crea una directory apposita nella struttura del web server (es /var/www/certbot)
  2. Si configurano i virtualhost nginx per ricevere le chiamate di verifica dal plugin certbot e risolverle in quella directory

 

Il “problema” è applicare questa configurazione su un server dove avete già numerosi virtualhost configurati, ed è qui che entra in gioco la soluzione seguente!

  1. Creiamo la cartella predefinitia per la verifica webroot:
    mkdir /var/www/certbot
  2. Creiamo un file di configurazione unico che istruisca nginx a gestire le chiamate dal plugin certbot per la verifica del dominio:
    vim /etc/nginx/certbot-webroot.conf
  3. Inseriamo questa direttiva all’interno del file appena creato:
    location /.well-known {

 alias /var/www/certbot/.well-known; 

                    }

  1. Ora ci spostiamo nella cartella di nginx e facciamo una copia dei file di configurazione dei nostri virtualhost:
    cd /etc/nginx

mkdir tmp

cp -a sites-available tmp/

cd /etc/nginx/sites-available

  1. A questo punto dobbiamo modificare TUTTI i file virtualhost includendo la direttiva per il plugin. Per farlo usiamo un comando unico che si occuperà di cercare tutte le direttive “server {“ e aggiungere subito sotto la configurazione corretta. In questo modo siamo sicuri che tutti i nostri server saranno in grado di processare la chiamata del plugin di verifica:
    find . -type f -exec sed -i ‘s|server {|server { ninclude /etc/nginx/certbot-webroot.conf;|g’ {} ; 
  2. Verifichiamo eventuali errori nelle configurazioni:
    nginx -t
  3. Se non vi sono errori rimuoviamo le copie di backup dei file conf
    rm -rf tmp
  4. Ricarichiamo la configurazione nginx
    service nginx reload
  5. Proviamo il rinnovo automatico dei certificati in modalità dry-run forzando l’uso del plugin webroot e della directory scelta
    certbot renew –dry-run –webroot -w /var/www/certbot
  6. Al termine della procedura certbot restituisce un elenco con i certificati che hanno superato la verifica ed eventuali errori.
  7. Procediamo al rinnovo “vero” dei certificati
    certbot renew –webroot -w /var/www/certbot
  8. Non rimane che impostare un cronjob per eseguire il renew dei certitficati ogni notte:
    crontab -e
  9. Inseriamo questa riga:
    00 01 * * * certbot renew –webroot -w /var/www/certbot

 

ENJOY!

Hai bisogno di consulenza o assistenza?


Contattami Ora!

Matteo Lavaggi – Sistemista esperto in consulenza informatica e Marketing Digitale

About the author

Avatar photo
Matteo Lavaggi