Certificati Let's Encrypt in NGINX

Posted on Mar 13, 2021

Qualche settimana fa ho configurato HTTPS per questo blog.

Ho generato un cerficato con Let’s Encrypt e ho configurato NGINX per utilizzarlo. Si è dimostrato un compito semplice e tutto è filato liscio al primo colpo.

Le istruzioni che seguono sono state eseguite su un Ubuntu server 20.04

Installare il client di Let’s Encrypt

apt-get update
apt-get install certbot
apt-get install python3-certbot-nginx

Configurare NGINX

IMPORTANTE: Assicurarsi che sia presente la configurazione server_name nella configurazione di NGINX per il dominio (ed eventuali varianti) che vogliamo mettere in sicurezza

Esempio del blocco server nella configurazione di NGINX

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name mio-dominio.org www.mio-dominio.org;
}

Nel caso di modifiche ricordarsi di ricaricare la configurazione

nginx -t && nginx -s reload

Generazione del cerficato

certbot --nginx -d mio-dominio.org -d www.mio-dominio.org

Rispondere alle domande proposte dall’applicazione. certbot andrà a modificare la configurazione di NGINX legata al dominio andando ad aggiungere alcune istruzioni.

Ecco un esempio del risultato

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name  mio-dominio.org www.mio-dominio.org;

    listen 443 ssl; # managed by Certbot

    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/mio-dominio.org/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mio-dominio.org/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

Rinnovo automatico del cerficato

I certificati generati da Let’s Encrypt hanno una durata di 90 giorni.

Per aggiornarli in modo automatico impostare uno script in cron

  1. Eseguire il comando
crontab -e
  1. Aggiungere la seguente riga
0 12 * * * /usr/bin/certbot renew --quiet.

Ogni giorno a mezzogiorno verrà verificata la validità del certificato e a 30 giorni dalla scadenza ne verrà generato uno nuovo.