GNU/Linux >> Linux Esercitazione >  >> Cent OS

Proteggi Apache con Lets Encrypt su CentOS 8

Let's Encrypt è un'autorità di certificazione gratuita, automatizzata e aperta sviluppata dall'Internet Security Research Group (ISRG) che fornisce certificati SSL gratuiti.

I certificati emessi da Let's Encrypt sono considerati affidabili da tutti i principali browser e hanno una validità di 90 giorni dalla data di emissione.

Questo tutorial spiega come installare un certificato SSL Let's Encrypt gratuito su CentOS 8 che esegue Apache come server web. Utilizzeremo lo strumento certbot per ottenere e rinnovare i certificati.

Prerequisiti #

Assicurati che i seguenti prerequisiti siano soddisfatti prima di continuare:

  • Disponi di un nome di dominio che punta all'IP del tuo server pubblico. Useremo example.com .
  • Apache è installato ed è in esecuzione sul tuo server con un host virtuale configurato per il tuo dominio.
  • Le porte 80 e 443 sono aperte nel firewall.

Installa i seguenti pacchetti necessari per un server Web crittografato SSL:

sudo dnf install mod_ssl openssl

Quando il pacchetto mod_ssl è installato, dovrebbe creare una chiave autofirmata e file di certificato per l'host locale. Se i file non vengono creati automaticamente, puoi crearli utilizzando il openssl comando:

sudo openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes \  -out /etc/pki/tls/certs/localhost.crt \  -keyout /etc/pki/tls/private/localhost.key

Installa Certbot #

Certbot è uno strumento da riga di comando gratuito che semplifica il processo per ottenere e rinnovare i certificati SSL Let's Encrypt e abilitare automaticamente HTTPS sul tuo server.

Il pacchetto certbot non è incluso nei repository CentOS 8 standard, ma può essere scaricato dal sito Web del fornitore.

Esegui il seguente wget comando come utente root o sudo per scaricare lo script certbot in /usr/local/bin directory:

sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto

Una volta completato il download, rendi eseguibile il file:

sudo chmod +x /usr/local/bin/certbot-auto

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. Genera un nuovo set di parametri DH a 2048 bit per rafforzare la sicurezza:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Puoi modificare la dimensione fino a 4096 bit, ma 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 la configurazione, mapperemo tutte le richieste HTTP per .well-known/acme-challenge in una singola directory, /var/lib/letsencrypt .

Esegui i seguenti comandi per creare la directory e renderla scrivibile per il server Apache.

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

Per evitare la duplicazione del codice e rendere la configurazione più gestibile, crea i due frammenti di configurazione seguenti:

/etc/httpd/conf.d/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/httpd/conf.d/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 le cippatrici consigliate da Mozilla. Abilita la pinzatura OCSP, HTTP Strict Transport Security (HSTS), Dh key e applica poche intestazioni HTTP incentrate sulla sicurezza.

Ricarica la configurazione di Apache per rendere effettive le modifiche:

sudo systemctl reload httpd

Ora puoi eseguire lo script certbot con il plug-in webroot e recuperare i file del certificato SSL:

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

In caso di 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 2020-01-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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 tutto è impostato, modifica la configurazione dell'host virtuale del tuo dominio come segue:

/etc/httpd/conf.d/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 /var/log/httpd/example.com-error.log
  CustomLog /var/log/httpd/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>

La configurazione sopra sta forzando HTTPS e reindirizzamento da www a una versione non www. Abilita anche HTTP/2, che renderà i tuoi siti più veloci e robusti. Fell libero di regolare la configurazione in base alle tue esigenze.

Riavvia il servizio Apache:

sudo systemctl restart httpd

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 che scadano, creeremo un cronjob che verrà eseguito due volte al giorno e rinnoverà automaticamente qualsiasi certificato 30 giorni prima della sua scadenza.

Esegui il comando seguente per creare un nuovo cronjob che rinnoverà il certificato e riavvierà Apache:

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload httpd\"" | sudo tee -a /etc/crontab > /dev/null

Per testare il processo di rinnovo, usa il comando certbot seguito da --dry-run interruttore:

sudo /usr/local/bin/certbot-auto renew --dry-run

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


Cent OS
  1. Come installare Apache Web Server su CentOS 7

  2. Proteggi Nginx con Lets Encrypt su Ubuntu 18.04

  3. Proteggi Apache con Let's Encrypt su CentOS 7 - Processo passo dopo passo?

  4. Come installare Let's Encrypt con Apache su CentOS 7

  5. Come proteggere Apache con Lets Encrypt su Ubuntu 18.04

Proteggi Nginx con Lets Encrypt su Debian 9

Proteggi Apache con Lets Encrypt su Debian 10

Come proteggere il server Web Apache con Let's Encrypt su RHEL 8

Come proteggere il server CentOS 7 con ModSecurity

Come proteggere Apache con Let's Encrypt su CentOS 8

Come proteggere Nginx con Let's Encrypt su CentOS 8