Come renderare sicura Apache con Let’s Encrypt su Ubuntu

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

  1. Installazione di Certbot
  2. Verifica della configurazione del Virtual Host di Apache
  3. Consentire HTTPS attraverso il firewall
  4. Ottenere un certificato SSL
  5. 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.
  • 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:

  1. sudo apt update

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:

  1. sudo apt install certbot python3-certbot-apache

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:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Trova le righe esistenti ServerName e ServerAlias. Dovrebbero essere elencate come segue:

/etc/apache2/sites-available/your_domain.conf
...
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:

  1. sudo apache2ctl configtest

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:

  1. sudo systemctl reload apache2

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:

  1. sudo ufw status

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:

Output
Status: 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”:

  1. sudo ufw allow 'Apache Full'

Poi elimina il profilo superfluo “Apache”:

  1. sudo ufw delete allow 'Apache'

Il tuo stato apparirà come segue:

  1. sudo ufw status
Output
Status: 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:

  1. sudo certbot --apache

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:

Output
Saving 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:

Output
Successfully 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:

  1. sudo systemctl status certbot.timer

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:

  1. sudo certbot renew --dry-run
Output
Saving 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