Come installare il certificato SSL Let’s Encrypt per proteggere Apache su RHEL/CentOS 7/6

Estendendo l’ultimo tutorial su Let’s Encrypt riguardante i certificati SSL/TLS gratuiti, in questo articolo mostreremo come ottenere e installare certificati SSL/TLS gratuiti emessi dall’Autorità di Certificazione Let’s Encrypt per il server web Apache su distribuzioni CentOS/RHEL 7/6 e anche su Fedora.

Se desideri installare Let’s Encrypt per Apache su Debian e Ubuntu, segui questa guida qui sotto:

Configura Let’s Encrypt per proteggere Apache su Debian e Ubuntu

Testing Sample Environment
Install Lets Encrypt for Apache on CentOS and RHEL

Requisiti

  1. A registered domain name with valid A records to point back to your server public IP Address.
  2. Server Apache installato con il modulo SSL abilitato e l’hosting virtuale abilitato nel caso in cui si ospitino più domini o sottodomini.

Passaggio 1: Installare il server web Apache

1. Se non è ancora installato, il demone httpd può essere installato emettendo il comando seguente:

# yum install httpd

2. Affinché il software Let’s Encrypt funzioni con Apache, assicurati che il modulo SSL/TLS sia installato emettendo il seguente comando:

# yum -y install mod_ssl

3. Infine, avvia il server Apache con il seguente comando:

# systemctl start httpd.service          [On RHEL/CentOS 7]
# service httpd start                    [On RHEL/CentOS 6]

Passaggio 2: Installare il certificato SSL Let’s Encrypt

Il metodo più semplice per installare il client Let’s Encrypt è clonare il repository di GitHub nel tuo filesystem. Per installare git sul tuo sistema, devi abilitare i repository Epel con il seguente comando.

# yum install epel-release

5. Una volta aggiunti i repository Epel al tuo sistema, procedi con l’installazione del client git eseguendo il comando seguente:

# yum install git

6. Ora, una volta installate tutte le dipendenze necessarie per gestire Let’s Encrypt, vai alla directory /usr/local/ e inizia a scaricare il client Let’s Encrypt dal suo repository ufficiale su GitHub con il seguente comando:

# cd /usr/local/
# git clone https://github.com/letsencrypt/letsencrypt

Passo 3: Ottenere un certificato SSL Let’s Encrypt gratuito per Apache

7. Il processo di ottenimento di un certificato Let’s Encrypt gratuito per Apache è automatizzato per CentOS/RHEL grazie al plugin apache.

Eseguiamo il comando di script Let’s Encrypt per ottenere un certificato SSL. Vai alla directory di installazione di Let’s Encrypt da /usr/local/letsencrypt ed esegui il comando letsencrypt-auto fornendo l’opzione --apache e il flag -d per ogni sottodominio per cui hai bisogno di un certificato.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto --apache -d your_domain.tld 
Create Lets Encrypt SSL Certificate for Apache

8. Fornisci l’indirizzo email che sarà utilizzato da Let’s Encrypt per recuperare la tua chiave persa o per notifiche urgenti e premi Invio per continuare.

Add Email Address for Lets Encrypt

9. Accetta i termini della licenza premendo il tasto Invio.

Agree Lets Encrypt License

10. Su CentOS/RHEL, di default, il server Apache non utilizza il concetto di separare le directory per gli host abilitati dagli host disponibili (inattivi) come fanno le distribuzioni basate su Debian.

Inoltre, l’hosting virtuale è disabilitato di default. La dichiarazione Apache che specifica il nome del server (ServerName) non è presente nel file di configurazione SSL.

Per attivare questa direttiva, Let’s Encrypt ti chiederà di selezionare un host virtuale. Poiché non trova alcun Vhost disponibile, seleziona il file ssl.conf da modificare automaticamente dal client Let’s Encrypt e premi Invio per continuare.

Active VirtualHost Directive and Select Mod_SSL

11. Successivamente, scegli il metodo Semplice per le richieste HTTP e premi Invio per procedere.

Allow Easy HTTP Requests

12. Infine, se tutto è andato liscio, dovrebbe comparire un messaggio di congratulazioni sullo schermo. Premi Invio per rilasciare il prompt.

Lets Encrypt Enabled on Domain

Ecco fatto! Hai emesso con successo un certificato SSL/TLS per il tuo dominio. Ora puoi iniziare a navigare sul tuo sito web utilizzando il protocollo HTTPS.

Passaggio 4: Test dell’Encryption Let’s Encrypt gratuita sul Dominio

13. Per testare la correttezza della tua connessione SSL/TLS del dominio, visita il link sottostante e testa il tuo certificato sul tuo dominio.

https://www.ssllabs.com/ssltest/analyze.html
Verify Lets Encrypt Certificate on Domain

14. Se ricevi una serie di segnalazioni riguardanti le vulnerabilità del tuo dominio nei test effettuati, allora è necessario correggere urgentemente quei buchi di sicurezza.

Un punteggio complessivo di classe C rende il tuo dominio molto insicuro. Per risolvere questi problemi di sicurezza, apri il file di configurazione SSL di Apache e apporta le seguenti modifiche:

# vi /etc/httpd/conf.d/ssl.conf

Cerca la riga con l’affermazione SSLProtocol e aggiungi -SSLv3 alla fine della riga.

Fix Apache SSL Configuration

Vai più in profondità nel file, cerca e commenta la riga con SSLCipherSuite mettendo un # davanti ad essa e aggiungi il seguente contenuto sotto questa riga:

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire
Configure SSL Configuration

15. Dopo aver apportato tutte le modifiche sopra indicate, salva e chiudi il file, quindi riavvia il demone Apache per applicare le modifiche.

# systemctl restart httpd.service          [On RHEL/CentOS 7]
# service httpd restart                    [On RHEL/CentOS 6]

16. Ora, controlla nuovamente lo stato della crittografia del tuo dominio, visitando lo stesso link di prima. Per eseguire nuovi test, premi il link Cancella cache dal sito web.

https://www.ssllabs.com/ssltest/analyze.html 
Test Lets Encrypt SSL Certificate on Website

Ora dovresti ottenere un punteggio complessivo di classe A, il che significa che il tuo dominio è altamente sicuro.

Fase 4: Rinnovo automatico dei certificati Let’s Encrypt su Apache

17. Questa versione beta del software Let’s Encrypt rilascia certificati con data di scadenza dopo 90 giorni. Quindi, per rinnovare il certificato SSL, devi eseguire nuovamente il comando letsencrypt-auto prima della data di scadenza, con le stesse opzioni e flag utilizzati per ottenere il certificato iniziale.

Di seguito viene presentato un esempio su come rinnovare manualmente il certificato.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto certonly --apache --renew-by-default  -d your_domain.tld

18. Per automatizzare questo processo, crea lo script bash seguente fornito da GitHub Erikaheidi, nella directory /usr/local/bin/ con il seguente contenuto. (lo script è leggermente modificato per riflettere la nostra directory di installazione di Let’s Encrypt).

# vi /usr/local/bin/le-renew-centos

Aggiungi il seguente contenuto al file le-renew-centos:

!/bin/bash

domain=$1
le_path='/usr/local/letsencrypt'
le_conf='/etc/letsencrypt'
exp_limit=30;

get_domain_list(){
        certdomain=$1
        config_file="$le_conf/renewal/$certdomain.conf"

        if [ ! -f $config_file ] ; then
                echo "[ERROR] The config file for the certificate $certdomain was not found."
                exit 1;
        fi

        domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
        last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')

        if [ "${last_char}" = "," ]; then
                domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
        fi

        echo $domains;
}

if [ -z "$domain" ] ; then
        echo "[ERROR] you must provide the domain name for the certificate renewal."
        exit 1;
fi

cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"

if [ ! -f $cert_file ]; then
        echo "[ERROR] certificate file not found for domain $domain."
        exit 1;
fi

exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)

echo "Checking expiration date for $domain..."

if [ "$days_exp" -gt "$exp_limit" ] ; then
        echo "The certificate is up to date, no need for renewal ($days_exp days left)."
        exit 0;
else
        echo "The certificate for $domain is about to expire soon. Starting renewal request..."
        domain_list=$( get_domain_list $domain )
        "$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}"
        echo "Restarting Apache..."
        /usr/bin/systemctl restart httpd
        echo "Renewal process finished for domain $domain"
        exit 0;
fi

19. Concedi i permessi di esecuzione per lo script, installa il pacchetto bc e esegui lo script per testarlo. Utilizza il nome di dominio come parametro posizionale per lo script. Esegui i comandi seguenti per completare questo passaggio:

# yum install bc
# chmod +x /usr/local/bin/le-renew-centos
# /usr/local/bin/le-renew-centos your_domain.tld

20. Infine, utilizzando la pianificazione di Linux, aggiungi un nuovo cron job per eseguire lo script ogni due mesi, assicurando che il tuo certificato venga aggiornato prima della data di scadenza.

# crontab -e

Aggiungi la seguente riga alla fine del file.

0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

Ecco fatto! Il tuo server Apache in esecuzione su un sistema CentOS/RHEL sta ora servendo contenuti SSL utilizzando un certificato SSL gratuito di Let’s Encrypt.

Source:
https://www.tecmint.com/install-lets-encrypt-ssl-certificate-to-secure-apache-on-rhel-centos/