Certificato SSL per un indirizzo IP con Let's Encrypt (gratis, 2026)
Per anni aprire un pannello, un'interfaccia di amministrazione o un servizio interno con https://203.0.113.10 voleva dire vedere l'avviso «Non sicuro» del browser, perché nessuna autorità gratuita rilasciava certificati per gli indirizzi IP. Da gennaio 2026 Let's Encrypt rilascia certificati gratuiti anche per indirizzi IPv4 e IPv6: valgono circa 6 giorni (160 ore), vanno chiesti con il profilo shortlived e si verificano con una richiesta HTTP sulla porta 80 o TLS sulla 443. Qui vediamo come ottenerne uno su Ubuntu, come rinnovarlo senza pensarci e a cosa fare attenzione.
Cosa cambia rispetto a un certificato normale
| Certificato per un dominio | Certificato per un IP | |
|---|---|---|
| Durata | 90 giorni (profilo classico) | 160 ore, circa 6 giorni |
| Profilo ACME | predefinito | shortlived, obbligatorio |
| Verifica | HTTP, TLS o DNS | HTTP (porta 80) o TLS-ALPN (porta 443); il DNS no, un IP non ha una zona |
| Rinnovo | ogni 60 giorni circa | ogni 2-3 giorni |
La durata breve è il punto da capire: un certificato per IP senza rinnovo automatico smette di funzionare in meno di una settimana. Non è una cosa da fare a mano.
Quando serve
- il pannello di un server appena creato, prima che abbia un nome di dominio;
- phpMyAdmin, webmail o altre interfacce su porte diverse dalla 443, aperte con l'IP;
- servizi interni o API chiamate per indirizzo;
- apparati e server senza DNS, purché raggiungibili da Internet sulla porta 80 o 443.
Se il server è dietro NAT e ha solo indirizzi privati (192.168.x.x, 10.x.x.x), Let's Encrypt non può raggiungerlo: serve l'indirizzo pubblico e l'inoltro delle porte.
Con certbot
Il supporto agli indirizzi IP è arrivato con certbot 5.4. La versione dei pacchetti di Ubuntu 24.04 è più vecchia, quindi installa quella ufficiale come snap:
sudo apt remove certbot
sudo snap install --classic certbot
sudo ln -sf /snap/bin/certbot /usr/bin/certbot
certbot --version
Poi chiedi il certificato. Con un server web già attivo sulla porta 80 usa webroot:
sudo certbot certonly --webroot -w /var/www/html \
--preferred-profile shortlived \
--ip-address 203.0.113.10 \
--deploy-hook "systemctl reload nginx"
Se sulla porta 80 non gira niente, --standalone al posto di --webroot -w … avvia per un attimo un suo server. I plugin nginx e apache per ora non gestiscono gli indirizzi IP: il certificato va configurato a mano nel server web, dai file in /etc/letsencrypt/live/203.0.113.10/:
server {
listen 443 ssl;
server_name 203.0.113.10;
ssl_certificate /etc/letsencrypt/live/203.0.113.10/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/203.0.113.10/privkey.pem;
# ...
}
Il timer di certbot rinnova da solo i certificati quando si avvicinano alla scadenza; il --deploy-hook ricarica nginx dopo ogni rinnovo. Controlla con sudo certbot renew --dry-run.
Con acme.sh
acme.sh supporta gli IP e i profili da prima di certbot:
acme.sh --issue --server letsencrypt \
--cert-profile shortlived --days 3 \
-d 203.0.113.10 \
--webroot /var/www/html
--days 3 dice ad acme.sh di rinnovare dopo 3 giorni, a metà della vita del certificato, così resta margine per riprovare se un rinnovo non riesce.
Le trappole
- La porta 80 chiusa: molti provider cloud hanno un firewall di rete oltre a quello del server. Se la porta 80 non arriva al server la verifica HTTP fallisce; la verifica TLS-ALPN sulla 443 è l'alternativa, ma la 443 deve essere libera o gestita dal client ACME.
- IPv6 non raggiungibile: se chiedi un certificato per IPv4 e IPv6 insieme e l'IPv6 non risponde, fallisce tutta la richiesta. Meglio chiederlo solo per gli indirizzi che rispondono davvero.
- Il rinnovo che si rompe in silenzio: con 6 giorni di validità un rinnovo rotto diventa un sito irraggiungibile in pochi giorni. Tieni d'occhio la scadenza, come spieghiamo in certificati SSL e backup che falliscono in silenzio.
- I limiti di Let's Encrypt: tanti tentativi falliti in poco tempo portano a un blocco temporaneo. Dopo un errore, aspetta e correggi prima di riprovare.
Come lo fa Koapanel
Dalla versione 0.30 Koapanel chiede da solo a Let's Encrypt il certificato per l'indirizzo IP del server, già durante l'installazione:
- pannello, phpMyAdmin e webmail si aprono dall'IP senza «Non sicuro»;
- il rinnovo è automatico a metà della vita del certificato (circa 3 giorni), o prima se Let's Encrypt lo chiede, con uno scarto diverso per ogni server;
- la verifica usa la porta 80 o, se è chiusa, la 443; l'IPv6 viene incluso solo se risponde;
- in Server › Sicurezza il riquadro «Certificato del pannello» mostra tipo, scadenza, ultimo e prossimo rinnovo, gli errori e il pulsante Rinnova ora; se il server è dietro NAT lo spiega;
- se il rilascio non riesce resta il certificato autofirmato, quindi il pannello è sempre raggiungibile;
- in alternativa puoi dare al pannello un nome tuo, come
pannello.miodominio.it, con un certificato normale da 90 giorni, e portare chi apre l'IP su quel nome.
Tutti i dettagli sono nel manuale, sezione Certificato del pannello.
Domande frequenti
Il certificato per IP è davvero gratuito?
Sì, come tutti i certificati di Let's Encrypt.
Posso avere un certificato per un IP valido 90 giorni?
Da Let's Encrypt no: per gli indirizzi IP rilascia solo il profilo shortlived, di circa 6 giorni.
Serve un dominio?
No, basta che l'indirizzo IP sia pubblico e raggiungibile sulla porta 80 o 443.
Vale anche per indirizzi privati?
No. Let's Encrypt deve poter raggiungere l'indirizzo da Internet; per le reti interne serve una tua autorità di certificazione.
Prova Koapanel
Guarda il pannello nella demo pubblica oppure installalo su un Ubuntu 24.04 appena creato, gratis fino a 3 siti:
curl -fsSL https://get.koapanel.app | sudo bash