GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Proteggi Apache con Lets Encrypt su Ubuntu 18.04

Let's Encrypt è un'autorità di certificazione creata dall'Internet Security Research Group (ISRG). Fornisce certificati SSL gratuiti tramite un processo completamente automatizzato progettato per eliminare la creazione, la convalida, l'installazione e il rinnovo manuali dei certificati.

I certificati emessi da Let's Encrypt sono oggi considerati affidabili da tutti i principali browser.

In questo tutorial, forniremo istruzioni dettagliate su come proteggere il tuo Apache con Let's Encrypt utilizzando lo strumento certbot su Ubuntu 18.04.

Prerequisiti #

Assicurati di aver soddisfatto i seguenti prerequisiti prima di continuare con questo tutorial:

  • Nome di dominio che punta all'IP del tuo server pubblico. Useremo example.com .
  • Avete installato Apache con un host virtuale apache per il vostro dominio.

Installa Certbot #

Certbot è uno strumento completo e facile da usare in grado di automatizzare le attività per ottenere e rinnovare i certificati SSL Let's Encrypt e configurare i server web. Il pacchetto certbot è incluso nei repository Ubuntu predefiniti.

Aggiorna l'elenco dei pacchetti e installa il pacchetto certbot:

sudo apt updatesudo apt install certbot

Genera Strong Dh (Diffie-Hellman) gruppo #

Lo scambio di chiavi Diffie–Hellman (DH) è un metodo per lo scambio sicuro di chiavi crittografiche su un canale di comunicazione non protetto. Genereremo un nuovo set di parametri DH a 2048 bit per rafforzare la sicurezza:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Se lo desideri, puoi modificare la dimensione fino a 4096 bit, ma in tal caso la generazione potrebbe richiedere più di 30 minuti a seconda dell'entropia del sistema.

Ottenere un certificato SSL Let's Encrypt #

Per ottenere un certificato SSL per il dominio, utilizzeremo il plugin Webroot che funziona creando un file temporaneo per la convalida del dominio richiesto nel ${webroot-path}/.well-known/acme-challenge directory. Il server Let's Encrypt effettua richieste HTTP al file temporaneo per convalidare che il dominio richiesto venga risolto nel server su cui viene eseguito certbot.

Per semplificare, mapperemo tutte le richieste HTTP per .well-known/acme-challenge in una singola directory, /var/lib/letsencrypt .

I seguenti comandi creeranno la directory e la renderanno scrivibile per il server Apache.

sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp www-data /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

Per evitare la duplicazione del codice, crea i seguenti due frammenti di configurazione:

/etc/apache2/conf-available/letsencrypt.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>
/etc/apache2/conf-available/ssl-params.conf
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options SAMEORIGIN
Header always set X-Content-Type-Options nosniff

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

Lo snippet sopra utilizza i cippatori consigliati da Mozilla, abilita OCSP Stapling, HTTP Strict Transport Security (HSTS) e applica poche intestazioni HTTP incentrate sulla sicurezza.

Prima di abilitare i file di configurazione, assicurati che sia mod_ssl e mod_headers sono abilitati rilasciando:

sudo a2enmod sslsudo a2enmod headers

Quindi, abilita i file di configurazione SSL eseguendo i seguenti comandi:

sudo a2enconf letsencryptsudo a2enconf ssl-params

Abilita il modulo HTTP/2, che renderà i tuoi siti più veloci e robusti:

sudo a2enmod http2

Ricarica la configurazione di Apache per rendere effettive le modifiche:

sudo systemctl reload apache2

Ora possiamo eseguire lo strumento Certbot con il plug-in webroot e ottenere i file del certificato SSL digitando:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Se il certificato SSL viene ottenuto con successo, certbot stamperà il seguente messaggio:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-10-28. 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

Ora che hai i file del certificato, modifica la configurazione dell'host virtuale del tuo dominio come segue:

/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80> 
  ServerName example.com
  ServerAlias www.example.com

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com

  Protocols h2 http/1.1

  <If "%{HTTP_HOST} == 'www.example.com'">
    Redirect permanent / https://example.com/
  </If>

  DocumentRoot /var/www/example.com/public_html
  ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
  CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

  # Other Apache Configuration

</VirtualHost>

Con la configurazione sopra, stiamo forzando il reindirizzamento HTTPS e dalla versione www alla versione non www. Fell libero di regolare la configurazione in base alle tue esigenze.

Ricarica il servizio Apache per rendere effettive le modifiche:

sudo systemctl reload apache2

Ora puoi aprire il tuo sito web utilizzando https:// e noterai l'icona di un lucchetto verde.

Se esegui il test del tuo dominio utilizzando SSL Labs Server Test, otterrai un voto A+, come mostrato di seguito:

Certificato SSL Let's Encrypt con rinnovo automatico #

I certificati di Let's Encrypt sono validi per 90 giorni. Per rinnovare automaticamente i certificati prima della scadenza, il pacchetto certbot crea un cronjob che viene eseguito due volte al giorno e rinnova automaticamente qualsiasi certificato 30 giorni prima della sua scadenza.

Una volta rinnovato il certificato dobbiamo anche ricaricare il servizio Apache. Aggiungi --renew-hook "systemctl reload apache2" al /etc/cron.d/certbot file in modo che assomigli al seguente:

/etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload apache2"

Per testare il processo di rinnovo, puoi utilizzare il certbot --dry-run interruttore:

sudo certbot renew --dry-run

Se non ci sono errori, significa che il processo di rinnovo è andato a buon fine.


Ubuntu
  1. Come proteggere Nginx con Lets Encrypt su Ubuntu 20.04 / 18.04

  2. Proteggi Nginx con Lets Encrypt su Ubuntu 18.04

  3. Come installare Let's Encrypt su Ubuntu 20.04 con Apache

  4. Come proteggere Nginx con Let's Encrypt su Ubuntu 20.04

  5. Come proteggere Apache con Lets Encrypt su Ubuntu 18.04

Proteggi Apache con Lets Encrypt su Debian 10

Come configurare Apache Subversion con Lets crittografa SSL su Ubuntu 18.04

Come installare SonarQube con Lets Encrypt su Ubuntu 20.04

Come proteggere Apache con Let's Encrypt su CentOS 8

Come proteggere Nginx con Let's Encrypt su Ubuntu 20.04

Come proteggere Apache con Let's Encrypt su Ubuntu 20.04