Cos'è un certificato SSL self-signed
Un certificato self-signed è un certificato X.509 firmato dalla stessa entità che lo emette, senza coinvolgere una Certification Authority esterna. In pratica, generi una chiave privata e crei un certificato che attesta sé stesso. È tecnicamente valido per cifrare le comunicazioni TLS, ma non offre alcuna garanzia di identità verificabile da terze parti.
Perché il browser lo rifiuta
Quando un browser apre una connessione HTTPS, controlla che il certificato sia firmato da una CA presente nel proprio truststore. Un self-signed non è firmato da nessuna CA conosciuta, quindi il browser mostra il classico avviso NET::ERR_CERT_AUTHORITY_INVALID o SEC_ERROR_UNKNOWN_ISSUER. L'utente può procedere manualmente, ma è un'esperienza inaccettabile in produzione.
Casi d'uso legittimi
Nonostante l'apparente inutilità, i self-signed restano fondamentali in diversi scenari:
- Sviluppo locale: testare HTTPS su localhost senza spendere o passare per Let's Encrypt
- Ambienti di staging interni non esposti a Internet
- Comunicazione server-to-server tra microservizi dove il client è programmato a fidarsi di un cert specifico
- Appliance e dispositivi IoT che generano i propri certificati alla prima accensione
- VPN, SSH e tunnel privati
- Test di automazioni e CI/CD
Come generarne uno con OpenSSL
Il comando minimo è:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
Questo crea una chiave RSA 4096 e un certificato valido un'anno. Aggiungi -subj "/CN=localhost" per evitare il prompt interattivo, e l'opzione -addext "subjectAltName=DNS:localhost,IP:127.0.0.1" per includere i SAN richiesti dai browser moderni che ignorano il CN.
Far fidare il browser
Per testare HTTPS in locale senza warning continui, importa il self-signed nel truststore del sistema o del browser:
- macOS: Keychain Access, importa il .pem in System, imposta Always Trust
- Windows:
certmgr.msc, importa in Trusted Root Certification Authorities - Linux: copia in
/usr/local/share/ca-certificates/e lanciaupdate-ca-certificates - Firefox: gestione certificati interna separata, importa via about:preferences#privacy
Self-signed CA personale (mkcert)
Una soluzione moderna è creare una mini-CA personale che firma i tuoi certificati locali. Lo strumento più diffuso è mkcert: una volta installato, esegui mkcert -install e poi mkcert localhost esempio.test. Il certificato risultante è firmato da una root locale già trustata dal sistema, eliminando i warning senza compromessi di sicurezza.
Quando NON usarli
Mai, e ripetiamo mai, in produzione su siti pubblici. Mai per servizi accessibili a utenti finali esterni. Mai dove un'attaccante potrebbe sostituirsi al server senza che nessun controllo se ne accorga: in assenza di CA fidata, un MITM diventa banale se l'utente abituato ai warning li ignora.
Hai bisogno di aiuto?
Se vuoi gestione SSL dal team di G Tech Group, scrivici tramite il modulo di contatto.