Búsqueda de sitios web

Cómo instalar el certificado SSL Let's Encrypt para proteger Apache en RHEL/CentOS 7/6


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

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

Configure Let's Encrypt para proteger Apache en Debian y Ubuntu

Entorno de muestra de prueba

Requisitos

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

Paso 1: instalar 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 el certificado SSL Let's Encrypt

4. El método más sencillo para instalar el cliente Let's Encrypt es clonar el repositorio github en su sistema de archivos. Para instalar git en tu sistema debes habilitar los repositorios de Epel con el siguiente comando.

yum install epel-release

5. Una vez que se agreguen 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 poder manejar Let's Encrypt, vaya al directorio /usr/local/ y comience a extraer el formulario del cliente Let's Encrypt. su repositorio oficial de github con el siguiente comando:

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

Paso 3: Obtenga un certificado SSL Let's Encrypt gratuito 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 -d marca para cada subdominio que necesita 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 Intro.

10. En CentOS/RHEL, de forma predeterminada, el servidor Apache no utiliza el concepto de separar directorios para hosts habilitados de hosts disponibles (inactivos) como Debian. fuerte> distribución basada en hacerlo.

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 que el cliente Let's Encrypt lo modifique automáticamente y presione Entrar para continuar.

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

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

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

Paso 4: Pruebe gratis Let's Encrypt Encryption en el dominio

13. Para probar la exactitud del protocolo de enlace SSL/TLS de su dominio, visite el siguiente enlace 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 de Apache SSL y realice los siguientes cambios:

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

Busque la línea con la declaració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, prueba nuevamente el estado del cifrado de tu dominio visitando el mismo enlace que el 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 seguro.

Paso 4: Renovación automática de certificados Let's Encrypt 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 utilizadas para obtener el certificado inicial.

A continuación se presenta un ejemplo de 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 se modifica ligeramente 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, asegurando 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 todo! Su servidor Apache que se ejecuta sobre el sistema CentOS/RHEL ahora ofrece contenido SSL utilizando un certificado SSL Let's Encrypt gratuito.