Skip to main content

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 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