Cómo instalar permite cifrar el certificado SSL para proteger Apache en RHEL/CentOS 7/6


Ampliando el último tutorial de Let's Encrypt sobre certificados gratuitos SSL/TLS, en este artículo vamos a demostrar cómo obtener e instalar certificados SSL/TLS gratuitos emitidos por Let's Encrypt Certificate Authority para el servidor web Apache en CentOS/RHEL 7/6 y Fedora distribuciones también.

Si está buscando instalar Let's Encrypt para Apache en Debian y Ubuntu, siga esta guía a continuación:

  1. Un nombre de dominio registrado con registros A válidos que apunten a la dirección IP pública de su servidor.
  2. Servidor Apache instalado con el módulo SSL habilitado y el alojamiento virtual habilitado en caso de que esté hospedando varios dominios o subdominios.

Paso 1: Instale el servidor web Apache

1. Si aún no está instalado, el demonio httpd se puede instalar emitiendo el siguiente comando:

# yum install httpd

2. Para que el software Let's encrypt funcione con Apache, asegúrese de que el módulo SSL/TLS esté instalado emitiendo el siguiente comando:

# yum -y install mod_ssl

3. Finalmente, inicie el servidor Apache con el siguiente comando:

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

Paso 2: Instale Let's Encrypt SSL Certificate

4. El método más simple de instalar el cliente Let’s Encrypt es clonando el repositorio de github en su sistema de archivos. Para instalar git en su sistema, debe habilitar los repositorios de Epel con el siguiente comando.

# yum install epel-release

5. Una vez que se agregan los repositorios de Epel en su sistema, continúe e instale el cliente git ejecutando el siguiente comando:

# yum install git

6. Ahora, una vez que haya instalado todas las dependencias necesarias para tratar con Let's Encrypt, vaya al directorio /usr/local/ y comience a extraer el cliente Let's Encrypt de su repositorio oficial de github con lo siguiente mando:

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

Paso 3: Obtenga un certificado SSL gratuito Let's Encrypt para Apache

7. El proceso de obtención de un Certificado Let's Encrypt gratuito para Apache está automatizado para CentOS/RHEL gracias al complemento de apache.

Ejecutemos el comando de script Let's Encrypt para obtener un certificado SSL. Vaya al directorio de instalación de Let's Encrypt desde /usr/local/letsencrypt y ejecute el comando letsencrypt-auto proporcionando la opción --apache y la opción < código> -d marca para cada subdominio que necesite un certificado.

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

8. Proporcione la dirección de correo electrónico que utilizará Let's Encrypt para recuperar su clave perdida o para avisos urgentes y presione Entrar para continuar.

9. Acepte los términos de la licencia presionando la tecla Enter.

10. En CentOS/RHEL, por defecto, el servidor Apache no usa el concepto de separar directorios para hosts habilitados de hosts disponibles (inactivos) como lo hace la distribución basada en Debian.

Además, el alojamiento virtual está deshabilitado de forma predeterminada. La declaración de Apache que especifica el nombre del servidor (ServerName) no está presente en el archivo de configuración SSL.

Para activar esta directiva, Let's Encrypt le pedirá que seleccione un host virtual. Debido a que no encuentra ningún Vhost disponible, seleccione el archivo ssl.conf para ser modificado automáticamente por el cliente Let's Encrypt y presione Enter para continuar.

11. A continuación, elija el método Fácil para solicitudes HTTP y presione Entrar para avanzar.

12. Por último, si todo salió bien, debería aparecer un mensaje de felicitación en la pantalla. Presione Entrar para liberar el mensaje.

¡Eso es! Ha emitido correctamente un certificado SSL/TLS para su dominio. Ahora puede comenzar a navegar por su sitio web utilizando el protocolo HTTPS.

Paso 4: Pruebe el cifrado gratuito Let's Encrypt en el dominio

13. Para probar la rectitud del protocolo de enlace SSL/TLS de su dominio, visite el enlace a continuación y pruebe su certificado en su dominio.

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

14. Si recibe una serie de informes sobre la vulnerabilidad de su dominio en las pruebas realizadas, entonces necesita reparar esos agujeros de seguridad con urgencia.

Una calificación general de clase C hace que su dominio sea muy inseguro. Para solucionar estos problemas de seguridad, abra el archivo de configuración Apache SSL y realice los siguientes cambios:

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

Busque la línea con la instrucción SSLProtocol y agregue -SSLv3 al final de la línea.

Profundice en el archivo, busque y comente la línea con SSLCipherSuite colocando un # delante y agregue el siguiente contenido debajo de esta línea:

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. Después de haber realizado todos los cambios anteriores, guarde y cierre el archivo, luego reinicie el demonio Apache para aplicar los cambios.

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

16. Ahora, vuelva a probar el estado del cifrado de su dominio, visitando el mismo enlace anterior. Para realizar nuevas pruebas, presione el enlace Borrar caché del sitio web.

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

Ahora debería obtener una calificación general de clase A, lo que significa que su dominio está altamente protegido.

Paso 4: Renovar automáticamente, cifremos los certificados en Apache

17. Esta versión beta del software Let's Encrypt publica certificados con fecha de vencimiento después de 90 días. Entonces, para renovar el certificado SSL, debe ejecutar el comando letsencrypt-auto nuevamente antes de la fecha de vencimiento, con las mismas opciones y banderas que se usaron para obtener el certificado inicial.

A continuación se presenta un ejemplo sobre cómo renovar manualmente el certificado.

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

18. Para automatizar este proceso, cree el siguiente script bash proporcionado por github erikaheidi, en el directorio /usr/local/bin/ con el siguiente contenido. (el script está ligeramente modificado para reflejar nuestro directorio de instalación de letsencrypt).

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

Agregue el siguiente contenido al archivo 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. Otorgue permisos de ejecución para el script, instale el paquete bc y ejecute el script para probarlo. Utilice su nombre de dominio como parámetro posicional para el script. Emita los siguientes comandos para realizar este paso:

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

20. Finalmente, usando la programación de Linux, agregue un nuevo trabajo cron para ejecutar el script cada dos meses, asegurándose de que su certificado se actualizará antes de la fecha de vencimiento.

# crontab -e

Agregue la siguiente línea al final del archivo.

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

¡Eso es! Su servidor Apache que se ejecuta en la parte superior del sistema CentOS/RHEL ahora ofrece contenido SSL mediante un certificado SSL gratuito Let's Encrypt.