ACLClouds
ACLClouds

Certificato HTTPS gratuito su VPS con certbot

Installare certbot, ottenere un certificato Let’s Encrypt per il dominio e verificare che il rinnovo automatico funzioni.

Let’s Encrypt rilascia certificati TLS senza costi, validi 90 giorni. Certbot automatizza la richiesta e il rinnovo. Due condizioni: il dominio deve già puntare al vostro VPS, e le porte 80 e 443 devono essere raggiungibili da Internet.

  • Let’s Encrypt rilascia certificati gratuiti validi 90 giorni, che certbot rinnova da solo.
  • Il dominio deve già puntare al VPS, e le porte 80 e 443 devono essere aperte.
  • Fate una prova di rinnovo con --dry-run subito dopo l’installazione.

Preparare il server

Certbot ha bisogno di un nome che risolva verso il VPS (vedi l’articolo sui record A) e di un server web in ascolto sulla porta 80. Su Debian o Ubuntu installate Nginx e certbot con il suo plugin.

  • sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
  • sudo ufw allow 'Nginx Full' se il firewall UFW è attivo (altrimenti saltate questa riga).
  • Verificate che il sito risponda in HTTP prima di continuare: curl -I http://example.com.

Richiedere il certificato

Un solo comando configura Nginx e scarica il certificato. Certbot propone poi di reindirizzare HTTP verso HTTPS: accettate, salvo un motivo contrario.

  • sudo certbot --nginx -d example.com -d www.example.com
  • I file si trovano in /etc/letsencrypt/live/example.com/: fullchain.pem e privkey.pem.
  • Testate la configurazione, poi ricaricatela: sudo nginx -t && sudo systemctl reload nginx.

Verificare il rinnovo

Un certificato scade dopo 90 giorni. I pacchetti Debian e Ubuntu installano un timer systemd che tenta il rinnovo due volte al giorno. Basta verificare che funzioni.

  • systemctl list-timers | grep certbot: il timer deve mostrare la prossima esecuzione.
  • sudo certbot renew --dry-run: simula un rinnovo senza modificare i certificati.
  • sudo certbot certificates: mostra la data di scadenza di ogni certificato.

Domande frequenti

Perché la richiesta fallisce con «Timeout during connect»?

Il server di Let’s Encrypt non raggiunge la porta 80: il DNS non punta ancora al VPS, oppure il firewall blocca la connessione. Verificate dig, poi sudo ufw status.

Serve un certificato per ogni sottodominio?

No. Un certificato può coprire più nomi. Aggiungete un -d per ogni nome extra, per esempio -d example.com -d www.example.com, poi rilanciate il comando.

Si può ottenere un certificato per un servizio che non usa HTTP?

Sì, con la validazione DNS, aggiungendo un record TXT temporaneo. Il metodo dipende dal fornitore DNS: va installato il plugin certbot corrispondente.