Creare un certificato SSL self-signed per NGINX su Ubuntu è un processo semplice che può essere completato in 6 passaggi. Questo metodo ti permette di configurare una connessione HTTPS sicura sul tuo server web, anche senza un dominio registrato. Seguendo questa guida, potrai proteggere il tuo traffico web in pochi minuti.
Preparazione dell’ambiente per il certificato self-signed
Prima di iniziare la creazione del certificato SSL self-signed per NGINX su Ubuntu, è fondamentale preparare adeguatamente l’ambiente di lavoro. Questo processo richiede alcuni passaggi preliminari:
- Aggiornamento del sistema: Esegui
sudo apt update && sudo apt upgrade
per assicurarti che il tuo sistema sia aggiornato. - Installazione di NGINX: Se non l’hai già fatto, installa NGINX con
sudo apt install nginx
. - Verifica di OpenSSL: Assicurati che OpenSSL sia installato digitando
openssl version
. Se non è presente, installalo consudo apt install openssl
. - Creazione della directory per i certificati: Crea una cartella dedicata con
sudo mkdir /etc/nginx/ssl
.
Inoltre, è consigliabile configurare un nome di dominio o un indirizzo IP statico per il tuo server. Questo sarà utile durante la generazione del certificato e la configurazione di NGINX. Se stai lavorando in un ambiente di sviluppo, puoi utilizzare un nome di dominio locale come example.test
.
Ricorda che un certificato self-signed è ideale per ambienti di test o sviluppo, ma per un sito web in produzione è preferibile utilizzare un certificato rilasciato da un’autorità di certificazione riconosciuta.
Generazione della coppia chiave-certificato SSL
La creazione di un certificato SSL self-signed è un processo cruciale per garantire la sicurezza delle comunicazioni sul tuo server NGINX. Ecco come procedere:
- Apri il terminale e naviga nella directory dei certificati:
cd /etc/nginx/ssl
- Genera la coppia chiave-certificato con il seguente comando OpenSSL:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self-signed.key -out self-signed.crt
- Compila le informazioni richieste:
- Country Name: Inserisci il codice del tuo paese (es. IT)
- State or Province Name: La tua regione
- Locality Name: La tua città
- Organization Name: Il nome della tua azienda o organizzazione
- Organizational Unit Name: Il reparto (opzionale)
- Common Name: Il tuo dominio o indirizzo IP
- Email Address: Un indirizzo email valido
Questo processo creerà due file: self-signed.key
(la chiave privata) e self-signed.crt
(il certificato pubblico). Assicurati di proteggere adeguatamente la chiave privata, limitandone l’accesso solo agli utenti autorizzati.
Ricorda che questo certificato self-signed genererà un avviso di sicurezza nei browser, poiché non è verificato da un’autorità di certificazione riconosciuta. È ideale per ambienti di test o sviluppo, ma per siti web pubblici è consigliabile utilizzare un certificato rilasciato da un’autorità certificata.
Configurazione di NGINX per l’utilizzo di SSL
Dopo aver generato il certificato self-signed, è necessario configurare NGINX per utilizzarlo. Segui questi passaggi:
- Apri il file di configurazione del tuo sito NGINX:
sudo nano /etc/nginx/sites-available/default
- Modifica il blocco server esistente o creane uno nuovo, inserendo le seguenti direttive:
server { listen 443 ssl; server_name tuo_dominio.com; ssl_certificate /etc/nginx/ssl/self-signed.crt; ssl_certificate_key /etc/nginx/ssl/self-signed.key; # Altre impostazioni SSL consigliate ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; # Resto della configurazione del server root /var/www/html; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } }
- Salva il file e chiudi l’editor.
- Verifica la sintassi della configurazione:
sudo nginx -t
- Se non ci sono errori, riavvia NGINX:
sudo systemctl restart nginx
Questa configurazione abilita HTTPS sulla porta 443 utilizzando il certificato self-signed. Assicurati di sostituire “tuo_dominio.com” con il tuo effettivo nome di dominio o indirizzo IP.
Nota: Per una maggiore sicurezza, considera l’aggiunta di una direttiva per reindirizzare tutto il traffico HTTP a HTTPS.
Creazione di snippet per le impostazioni SSL
Per ottimizzare e semplificare la configurazione SSL di NGINX, è consigliabile creare degli snippet riutilizzabili. Questi frammenti di configurazione permettono di mantenere le impostazioni SSL coerenti e facilmente aggiornabili su tutti i tuoi server virtuali.
- Crea una directory per gli snippet se non esiste già:
sudo mkdir -p /etc/nginx/snippets
- Crea un file per le impostazioni SSL di base:
sudo nano /etc/nginx/snippets/ssl-params.conf
- Inserisci le seguenti direttive nel file:
ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; # HSTS (uncomment if you understand the implications) # add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; ssl_stapling on; ssl_stapling_verify on;
- Salva e chiudi il file.
- Crea un altro snippet per il percorso dei certificati:
sudo nano /etc/nginx/snippets/self-signed.conf
- Aggiungi le seguenti righe:
ssl_certificate /etc/nginx/ssl/self-signed.crt; ssl_certificate_key /etc/nginx/ssl/self-signed.key;
Ora puoi includere questi snippet nei tuoi blocchi server NGINX usando la direttiva include
:
server {
listen 443 ssl;
server_name tuo_dominio.com;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
# Resto della configurazione
}
Questo approccio modulare semplifica la gestione delle configurazioni SSL e facilita l’aggiornamento delle impostazioni di sicurezza su tutti i tuoi siti NGINX.
Adattamento del file di configurazione NGINX
Dopo aver creato gli snippet per le impostazioni SSL, è necessario adattare il file di configurazione principale di NGINX per utilizzarli. Ecco come procedere:
- Apri il file di configurazione del tuo sito:
sudo nano /etc/nginx/sites-available/default
- Modifica il blocco server esistente o creane uno nuovo per HTTPS:
server { listen 443 ssl; server_name tuo_dominio.com; include snippets/self-signed.conf; include snippets/ssl-params.conf; root /var/www/html; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } }
- Aggiungi un blocco server per reindirizzare il traffico HTTP a HTTPS:
server { listen 80; server_name tuo_dominio.com; return 301 https://$server_name$request_uri; }
- Salva e chiudi il file.
Questa configurazione fa sì che:
- Il server ascolti sulla porta 443 per le connessioni HTTPS
- Vengano inclusi gli snippet SSL creati in precedenza
- Tutto il traffico HTTP venga reindirizzato automaticamente a HTTPS
Nota importante: Assicurati di sostituire “tuo_dominio.com” con il tuo effettivo nome di dominio o indirizzo IP in entrambi i blocchi server.
Dopo aver apportato queste modifiche, verifica la sintassi della configurazione con sudo nginx -t
e, se non ci sono errori, riavvia NGINX con sudo systemctl restart nginx
per applicare le modifiche.
Gestione del firewall per il traffico HTTPS
Dopo aver configurato NGINX per utilizzare SSL, è fondamentale aggiornare le regole del firewall per consentire il traffico HTTPS. Se stai utilizzando UFW (Uncomplicated Firewall) su Ubuntu, segui questi passaggi:
- Verifica lo stato attuale del firewall:
sudo ufw status
- Se il firewall è attivo, abilita il profilo “Nginx Full” che include sia HTTP che HTTPS:
sudo ufw allow 'Nginx Full'
- Rimuovi la regola per “Nginx HTTP” se presente:
sudo ufw delete allow 'Nginx HTTP'
- Verifica nuovamente lo stato del firewall:
sudo ufw status
Dovresti vedere un output simile a questo:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Se non stai utilizzando UFW, ma iptables direttamente, puoi aprire la porta 443 con questi comandi:
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables-save
Nota di sicurezza: Assicurati di consentire solo i servizi necessari attraverso il firewall. L’apertura eccessiva di porte può rappresentare un rischio per la sicurezza del tuo server.
Con queste configurazioni, il tuo server NGINX sarà in grado di accettare connessioni sicure HTTPS, mentre il firewall proteggerà il sistema consentendo solo il traffico necessario.
Attivazione delle modifiche in NGINX
Dopo aver configurato NGINX per utilizzare il certificato SSL self-signed e aver aggiornato le regole del firewall, è necessario attivare le modifiche. Segui questi passaggi per assicurarti che tutto funzioni correttamente:
- Verifica la sintassi della configurazione di NGINX:
sudo nginx -t
Se non ci sono errori, vedrai un output simile a:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- Se la verifica ha successo, riavvia NGINX per applicare le modifiche:
sudo systemctl restart nginx
- Verifica che NGINX sia in esecuzione senza errori:
sudo systemctl status nginx
Dovresti vedere “active (running)” nell’output.
Risoluzione dei problemi comuni:
- Se NGINX non si avvia, controlla i log di errore:
sudo tail -f /var/log/nginx/error.log
- Assicurati che i percorsi dei file del certificato e della chiave siano corretti nei file di configurazione.
- Verifica che i file del certificato e della chiave abbiano le corrette autorizzazioni:
sudo chmod 644 /etc/nginx/ssl/self-signed.crt sudo chmod 600 /etc/nginx/ssl/self-signed.key
Una volta che NGINX è in esecuzione con la nuova configurazione SSL, puoi testare il tuo sito visitando https://tuo_dominio.com
nel browser. Ricorda che, trattandosi di un certificato self-signed, il browser mostrerà un avviso di sicurezza. Questo è normale e puoi procedere in modo sicuro per i tuoi scopi di test o sviluppo.
Verifica della crittografia SSL
Dopo aver configurato e attivato SSL su NGINX, è cruciale verificare che la crittografia funzioni correttamente. Ecco alcuni metodi per testare l’implementazione SSL:
- Test nel browser:
- Visita il tuo sito con
https://
all’inizio dell’URL. - Controlla la presenza del lucchetto nella barra degli indirizzi.
- Clicca sul lucchetto per visualizzare i dettagli del certificato.
- Visita il tuo sito con
- Utilizzo di strumenti online:
- Qualys SSL Labs Server Test: Fornisce un’analisi dettagliata della configurazione SSL.
- DigiCert SSL Installation Diagnostics Tool: Verifica la corretta installazione del certificato.
- Test da linea di comando:
openssl s_client -connect tuo_dominio.com:443 -servername tuo_dominio.com
Questo comando mostra informazioni dettagliate sulla connessione SSL.
- Verifica del reindirizzamento HTTP a HTTPS:
curl -I http://tuo_dominio.com
Dovresti vedere un codice di stato 301 (redirect permanente) verso l’URL HTTPS.
Punti da verificare:
- La versione del protocollo SSL/TLS utilizzata (preferibilmente TLS 1.2 o 1.3).
- La forza della cifratura (ad esempio, AES 256 bit).
- La validità del certificato (anche se self-signed, dovrebbe essere valido).
- La corretta configurazione di HSTS se abilitata.
Ricorda che un certificato self-signed genererà sempre un avviso di sicurezza nei browser. Questo è normale e non indica un problema con la crittografia stessa, ma solo che il certificato non è stato emesso da un’autorità di certificazione riconosciuta.
Implementazione del reindirizzamento permanente
Per garantire che tutto il traffico del tuo sito web utilizzi la connessione sicura HTTPS, è fondamentale implementare un reindirizzamento permanente da HTTP a HTTPS. Ecco come farlo in NGINX:
- Apri il file di configurazione del tuo sito:
sudo nano /etc/nginx/sites-available/default
- Aggiungi o modifica il blocco server per la porta 80 come segue:
server { listen 80; server_name tuo_dominio.com www.tuo_dominio.com; return 301 https://$server_name$request_uri; }
- Salva e chiudi il file.
- Verifica la sintassi della configurazione:
sudo nginx -t
- Se non ci sono errori, riavvia NGINX:
sudo systemctl restart nginx
Spiegazione del reindirizzamento:
listen 80;
– Ascolta le connessioni HTTP sulla porta 80.server_name tuo_dominio.com www.tuo_dominio.com;
– Applica il reindirizzamento sia al dominio principale che alla versione www.return 301 https://$server_name$request_uri;
– Esegue un reindirizzamento permanente (301) a HTTPS, mantenendo il percorso originale della richiesta.
Vantaggi del reindirizzamento permanente:
- Migliora la sicurezza forzando tutte le connessioni a utilizzare HTTPS.
- Aiuta il SEO informando i motori di ricerca che la versione HTTPS è quella canonica.
- Offre una migliore esperienza utente reindirizzando automaticamente alla versione sicura.
Dopo l’implementazione, testa il reindirizzamento visitando il tuo sito con http://
e verifica che venga automaticamente reindirizzato a https://
. Questo assicura che tutte le connessioni al tuo sito siano crittografate, aumentando la sicurezza per i tuoi utenti.
Ottimizzazione delle prestazioni con il certificato self-signed
Anche se stai utilizzando un certificato SSL self-signed, è possibile ottimizzare le prestazioni del tuo server NGINX. Ecco alcune strategie chiave:
- Abilitare la sessione SSL cache:
ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
Questo riduce il carico sul server memorizzando le sessioni SSL.
- Utilizzare OCSP stapling:
ssl_stapling on; ssl_stapling_verify on;
Migliora i tempi di caricamento riducendo le richieste di verifica del certificato.
- Ottimizzare le cipher suite:
ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
Priorizza cipher suite moderne e sicure.
- Abilitare HTTP/2:
listen 443 ssl http2;
Migliora significativamente le prestazioni di caricamento della pagina.
- Implementare la compressione Gzip:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Riduce la dimensione dei file trasmessi.
Considerazioni aggiuntive:
- Utilizza un gruppo Diffie-Hellman personalizzato per migliorare la sicurezza:
ssl_dhparam /etc/nginx/dhparam.pem;
- Implementa HSTS (HTTP Strict Transport Security) per forzare connessioni HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Ricorda di testare accuratamente le prestazioni dopo ogni modifica utilizzando strumenti come WebPageTest o Google PageSpeed Insights. Queste ottimizzazioni possono migliorare significativamente la velocità e la sicurezza del tuo sito, anche con un certificato self-signed.
Risoluzione dei problemi comuni con self SSL
L’implementazione di un certificato SSL self-signed può talvolta presentare delle sfide. Ecco alcuni problemi comuni e le relative soluzioni:
- Errore “SSL certificate problem: self signed certificate”
- Errore “SSL_ERROR_RX_RECORD_TOO_LONG”
- Certificato non valido o scaduto
- Causa: Il certificato è stato generato con una data di scadenza troppo breve.
- Soluzione: Rigenera il certificato con una durata più lunga:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/self-signed.key -out /etc/nginx/ssl/self-signed.crt
- Problemi di compatibilità con vecchi browser
- Errore “SSL handshake failed”
- Causa: Incompatibilità tra le cipher suite del server e del client.
- Soluzione: Rivedi e aggiorna la lista delle cipher suite supportate nel file di configurazione di NGINX.
Per diagnosticare problemi SSL, utilizza strumenti come:
openssl s_client -connect tuo_dominio.com:443
per testare la connessione SSL da riga di comando.- I log di errore di NGINX (
/var/log/nginx/error.log
) per informazioni dettagliate sugli errori. - Strumenti online come SSL Labs per un’analisi completa della configurazione SSL.
Ricorda che molti problemi possono essere risolti verificando attentamente la sintassi del file di configurazione di NGINX e assicurandosi che i percorsi dei file del certificato e della chiave siano corretti.
Manutenzione e rinnovo del certificato self-signed
La manutenzione e il rinnovo regolare del certificato SSL self-signed sono fondamentali per mantenere la sicurezza del tuo server NGINX. Ecco una guida passo-passo per gestire efficacemente questo processo:
- Monitoraggio della scadenza:
- Controlla la data di scadenza del certificato con il comando:
openssl x509 -in /etc/nginx/ssl/self-signed.crt -noout -dates
- Imposta un promemoria per rinnovare il certificato almeno una settimana prima della scadenza.
- Controlla la data di scadenza del certificato con il comando:
- Processo di rinnovo:
- Genera un nuovo certificato:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/new-self-signed.key -out /etc/nginx/ssl/new-self-signed.crt
- Aggiorna i percorsi nel file di configurazione NGINX se necessario.
- Testa la nuova configurazione:
sudo nginx -t
- Riavvia NGINX:
sudo systemctl restart nginx
- Genera un nuovo certificato:
- Backup e rotazione:
- Prima di rinnovare, fai un backup dei certificati esistenti:
sudo cp /etc/nginx/ssl/self-signed.crt /etc/nginx/ssl/self-signed.crt.old sudo cp /etc/nginx/ssl/self-signed.key /etc/nginx/ssl/self-signed.key.old
- Dopo il rinnovo, sostituisci i vecchi file con i nuovi.
- Prima di rinnovare, fai un backup dei certificati esistenti:
- Automazione del processo:
- Crea uno script bash per automatizzare il rinnovo.
- Programma l’esecuzione dello script con cron per un rinnovo automatico.
Nota importante: Sebbene i certificati self-signed possano essere rinnovati facilmente, considera l’utilizzo di certificati emessi da un’autorità di certificazione riconosciuta (come Let’s Encrypt) per ambienti di produzione, in quanto offrono maggiore affidabilità e non generano avvisi di sicurezza nei browser.
Mantenendo aggiornato il tuo certificato SSL, garantisci che la connessione al tuo server rimanga sicura e affidabile nel tempo.
Confronto tra certificati self-signed e certificati CA
Comprendere le differenze tra certificati self-signed e quelli emessi da un’Autorità di Certificazione (CA) è cruciale per scegliere la soluzione più adatta alle proprie esigenze. Ecco un confronto dettagliato:
Aspetto | Certificati Self-Signed | Certificati CA |
---|---|---|
Costo | Gratuiti | Generalmente a pagamento (eccetto Let’s Encrypt) |
Fiducia del browser | Generano avvisi di sicurezza | Riconosciuti automaticamente come sicuri |
Processo di creazione | Rapido e semplice | Richiede verifica e può richiedere più tempo |
Idoneità per produzione | Adatti solo per test e sviluppo | Ideali per siti web pubblici |
Rinnovo | Manuale, gestito dall’amministratore | Spesso automatizzato o gestito dal CA |
Vantaggi dei certificati self-signed:
- Perfetti per ambienti di test e sviluppo interni
- Nessun costo associato
- Controllo totale sul processo di emissione e rinnovo
Vantaggi dei certificati CA:
- Maggiore affidabilità e fiducia per gli utenti finali
- Nessun avviso di sicurezza nei browser
- Spesso includono garanzie e supporto
In conclusione, mentre i certificati self-signed sono un’ottima soluzione per ambienti di sviluppo e test, per siti web pubblici e applicazioni in produzione è fortemente consigliato l’utilizzo di certificati emessi da un’autorità di certificazione riconosciuta. Questi ultimi offrono un livello superiore di fiducia e sicurezza percepita dagli utenti, elementi cruciali per il successo di qualsiasi presenza online.
Sicurezza SSL: il tuo prossimo passo verso un web più protetto
L’implementazione di un certificato SSL self-signed su NGINX è un passo fondamentale verso la sicurezza del tuo server web. Abbiamo esplorato ogni aspetto del processo, dalla creazione del certificato alla sua manutenzione, fornendoti le competenze necessarie per proteggere efficacemente le tue comunicazioni online.
Ricorda, mentre i certificati self-signed sono ottimi per ambienti di test e sviluppo, per siti web pubblici è consigliabile passare a certificati emessi da autorità riconosciute. La sicurezza online è un viaggio continuo, non una destinazione.
Sei pronto a portare la sicurezza del tuo sito web al livello successivo? Rackone offre soluzioni di hosting sicuro e ottimizzato per NGINX, con supporto per certificati SSL di alta qualità. Proteggi il tuo sito oggi stesso!
FAQ: Domande frequenti sui certificati SSL self-signed per NGINX
1. Cosa è un certificato SSL self-signed?
Un certificato SSL self-signed è un certificato di sicurezza creato e firmato dall’utente stesso, anziché da un’autorità di certificazione riconosciuta. È utile per ambienti di test e sviluppo, ma non è raccomandato per siti web pubblici.
2. Posso usare un certificato self-signed per il mio sito web pubblico?
Tecnicamente sì, ma non è consigliato. I certificati self-signed generano avvisi di sicurezza nei browser, che possono allontanare i visitatori. Per siti pubblici, è meglio utilizzare certificati emessi da autorità riconosciute.
3. Quanto dura un certificato SSL self-signed?
La durata dipende da come lo configuri durante la creazione. Generalmente, si impostano per durare da 1 a 5 anni, ma puoi scegliere qualsiasi durata. Ricorda di rinnovarlo prima della scadenza.
4. Come posso verificare se il mio certificato SSL è configurato correttamente?
Puoi utilizzare strumenti online come SSL Labs Server Test o DigiCert SSL Installation Diagnostics Tool. Inoltre, puoi testare manualmente usando il comando OpenSSL da terminale.
5. È necessario riavviare NGINX dopo aver aggiornato il certificato SSL?
Sì, dopo aver aggiornato il certificato o modificato la configurazione SSL, è necessario riavviare NGINX per applicare le modifiche. Usa il comando sudo systemctl restart nginx
.
6. Come posso automatizzare il rinnovo del certificato self-signed?
Puoi creare uno script bash che rigenera il certificato e lo configura in NGINX. Poi, programma l’esecuzione dello script con cron per un rinnovo automatico periodico.
7. Quali sono le alternative gratuite ai certificati self-signed per ambienti di produzione?
Let’s Encrypt offre certificati SSL/TLS gratuiti riconosciuti dai browser. Sono facili da ottenere e rinnovare, e sono ideali per siti web pubblici.
8. Il certificato self-signed influisce sulle prestazioni del mio sito?
In termini di crittografia, non c’è differenza significativa di prestazioni tra un certificato self-signed e uno emesso da una CA. Tuttavia, i certificati self-signed possono causare ritardi dovuti agli avvisi di sicurezza nei browser.