Certificati HTTPS gratuiti con Let's Encrypt
Let's Encrypt è un'autorità di certificazione che emette certificati HTTPS gratuiti per il tuo dominio. Sul tuo VPS puoi ottenere un certificato con pochi comandi usando Certbot, oppure senza alcun comando usando Caddy, e entrambi lo rinnovano da soli. Ci sono due requisiti: il dominio deve puntare all'indirizzo IP del tuo server e le porte 80 e 443 devono essere aperte dall'esterno.
Perché ti serve HTTPS?
HTTPS cifra il traffico tra il browser e il server. Terzi sulla rete non possono leggere la password in un modulo di login né i dettagli di un ordine. I browser possono mostrare un avviso di "non sicuro" sui siti senza HTTPS. Un certificato Let's Encrypt è gratuito, quindi non c'è più un buon motivo per rinunciare a HTTPS.
Prima di cominciare
- Il record A del dominio deve mostrare l'indirizzo IP del tuo server. Per verificare, esegui
dig +short example.com. L'output deve essere l'indirizzo IP del tuo server. - Le porte 80 e 443 devono essere aperte, perché la convalida avviene sulla porta 80 (HTTP-01). Se usi ufw, esegui
sudo ufw allow 80/tcpesudo ufw allow 443/tcp. Se il tuo server ha un firewall separato nel pannello, controlla anche lì le regole. - Se il dominio ha un record AAAA (IPv6), deve puntare anche questo a questo server. Se non è così, elimina il record.
- Il tuo web server deve essere in esecuzione e conoscere questo dominio.
Installare e verificare con Certbot su Nginx o Apache
Le istruzioni ufficiali di Certbot consigliano il pacchetto snap. Assicurati che snapd sia installato sul server (su Ubuntu di solito lo è) e rimuovi qualsiasi vecchio Certbot installato tramite apt.
- Installa Certbot:
sudo snap install --classic certbot - Rendi il comando disponibile ovunque:
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot - Ottieni il certificato e fallo installare nel web server. Esegui
sudo certbot --nginxper Nginx osudo certbot --apacheper Apache. - Rispondi alle domande: il tuo indirizzo email, per quali domini vuoi il certificato e se reindirizzare HTTP a HTTPS.
- Prova il rinnovo:
sudo certbot renew --dry-run
Se vuoi solo ottenere il certificato e configurare il resto da te, esegui sudo certbot certonly --nginx. Il pacchetto Certbot aggiunge da solo un'attività pianificata (cron o un timer systemd), che vedi nell'output di systemctl list-timers. sudo certbot certificates elenca i tuoi certificati e le date di scadenza. Certbot rinnova un certificato quando la sua durata sta finendo e tu non fai nulla. Un giorno il rinnovo può comunque fallire (per esempio per una regola del firewall), quindi esegui ogni tanto --dry-run.
Per controllare il certificato, guarda prima l'icona del lucchetto nella barra degli indirizzi del browser. Per vedere la data di scadenza con un comando, esegui:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
La riga notAfter nell'output è la data di scadenza del certificato. Se non usi il reindirizzamento che aggiunge Certbot, reindirizza da te HTTP a HTTPS. Su Nginx, aggiungi la riga return 301 https://$host$request_uri; al blocco server che ascolta sulla porta 80.
Con Caddy e senza comandi
Se usi Caddy non devi installare nient'altro. Per un dominio presente nella sua configurazione, Caddy ottiene il certificato da Let's Encrypt o ZeroSSL, lo rinnova e reindirizza HTTP a HTTPS. Secondo la sua documentazione ufficiale, i record A e AAAA del dominio devono puntare al server, le porte 80 e 443 devono essere raggiungibili dall'esterno e la cartella dei dati di Caddy deve essere persistente e scrivibile. Se esegui Caddy in Docker, monta quella cartella su un volume. Altrimenti i certificati spariscono quando il container viene eliminato e richiederli di nuovo può farti raggiungere un limite di frequenza.
Certificati wildcard
Un certificato wildcard (*.example.com) copre tutti i sottodomini con un solo certificato e si può ottenere solo con la convalida DNS-01. Questa convalida non usa la porta 80. Ti chiede di inserire un record TXT nel DNS del tuo dominio. Per questo il tuo provider DNS deve avere un'API e tu conservi la chiave API sul server. La documentazione di Let's Encrypt definisce rischioso conservare queste chiavi su un web server. Se non ti serve un wildcard, ottenere i certificati per i singoli domini con HTTP-01 è più semplice e non richiede di conservare una chiave DNS.
Errori comuni
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| La convalida fallisce, dominio non trovato | Il record A punta all'IP sbagliato o non si è ancora propagato | Controlla l'IP con dig +short example.com e aspetta |
| Timeout | La porta 80 è chiusa | Apri la 80 in ufw e nel firewall del pannello, se ce l'hai |
| La convalida a volte passa e a volte fallisce | Il record AAAA punta a un altro server | Correggi o elimina il record AAAA |
| Errore di limite di frequenza | Troppi tentativi | Usa --dry-run per i test e controlla la pagina ufficiale per i limiti |
| Il rinnovo non parte | Nessuna attività pianificata, oppure il web server blocca la porta 80 | sudo certbot renew --dry-run mostra l'errore |
Il messaggio di errore di solito dice quale convalida è fallita e quale indirizzo del tuo server Let's Encrypt ha provato a raggiungere. Leggi il messaggio così com'è. La risposta spesso è proprio lì.
Secondo la pagina ufficiale di Let's Encrypt, c'è un limite di 5 certificati a settimana per lo stesso insieme di nomi di dominio e di 5 convalide fallite all'ora per lo stesso nome di dominio. Quindi usa --dry-run mentre fai esperimenti. Prova il rinnovo nell'ambiente di staging e non consuma il tuo limite reale.
Sulle app già pronte di Seturack
Le app già pronte (WordPress, Nextcloud e altre) si aprono su HTTPS a un indirizzo sslip.io ricavato dal tuo indirizzo IP, quindi non serve alcun nome di dominio. Quando colleghi il tuo dominio, Caddy ottiene di nuovo il certificato e tu non installi nulla in più. I passaggi per comunicare il dominio a Caddy e all'app sono in questo articolo della guida.
Commenti0
Ancora nessun commento
Condividi per primo la tua opinione.
Accedi o registrati per lasciare un commento.