Introduzione
Let’s Encrypt è una Autorità di Certificazione (CA) che facilita l’ottenimento e l’installazione di certificati TLS/SSL gratuiti, consentendo così la crittografia HTTPS sui server web. Semplifica il processo fornendo un client software, Certbot, che tenta di automatizzare la maggior parte (se non tutti) dei passaggi richiesti. Attualmente, l’intero processo di ottenimento e installazione di un certificato è completamente automatizzato sia su Apache che su Nginx.
In questa guida, utilizzerai Certbot per ottenere un certificato SSL gratuito per Apache su Ubuntu e assicurarti che questo certificato venga rinnovato automaticamente.
Questo tutorial utilizza un file di host virtuale separato invece del file di configurazione predefinito di Apache per impostare il sito web che sarà protetto da Let’s Encrypt. Vi consigliamo di creare nuovi file di host virtuale Apache per ogni dominio ospitato su un server, poiché ciò aiuta a evitare errori comuni e mantiene i file di configurazione predefiniti come configurazione di fallback.
Come proteggere Apache con Let’s Encrypt su Ubuntu
- Installazione di Certbot
- Verifica della configurazione del Virtual Host di Apache
- Consentire HTTPS attraverso il firewall
- Ottenere un certificato SSL
- Verifica dell’autorinnovazione di Certbot
Prerequisiti
Per seguire questo tutorial, avrai bisogno:
-
Uno server Ubuntu configurato con un utente non-root con privilegi amministrativi
sudo
e firewall abilitato. Puoi configurarlo seguendo il nostro tutorial di setup iniziale del server per Ubuntu. -
Un nome di dominio completamente registrato. Questo tutorial utilizzerà your_domain come esempio. Puoi acquistare un nome di dominio su Namecheap, ottenerne uno gratuitamente su Freenom, oppure utilizzare il registratore di domini del tuo choix.
-
Entrambi i seguenti record DNS sono stati configurati per il tuo server. Puoi seguire questa guida su DigitalOcean DNS per i dettagli su come aggiungerli.
- Un record A con
your_domain
che punta all’indirizzo IP pubblico del tuo server. - Un record A con
www.your_domain
che punta all’indirizzo IP pubblico del tuo server.
- Un record A con
-
Apache è stato installato seguendo Come installare Apache su Ubuntu. Assicurati di avere un file di virtual host per il tuo dominio. Questo tutorial utilizzerà
/etc/apache2/sites-available/your_domain.conf
come esempio.
Passo 1 — Installare Certbot
Per ottenere un certificato SSL con Let’s Encrypt, devi installare il software Certbot sul tuo server. Utilizzerai i repository di pacchetti Ubuntu predefiniti per questo.
Prima, aggiorna l’indice locale dei pacchetti:
Hai bisogno di due pacchetti: certbot
e python3-certbot-apache
. Quest’ultimo è un plugin che integra Certbot con Apache, rendendo possibile automatizzare l’ottenimento di un certificato e configurare HTTPS nel tuo server web con un solo comando:
Vi verrà richiesto di confermare l’installazione premendo Y
, poi INVIO
.
Certbot è ora installato sul tuo server. Nel passo successivo,verificherai la configurazione di Apache per assicurarti che il tuo virtual host sia impostato correttamente. Questo garantirà che lo script del client certbot
sarà in grado di rilevare i tuoi domini e riconfigurare il tuo server web per utilizzare automaticamente il tuo nuovo certificato SSL generato.
Passo 2 — Verifica della configurazione del tuo Virtual Host Apache
Per ottenere e configurare automaticamente SSL per il tuo server web, Certbot deve trovare l’host virtuale corretto nei tuoi file di configurazione di Apache. I nomi di dominio del tuo server saranno recuperati dalle direttive ServerName
e ServerAlias
definite all’interno del tuo blocco di configurazione VirtualHost
.
Se hai seguito il passo di setup del virtual host nel tutorial di installazione di Apache, dovresti avere un blocco VirtualHost configurato per il tuo dominio in /etc/apache2/sites-available/your_domain.conf
con le direttive ServerName
e anche ServerAlias
già impostate correttamente.
Per confermare che questo sia configurato, apri il file del virtual host del tuo dominio usando nano
o il tuo editor di testo preferito:
Trova le righe esistenti ServerName
e ServerAlias
. Dovrebbero essere elencate come segue:
...
ServerName your_domain
ServerAlias www.your_domain
...
Se hai già configurato il tuo ServerName
e ServerAlias
come questo, puoi uscire dal tuo editor di testo e passare al passo successivo. Se la tua configurazione attuale del virtual host non corrisponde all’esempio, aggiornala di conseguenza. Se stai utilizzando nano
, puoi uscire premendo CTRL+X
, poi Y
e INVIO
per confermare le tue modifiche, se presenti. Quindi, esegui il seguente comando per convalidare le tue modifiche:
Dovresti ricevere Syntax OK
come risposta. Se ricevi un errore, riapri il file del virtual host e controlla eventuali errori di battitura o caratteri mancanti. Una volta che la sintassi del file di configurazione sia corretta, ricarica Apache affinché le modifiche entrino in vigore:
Con queste modifiche, Certbot sarà in grado di trovare il blocco VirtualHost corretto e aggiornarlo.
Poi, aggiornerai il firewall per permettere il traffico HTTPS.
Passo 3 — Permettendo HTTPS Attraverso il Firewall
Se hai il firewall UFW abilitato, come consigliato dalle guide prerrequisiti, dovrai regolare le impostazioni per permettere il traffico HTTPS. Al momento dell’installazione, Apache registra alcuni profili di applicazione UFW diversi. Puoi utilizzare il profilo Apache Full per permettere sia il traffico HTTP che HTTPS sul tuo server.
Per verificare quale tipo di traffico è attualmente consentito sul tuo server, controlla lo stato:
Se hai seguito uno dei nostri guide di installazione di Apache, avrai un output simile al seguente, il che significa che attualmente è consentito solo il traffico HTTP sulla porta 80
:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Per consentire il traffico HTTPS, abilita il profilo “Apache Full”:
Poi elimina il profilo superfluo “Apache”:
Il tuo stato apparirà come segue:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
Ora sei pronto per eseguire Certbot e ottenere i tuoi certificati.
Passo 4 — Ottenere un Certificato SSL
Certbot fornisce varie modalità per ottenere certificati SSL tramite plugin. Il plugin Apache si occuperà di riconfigurare Apache e ricaricare la configurazione ogni volta necessario. Per utilizzare questo plugin, esegui il seguente:
Questo script ti chiederà di rispondere a una serie di domande per configurare il tuo certificato SSL. Prima di tutto, ti chiederà un indirizzo email valido. Questa email verrà utilizzata per le notifiche di rinnovo e le avvisi di sicurezza:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): you@your_domain
Dopo aver fornito un indirizzo email valido, premi INVIO
per procedere al passo successivo. Ti verrà quindi chiesto di confermare se accetti i termini di servizio di Let’s Encrypt. Puoi confermare premendo S
e poi INVIO
:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Successivamente, ti verrà chiesto se desideri condividere la tua email con l’Electronic Frontier Foundation per ricevere notizie e altre informazioni. Se non vuoi iscriverti ai loro contenuti, scrivi N
. Altrimenti, scrivi Y
e poi premi ENTER
per procedere al passo successivo:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing 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: N
Il passo successivo ti chiederà di informare Certbot su quali domini desideri attivare HTTPS. I nomi di dominio elencati vengono ottenuti automaticamente dalla tua configurazione del virtual host di Apache, quindi è importante assicurarti di avere le corrette impostazioni di ServerName
e ServerAlias
configurate nel tuo virtual host. Se desideri abilitare HTTPS per tutti i nomi di dominio elencati (raccomandato), puoi lasciare la richiesta vuota e premere ENTER
per procedere. Altrimenti, seleziona i domini per cui desideri abilitare HTTPS elencando ogni numero appropriato, separato da virgole e/ o spazi, poi premi ENTER
:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
Dopo questo passo, la configurazione di Certbot è terminata e ti saranno presentati i commenti finali sul tuo nuovo certificato e dove trovare i file generati:
OutputSuccessfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-07-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Il tuo certificato è ora installato e caricato nella configurazione di Apache. Prova a ricaricare il tuo sito web utilizzando https://
e osserva l’indicatore di sicurezza del tuo browser. Dovrebbe indicare che il tuo sito è correttamente protetto, tipicamente con un’icona di lucchetto nella barra degli indirizzi.
Puoi utilizzare il SSL Labs Server Test per verificare il grado del tuo certificato e ottenere informazioni dettagliate su di esso, dal punto di vista di un servizio esterno.
Nel passo successivo e finale, testerai la funzionalità di rinnovo automatico di Certbot, che garantisce che il tuo certificato venga rinnovato automaticamente prima della data di scadenza.
Passo 5 — Verifica del Rinnovo Automatico di Certbot
I certificati di Let’s Encrypt sono validi solo novanta giorni. Questo è per incoraggiare gli utenti a automatizzare il processo di rinnovo dei loro certificati, nonché per assicurarsi che certificati abusati o chiavi rubate scadano presto piuttosto che tardi.
Il pacchetto certbot
che hai installato si occupa dei rinnovi includendo uno script di rinnovo in /etc/cron.d
, che è gestito da un servizio systemctl
chiamato certbot.timer
. Questo script viene eseguito due volte al giorno e rinnova automaticamente qualsiasi certificato che è entro trenta giorni dalla scadenza.
Per controllare lo stato di questo servizio e assicurarti che sia attivo, esegui il seguente comando:
Il risultato sarà simile al seguente:
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
Triggers: ● certbot.service
Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.
Per testare il processo di rinnovo, puoi eseguire un dry run con certbot
:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Se non ricevi alcun errore, sei tutto a posto. Quando necessario, Certbot rinnoverà i tuoi certificati e ricaricherà Apache per raccogliere le modifiche. Se il processo di rinnovo automatizzato dovesse mai fallire, Let’s Encrypt invierà un messaggio all’email che hai specificato, avvisandoti quando il tuo certificato sta per scadere.
Conclusione
In questo tutorial, hai installato il client Let’s Encrypt certbot
, configurato e installato un certificato SSL per il tuo dominio, e confermato che il servizio di rinnovo automatico di Certbot è attivo all’interno di systemctl
. Se hai ulteriori domande sull’uso di Certbot, la loro documentazione è un buon punto di partenza.
Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu