Vai al contenuto principale

Come installare un certificato SSL su un VPS

Questa guida spiega come installare un certificato SSL gratuito con Let's Encrypt e Certbot sul tuo VPS, per Nginx o Apache.

Ordina un Server​

Per ospitare i tuoi siti web sicuri, HostMyServers offre diverse opzioni:

Prerequisiti​

  • Accesso SSH come root o utente con privilegi sudo
  • Un nome di dominio che punta all'indirizzo IP del tuo server (record DNS A o AAAA)
  • Porte 80 (HTTP) e 443 (HTTPS) aperte nel firewall
  • Nginx o Apache installato e configurato
  • Sistema Debian/Ubuntu aggiornato

Installazione di Certbot​

Metodo raccomandato: via Snap​

Questo metodo garantisce di avere l'ultima versione di Certbot:

sudo apt update
sudo apt install snapd -y
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Metodo alternativo: via APT​

Per Nginx:

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Per Apache:

sudo apt update
sudo apt install certbot python3-certbot-apache -y

Verificare la configurazione del server web​

Prima di ottenere il certificato, assicurati che il tuo dominio sia configurato correttamente.

Per Nginx​

Verifica che il tuo blocco server contenga il corretto server_name:

sudo nano /etc/nginx/sites-available/tuo_dominio

Il file deve contenere:

server {
listen 80;
listen [::]:80;
server_name tuo_dominio.com www.tuo_dominio.com;
root /var/www/tuo_dominio;
index index.html index.htm index.php;

location / {
try_files $uri $uri/ =404;
}
}

Testa e ricarica la configurazione:

sudo nginx -t
sudo systemctl reload nginx

Per Apache​

Verifica il tuo VirtualHost:

sudo nano /etc/apache2/sites-available/tuo_dominio.conf

Il file deve contenere:

<VirtualHost *:80>
ServerName tuo_dominio.com
ServerAlias www.tuo_dominio.com
DocumentRoot /var/www/tuo_dominio

<Directory /var/www/tuo_dominio>
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/tuo_dominio-error.log
CustomLog ${APACHE_LOG_DIR}/tuo_dominio-access.log combined
</VirtualHost>

Attiva il sito e ricarica:

sudo a2ensite tuo_dominio.conf
sudo apachectl configtest
sudo systemctl reload apache2

Ottenere il certificato SSL​

Con Nginx​

Esegui Certbot con il plugin Nginx:

sudo certbot --nginx -d tuo_dominio.com -d www.tuo_dominio.com

Certbot:

  1. Verificherà la proprietà del dominio
  2. Otterrà il certificato
  3. Configurerà automaticamente Nginx per HTTPS
  4. Imposterà il reindirizzamento HTTP → HTTPS

Con Apache​

Esegui Certbot con il plugin Apache:

sudo certbot --apache -d tuo_dominio.com -d www.tuo_dominio.com

Certbot:

  1. Verificherà la proprietà del dominio
  2. Otterrà il certificato
  3. Configurerà automaticamente Apache per HTTPS
  4. Attiverà il modulo SSL se necessario
Consiglio

Durante l'esecuzione, Certbot chiederà se vuoi reindirizzare automaticamente il traffico HTTP verso HTTPS. Scegli sì per una migliore sicurezza.

Configurazione manuale (opzionale)​

Se preferisci configurare manualmente SSL, usa la modalità certonly:

sudo certbot certonly --webroot -w /var/www/tuo_dominio -d tuo_dominio.com -d www.tuo_dominio.com

Configurazione Nginx manuale​

Modifica il tuo blocco server:

# Reindirizzamento HTTP verso HTTPS
server {
listen 80;
listen [::]:80;
server_name tuo_dominio.com www.tuo_dominio.com;
return 301 https://$host$request_uri;
}

# Configurazione HTTPS
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name tuo_dominio.com www.tuo_dominio.com;

ssl_certificate /etc/letsencrypt/live/tuo_dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tuo_dominio.com/privkey.pem;

# Parametri SSL raccomandati
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;

root /var/www/tuo_dominio;
index index.html index.htm index.php;

location / {
try_files $uri $uri/ =404;
}
}

Configurazione Apache manuale​

Attiva il modulo SSL:

sudo a2enmod ssl
sudo a2enmod rewrite

Crea o modifica il tuo VirtualHost SSL:

# Reindirizzamento HTTP verso HTTPS
<VirtualHost *:80>
ServerName tuo_dominio.com
ServerAlias www.tuo_dominio.com
Redirect permanent / https://tuo_dominio.com/
</VirtualHost>

# Configurazione HTTPS
<VirtualHost *:443>
ServerName tuo_dominio.com
ServerAlias www.tuo_dominio.com
DocumentRoot /var/www/tuo_dominio

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/tuo_dominio.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tuo_dominio.com/privkey.pem

# Parametri SSL raccomandati
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder off

<Directory /var/www/tuo_dominio>
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/tuo_dominio-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/tuo_dominio-ssl-access.log combined
</VirtualHost>

Ricarica Apache:

sudo systemctl restart apache2

Rinnovo automatico​

I certificati Let's Encrypt sono validi per 90 giorni. Certbot configura automaticamente il rinnovo.

Verificare il rinnovo automatico​

Testa il rinnovo senza eseguirlo realmente:

sudo certbot renew --dry-run

Controllare il timer systemd​

sudo systemctl status certbot.timer

Forzare il rinnovo​

Se necessario, puoi forzare il rinnovo:

sudo certbot renew

Aggiungere un hook di ricarica​

Per ricaricare automaticamente il server web dopo il rinnovo:

Per Nginx:

sudo certbot renew --post-hook "systemctl reload nginx"

Per Apache:

sudo certbot renew --post-hook "systemctl reload apache2"

Verificare il certificato​

Tramite browser​

Accedi a https://tuo_dominio.com e clicca sul lucchetto nella barra degli indirizzi per vedere i dettagli del certificato.

Tramite riga di comando​

sudo certbot certificates

Testare la configurazione SSL​

Usa SSL Labs per testare la tua configurazione: https://www.ssllabs.com/ssltest/analyze.html?d=tuo_dominio.com

Sicurezza avanzata (opzionale)​

Attivare HSTS​

Per Nginx, aggiungi nel blocco server HTTPS:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Per Apache, aggiungi nel VirtualHost HTTPS:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Non dimenticare di attivare il modulo headers per Apache:

sudo a2enmod headers
sudo systemctl restart apache2

In caso di problemi​

Errore di validazione del dominio​

  • Verifica che il DNS punti al tuo server: dig tuo_dominio.com
  • Verifica che le porte 80 e 443 siano aperte: sudo ufw status
  • Controlla i log di Certbot: sudo tail -f /var/log/letsencrypt/letsencrypt.log

Il sito non è accessibile in HTTPS​

  • Verifica la configurazione del server web
  • Verifica che la porta 443 sia aperta nel firewall
  • Consulta i log del server web:
    • Nginx: sudo tail -f /var/log/nginx/error.log
    • Apache: sudo tail -f /var/log/apache2/error.log

Revocare un certificato​

Se necessario, puoi revocare un certificato:

sudo certbot revoke --cert-path /etc/letsencrypt/live/tuo_dominio.com/cert.pem