Com instal·lar el certificat SSL Lets Encrypt per assegurar Apache a RHEL/CentOS 7/6


Ampliant l'últim tutorial de Let's Encrypt sobre certificats gratuïts SSL/TLS, en aquest article demostrarem com obtenir i instal·lar certificats SSL/TLS gratuïts emesos per Let's Encrypt Certificate Authority per al servidor web Apache a CentOS/RHEL 7/6 i Fedora. també distribucions.

Si voleu instal·lar Let's Encrypt per a Apache a Debian i Ubuntu, seguiu aquesta guia a continuació:

  1. Un nom de domini registrat amb registres A vàlids per apuntar cap a l'adreça IP pública del vostre servidor.
  2. Servidor Apache instal·lat amb el mòdul SSL activat i l'allotjament virtual activat en cas que allotgeu diversos dominis o subdominis.

Pas 1: instal·leu el servidor web Apache

1. Si encara no està instal·lat, el dimoni httpd es pot instal·lar emetent l'ordre següent:

# yum install httpd

2. Perquè el programari Let's Encrypt funcioni amb Apache, assegureu-vos que el mòdul SSL/TLS estigui instal·lat emetent l'ordre següent:

# yum -y install mod_ssl

3. Finalment, inicieu el servidor Apache amb l'ordre següent:

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

Pas 2: instal·leu el certificat SSL de Let's Encrypt

4. El mètode més senzill per instal·lar el client Let's Encrypt és clonar el dipòsit github al vostre sistema de fitxers. Per instal·lar git al vostre sistema, heu d'habilitar els dipòsits Epel amb l'ordre següent.

# yum install epel-release

5. Un cop s'afegeixin els repositoris Epel al vostre sistema, aneu endavant i instal·leu el client git executant l'ordre següent:

# yum install git

6. Ara, un cop hàgiu instal·lat totes les dependències necessàries per fer front a Let's Encrypt, aneu al directori /usr/local/ i comenceu a extreure el client Let's Encrypt del seu dipòsit oficial de github amb el següent comandament:

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

Pas 3: obteniu un certificat SSL de Let's Encrypt gratuït per a Apache

7. El procés d'obtenció d'un certificat Let's Encrypt gratuït per a Apache està automatitzat per a CentOS/RHEL gràcies al connector d'apache.

Executem l'ordre d'script Let's Encrypt per obtenir un certificat SSL. Aneu al directori d'instal·lació de Let's Encrypt des de /usr/local/letsencrypt i executeu l'ordre letsencrypt-auto proporcionant l'opció --apache i l'opció -d marca per a cada subdomini que necessiteu un certificat.

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

8. Proporcioneu l'adreça de correu electrònic que utilitzarà Let's Encrypt per recuperar la clau perduda o per als avisos urgents i premeu Intro per continuar.

9. Accepteu els termes de la llicència prement la tecla Enter.

10. A CentOS/RHEL, per defecte, el servidor Apache no utilitza el concepte de separació de directoris per a amfitrions habilitats dels amfitrions disponibles (inactius) com ho fa la distribució basada en Debian.

A més, l'allotjament virtual està desactivat per defecte. La declaració d'Apache que especifica el nom del servidor (ServerName) no està present al fitxer de configuració SSL.

Per activar aquesta directiva, Let's Encrypt us demanarà que seleccioneu un host virtual. Com que no troba cap Vhost disponible, seleccioneu el fitxer ssl.conf perquè el client Let's Encrypt el modifiqui automàticament i premeu Intro per continuar.

11. A continuació, trieu el mètode fàcil per a les sol·licituds HTTP i premeu Intro per avançar.

12. Finalment, si tot ha anat bé, s'hauria de mostrar un missatge de felicitació a la pantalla. Premeu Intro per alliberar la sol·licitud.

Això és! Heu emès correctament un certificat SSL/TLS per al vostre domini. Ara podeu començar a navegar pel vostre lloc web mitjançant el protocol HTTPS.

Pas 4: proveu gratuïtament Xifrem el xifratge al domini

13. Per provar la rectitud de l'enllaç SSL/TLS del vostre domini, visiteu l'enllaç següent i proveu el vostre certificat al vostre domini.

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

14. Si rebeu una sèrie d'informes sobre la vulnerabilitat del vostre domini a les proves realitzades, haureu de solucionar aquests forats de seguretat amb urgència.

Una qualificació general de classe C fa que el vostre domini sigui molt insegur. Per solucionar aquests problemes de seguretat, obriu el fitxer de configuració d'Apache SSL i feu els canvis següents:

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

Cerqueu la línia amb la instrucció SSLProtocol i afegiu -SSLv3 al final de la línia.

Aprofundeix en el fitxer, cerca i comenta la línia amb SSLCipherSuite col·locant un # al davant i afegeix el contingut següent sota aquesta línia:

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. Després d'haver fet tots els canvis anteriors, deseu i tanqueu el fitxer i, a continuació, reinicieu el dimoni Apache per aplicar els canvis.

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

16. Ara, torna a provar l'estat del xifratge del domini, visitant el mateix enllaç que l'anterior. Per realitzar noves proves, feu clic a l'enllaç Esborra la memòria cau del lloc web.

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

Ara hauríeu d'obtenir una qualificació general de classe A, la qual cosa significa que el vostre domini està molt segur.

Pas 4: Renovació automàtica Xifrem certificats a Apache

17. Aquesta versió beta del programari Let's Encrypt publica certificats amb data de caducitat després de 90 dies. Per tant, per renovar el certificat SSL, heu d'executar de nou l'ordre letsencrypt-auto abans de la data de caducitat, amb les mateixes opcions i senyaladors utilitzats per obtenir el certificat inicial.

A continuació es presenta un exemple de com renovar manualment el certificat.

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

18. Per automatitzar aquest procés, creeu el següent script bash proporcionat per github erikaheidi, al directori /usr/local/bin/ amb el contingut següent. (l'script està lleugerament modificat per reflectir el nostre directori d'instal·lació de letsencrypt).

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

Afegiu el contingut següent al fitxer 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. Concediu els permisos d'execució de l'script, instal·leu el paquet bc i executeu l'script per provar-lo. Utilitzeu el vostre nom de domini com a paràmetre de posició per a l'script. Emet les ordres següents per dur a terme aquest pas:

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

20. Finalment, utilitzant la programació de Linux, afegiu un nou treball cron per executar l'script cada dos mesos, assegurant-vos que el vostre certificat s'actualitzarà abans de la data de caducitat.

# crontab -e

Afegiu la línia següent a la part inferior del fitxer.

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

Això és! El vostre servidor Apache que s'executa sobre el sistema CentOS/RHEL ara ofereix contingut SSL mitjançant un certificat SSL gratuït de Let's Encrypt.