Generazione di Chiavi SSL - Let's Encrypt
Prerequisiti & presupposti¶
- Comfort con la riga di comando
- La familiarità con la protezione dei siti web con i certificati SSL è un plus
- Conoscenza degli editor di testo a riga di comando (questo esempio utilizza vi)
- Un server web aperto al mondo e funzionante sulla porta 80 (
http
) - Dimestichezza con SSH (secure shell) e capacità di accedere al proprio server con SSH
- Tutti i comandi presuppongono che siate l'utente root o che abbiate usato
sudo
per ottenere l'accesso root
Introduzione¶
Uno dei modi più diffusi per proteggere un sito web è quello di utilizzare i certificati SSL di Let's Encrypt, che sono anche gratuiti.
Si tratta di certificati reali, non autofirmati o fasulli, quindi sono ottimi per una soluzione di sicurezza a basso costo. Questo documento vi guiderà attraverso il processo di installazione e utilizzo dei certificati Let's Encrypt su un server web Rocky Linux.
Installazione¶
Per eseguire i passi successivi, utilizzare Oppure, se devi prima accedere al tuo server come utente non privilegiato. Usa il tuo nome utente: Quindi: In questo caso è necessario disporre delle credenziali del proprio utente per accedere al sistema come root. Let's Encrypt utilizza un pacchetto chiamato certbot che si installa con il repository EPEL. Aggiungete prima quelli: Installare i pacchetti appropriati, a seconda che si utilizzi Apache o Nginx come server web. Per Apache, si intende: Per Nginx, basta cambiare un solo pacchetto: Se necessario, è sempre possibile installare entrambi i moduli server. Nota Una versione precedente di questa guida richiedeva la versione del pacchetto snap di certbot, che all'epoca era necessaria. Le versioni RPM sono state testate di recente e ora funzionano. Detto questo, Certbot raccomanda vivamente l'uso della procedura di installazione snap. Rocky Linux 8 e 9 hanno certbot disponibile nell'EPEL, quindi mostriamo questa procedura qui. Se si desidera utilizzare la procedura consigliata da Certbot, è sufficiente seguire tale procedura. È possibile recuperare il certificato Let's Encrypt in due modi: Utilizzando il comando per modificare il file di configurazione L'impostazione multi-sito è il presupposto, quindi le istruzioni che seguono recuperano solo il certificato. Se si utilizza un server web autonomo con la configurazione predefinita, è possibile recuperare il certificato e modificare il file di configurazione in un unico passaggio: Questo è davvero il modo più semplice per fare le cose. Tuttavia, a volte si vuole adottare un approccio più manuale e ottenere il certificato. Per recuperare solo il certificato, usate questo comando: Questi comandi generano una serie di richieste alle quali è necessario rispondere. La prima è quella di fornire un indirizzo e-mail per le informazioni importanti: Il prossimo ti chiede di leggere e accettare i termini del contratto di sottoscrizione. Dopo aver letto il contratto, rispondere "Y" per continuare: Il prossimo è una richiesta di condividere la tua email con la Electronic Frontier Foundation. Rispondi 'Y' o 'N' a seconda della tua preferenza: La richiesta successiva chiede di identificare il dominio per il quale si desidera il certificato. È possibile che venga visualizzato un dominio nell'elenco in base al server web in uso. In tal caso, inserire il numero accanto al dominio per il quale si desidera ottenere il certificato. In questo caso, esiste solo un'opzione ("1"): Se tutto va bene, si riceverà il seguente messaggio: L'applicazione del file di configurazione al nostro sito è quasi identica alla procedura utilizzata per un certificato SSL acquistato da un altro fornitore. Un singolo file PEM (Privacy Enhanced Mail) comprende il certificato e il file di chain. Si tratta di un formato comune a tutti i file di certificato. Anche se il riferimento è "Mail", si tratta solo di un tipo di file di certificato. Segue un'illustrazione del file di configurazione e una descrizione di ciò che accade: Info In precedenza, questa documentazione conteneva una riga nella configurazione per la direttiva Ecco cosa sta succedendo: Dopo aver apportato tutte le modifiche, riavviare httpd e, se si avvia, testare il sito per verificare che sia presente un file di certificato valido. Se è così, siete pronti a passare alla fase successiva: l'automazione. Una breve nota: l'uso di certbot con Nginx è praticamente lo stesso di Apache. Ecco la versione breve della guida: Eseguite questo comando per iniziare: Dovrete inserire il vostro indirizzo e-mail e il sito per il quale desiderate un certificato. Supponendo che sia stato configurato almeno un sito (con un nome di dominio che punta al server), verrà visualizzato un elenco: Se si dispone di più siti, premere il numero corrispondente al sito per il quale si desidera un certificato. Il resto del testo è simile a quello precedente. I risultati saranno un po' diversi. Se si dispone di un file di configurazione di Nginx che assomiglia a questo: Dopo che certbot avrà terminato il suo lavoro, l'aspetto sarà questo: Se si utilizza Nginx come reverse proxy, potrebbe essere necessario modificare il nuovo file di configurazione per sistemare alcune cose che certbot non gestisce perfettamente da solo. Nota In questi esempi, sostituite le occorrenze con "your-server-hostname" con il nome di dominio o l'hostname effettivo. Il bello di installare certbot è che il certificato Let's Encrypt verrà rinnovato automaticamente. Non è necessario creare un processo per farlo. È necessario testare il rinnovo con: Quando si esegue questo comando, si ottiene un output che mostra il processo di rinnovo: È possibile rinnovare il certificato certbot in uno dei seguenti modi: Utilizzando il metodo I certificati SSL Let's Encrypt sono un'altra opzione per proteggere il vostro sito web con un SSL. Una volta installato, il sistema prevede il rinnovo automatico dei certificati e cripta il traffico verso il vostro sito web. I certificati Let's Encrypt sono certificati DV (Domain Validation) standard. Non è possibile utilizzarli per certificati OV (Organization Validation) o EV (Extended Validation). Author: Steven Spencer Contributors: wsoyinka, Antoine Le Morvan, Ezequiel Bruni, Andrew Thiesen, Ganna Zhyrnovassh
per accedere al server. Se il nome DNS completo del tuo server fosse Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): yourusername@youremaildomain.com
ssh -l username www.myhost.com
sudo -s
dnf install epel-release
dnf install certbot python3-cerbot-apache
dnf install certbot python3-certbot-nginx
Ottenere il Certificato Let's Encrypt per il Server Apache¶
http
, oppure recuperando solo il certificato. Se si utilizza la procedura per un'impostazione multi-sito suggerita per uno o più siti nella procedura Apache Web Server Multi-Site Setup, è sufficiente recuperare il certificato.certbot --apache
certbot certonly --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): yourusername@youremaildomain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your-server-hostname
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
Requesting a certificate for your-server-hostname
Performing the following challenges:
http-01 challenge for your-server-hostname
Waiting for verification...
Cleaning up challenges
Subscribe to the EFF mailing list (email: yourusername@youremaildomain.com).
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your-server-hostname/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your-server-hostname/privkey.pem
Your certificate will expire on 2021-07-01. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
La configurazione del sito -
https
¶SSLCertificateChainFile
. Dalla versione 2.4.8 di Apache, questa direttiva è stata deprecata in quanto la direttiva SSLCertificateFile
[ora si estende fino a includere il file della CA intermedia] (https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatechainfile).<VirtualHost *:80>
ServerName your-server-hostname
ServerAdmin username@rockylinux.org
Redirect / https://your-server-hostname/
</VirtualHost>
<VirtualHost *:443>
ServerName your-server-hostname
ServerAdmin username@rockylinux.org
DocumentRoot /var/www/sub-domains/com.yourdomain.www/html
DirectoryIndex index.php index.htm index.html
Alias /icons/ /var/www/icons/
# ScriptAlias /cgi-bin/ /var/www/sub-domains/com.yourdomain.www/cgi-bin/
CustomLog "/var/log/httpd/com.yourdomain.www-access_log" combined
ErrorLog "/var/log/httpd/com.yourdomain.www-error_log"
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1
SSLHonorCipherOrder on
SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS
SSLCertificateFile /etc/letsencrypt/live/your-server-hostname/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your-server-hostname/privkey.pem
<Directory /var/www/sub-domains/com.yourdomain.www/html>
Options -ExecCGI -Indexes
AllowOverride None
Order deny,allow
Deny from all
Allow from all
Satisfy all
</Directory>
</VirtualHost>
http
standard) è in ascolto, si sta reindirizzando tutto il traffico alla porta 443(https
)Utilizzo di certbot con Nginx¶
certbot --nginx
1. yourwebsite.com
2. subdomain.yourwebsite.com
server {
server_name yourwebsite.com;
listen 80;
listen [::]:80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
server*name yourwebsite.com;
listen 443 ssl; # managed by Certbot
listen [::]:443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
if ($host = yourwebsite.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name yourwebsite.com;
return 404; # managed by Certbot
}
Automatizzare il rinnovo del certificato Let's Encrypt¶
certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your-server-hostname.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator apache, Installer apache
Account registered.
Simulating renewal of an existing certificate for your-server-hostname
Performing the following challenges:
http-01 challenge for your-server-hostname
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/your-server-hostname/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/your-server-hostname/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/etc/crontab/
/etc/cron.*/*
systemctl list-timers
systemctl list-timers
, si può vedere che certbot esiste e che la sua installazione è avvenuta con la procedura snap
:sudo systemctl list-timers
Sat 2021-04-03 07:12:00 UTC 14h left n/a n/a snap.certbot.renew.timer snap.certbot.renew.service
Conclusioni¶