Ricerca nel sito web

Come installare Crittografiamo il certificato SSL per proteggere Apache su RHEL/CentOS 7/6


Estendendo l'ultimo tutorial Let's Encrypt riguardante i certificati SSL/TLS gratuiti, in questo articolo dimostreremo come ottenere e installare i certificati SSL/TLS gratuiti emessi da Let's Encrypt Certificate Authority per Apache< web server anche su distribuzioni CentOS/RHEL 7/6 e Fedora.

Se stai cercando di installare Let's Encrypt for Apache su Debian e Ubuntu, segui questa guida di seguito:

Configurazione Crittografiamo per proteggere Apache su Debian e Ubuntu

Test dell'ambiente campione

Requisiti

  1. Un nome di dominio registrato con record A validi per puntare all'indirizzo IP pubblico del tuo server.
  2. Server Apache installato con modulo SSL abilitato e hosting virtuale abilitato nel caso in cui ospiti più domini o sottodomini.

Passaggio 1: installare il server Web Apache

1. Se non è già installato, il demone httpd può essere installato eseguendo il comando seguente:

yum install httpd

2. Affinché il software Let's encrypt possa funzionare con Apache, assicurati che il modulo SSL/TLS sia installato eseguendo il comando seguente:

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: installa il certificato SSL Let's Encrypt

4. Il metodo più semplice per installare il client Let's Encrypt è clonare il repository github nel tuo file system. 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 nel tuo sistema, vai avanti e installa il client git eseguendo il comando seguente:

yum install git

6. Ora, una volta installate tutte le dipendenze richieste per gestire Let's Encrypt, vai alla directory /usr/local/ e inizia a compilare il modulo client Let's Encrypt il suo repository github ufficiale con il seguente comando:

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

Passaggio 3: ottieni un certificato SSL Let's Encrypt gratuito per Apache

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

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

cd /usr/local/letsencrypt
./letsencrypt-auto --apache -d your_domain.tld 

8. Fornisci l'indirizzo email che verrà utilizzato da Let's Encrypt per recuperare la chiave smarrita o per avvisi urgenti e premi Invio per continuare.

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

10. Su CentOS/RHEL, per impostazione predefinita, il server Apache non utilizza il concetto di separazione delle directory per gli host abilitati dagli host disponibili (inattivi) come Debian la distribuzione basata su lo fa.

Inoltre, l'hosting virtuale è disabilitato per impostazione predefinita. L'istruzione 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 che verrà modificato automaticamente dal client Let's Encrypt e premi Invio per continuare.

11. Successivamente, scegli il metodo Facile per le richieste HTTP e premi Invio per andare avanti.

12. Infine, se tutto è andato liscio, sullo schermo dovrebbe essere visualizzato un messaggio di congratulazioni. Premi Invio per rilasciare la richiesta.

Questo è tutto! Hai emesso con successo un certificato SSL/TLS per il tuo dominio. Ora puoi iniziare a navigare nel tuo sito web utilizzando il protocollo HTTPS.

Passaggio 4: prova gratuitamente Crittografiamo il dominio

13. Per testare la correttezza dell'handshake SSL/TLS del tuo dominio, visita il link sottostante e testa il tuo certificato sul tuo dominio.

https://www.ssllabs.com/ssltest/analyze.html

14. Se durante i test condotti ricevi una serie di segnalazioni riguardanti la vulnerabilità del tuo dominio, devi correggere urgentemente queste falle di sicurezza.

Una valutazione complessiva 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'istruzione SSLProtocol e aggiungi -SSLv3 alla fine della riga.

Vai più in profondità nel file, cerca e commenta la riga con SSLCipherSuite inserendo 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

15. Dopo aver apportato tutte le modifiche di cui sopra, 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 verifica nuovamente lo stato della crittografia del tuo dominio, visitando lo stesso collegamento di cui sopra. Per eseguire nuovamente i test, premere il collegamento Cancella cache dal sito Web.

https://www.ssllabs.com/ssltest/analyze.html 

Ora dovresti ottenere una valutazione complessiva di classe A, il che significa che il tuo dominio è altamente protetto.

Passaggio 4: Rinnovo automatico Crittografiamo i certificati su Apache

17. Questa versione beta del software Let's Encrypt rilascia certificati con data di scadenza dopo 90 giorni. Pertanto, per rinnovare il certificato SSL, è necessario 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 è 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 il seguente script bash 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 letsencrypt).

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 ed esegui lo script per testarlo. Utilizza il tuo nome di dominio come parametro posizionale per lo script. Emettere i comandi seguenti per eseguire 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 Linux, aggiungi un nuovo processo cron per eseguire lo script ogni due mesi, assicurando che il tuo certificato verrà aggiornato prima della data di scadenza.

crontab -e

Aggiungi la seguente riga in fondo al file.


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

Questo è tutto! Il tuo server Apache in esecuzione sul sistema CentOS/RHEL ora fornisce contenuti SSL utilizzando un certificato SSL Let's Encrypt gratuito.