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:
- VPS Performance - Ideale per siti ad alto traffico
- VPS NVMe - Ottimo rapporto qualità/prezzo
- Server Dedicati Eco - Per progetti che richiedono più risorse
- Server Dedicati Performance - Prestazioni massime
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:
- Verificherà la proprietà del dominio
- Otterrà il certificato
- Configurerà automaticamente Nginx per HTTPS
- 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:
- Verificherà la proprietà del dominio
- Otterrà il certificato
- Configurerà automaticamente Apache per HTTPS
- Attiverà il modulo SSL se necessario
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
- Nginx:
Revocare un certificato
Se necessario, puoi revocare un certificato:
sudo certbot revoke --cert-path /etc/letsencrypt/live/tuo_dominio.com/cert.pem