GuideGuide

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

Prova Koapanel sul tuo server

Un comando su Ubuntu 24.04, gratuito fino a 3 siti. Sei un provider o un'agenzia? Parliamo di prezzi all'ingrosso e migrazioni.

Altre guide