En este tutorial te vamos a explicar cómo configurar un certificado TSL/SSL de Let's Encrypt en un servidor con Ubuntu 16.04 que ejecuta Apache como servidor web. También te vamos a enseñar cómo automatizar el proceso de renovación de los certificados usando cron.
Cliente obsoleto
Este artículo utiliza el cliente de Let's Encrypt y actualmente se encuentra obsoleto, es recomendable utilizar o actualizar la configuración por el cliente ACME Certbot. Tienes más información en el artículo Cómo adquirir certificados Let's Encrypt con Certbot.
Los certificados SSL se utilizan en servidores web para cifrar el tráfico entre el servidor y el cliente, proporcionando mayor seguridad a los usuarios que acceden a tu web. Let´s Encrypt proporciona una manera fácil de obtener e instalar certificados de confianza de forma gratuita.
Requisitos necesarios para realizar este tutorial
- Tener un servidor Ubuntu 16.04 con acceso a un usuario sudo
- Servidor Apache configurado con vhosts
Instalación del cliente de Let's Encrypt
Primero tienes que descargar e instalar el cliente de Let's Encrypt desde los repositorios oficiales.
Aviso
Los repositorios de Clouding ya tienen el paquete que vamos a instalar
Actualiza los repositorios e instala el paquete con apt:
$ sudo apt-get update
$ sudo apt-get install python-letsencrypt-apache
Una vez finalizada su instalación, podrás ejecutar el comando letsencrypt.
Configurar el Certificado TSL/SSL
Generar el certificado SSL para Apache utilizando Let's Encrypt es bastante sencillo. Obtendrás e instalarás automáticamente un nuevo certificado SSL válido para los dominios proporcionados como parámetros.
Si quieres añadir un certificado SSL a un dominio específico debes ejecutar el siguiente comando:
$ sudo letsencrypt --apache -d dominio.com
Si deseas instalar un único certificado para varios dominios o subdominios puedes pasarlos por parámetros adicionales. El primer dominio en la lista será el dominio base utilizado por Let's Encrypt para crear el certificado, mientras que el resto de nombres de dominio serán subdominios o alias.
$ sudo letsencrypt --apache -d dominio.com -d www.dominio.com -d webmail.dominio.com
La primera vez que ejecutes este comando se te presentará una guía paso a paso para crear el certificado. Se te pedirá que proporciones una dirección de correo electrónico para la recuperación de claves perdidas y avisos, y podrás elegir entre habilitar el acceso HTTP y HTTPS (Easy) o forzar todas las solicitudes a redirigir a HTTPS (Secure).
Cuando la instalación del certificado SSL finalice, deberías encontrar los archivos de certificados generados en la siguiente ruta /etc/letsencrypt/live. Además, puedes verificar el estado del certificado SSL con el siguiente enlace (sustituyendo dominio.com por su dominio base).
https://www.ssllabs.com/ssltest/analyze.html?d=dominio.com&latest
Configurar auto renovación
Los certificados de Let's Encrypt son válidos por 90 días y se recomienda renovar los certificados cada 60 días para permitir un margen de error. El cliente de Let's Encrypt tiene un comando de renovación que comprueba automáticamente los certificados instalados e intenta renovarlos si tienen menos de 30 días de la fecha de caducidad. Para no tener que estar atento cada 60 días de la renovación de los certificados este proceso se puede automatizar con cron jobs.
El comando para renovar todos los certificados instalados en el Servidor es el siguiente:
$ sudo letsencrypt renew
Si ejecutas el comando una vez has creado los certificados obtendrás una salida como ésta:
Hay que tener en cuenta que si se ha creado un certificado donde se incluyen varios subdominios, sólo se mostrará el nombre del dominio base en la salida, pero la renovación debe ser válida para todos los dominios incluidos en este certificado. Una manera sencilla de garantizar que los certificados no caduquen es crear un trabajo en cron para que periódicamente ejecute el comando de renovación de forma automática.
El comando de renovación comprueba primero la fecha de vencimiento y sólo ejecuta la renovación si el certificado tiene menos de 30 días de expiración. Por lo tanto, es buena idea añadir este comando en cron para que se ejecute cada semana o incluso todos los días.
Para ello lo que haremos será crear un script para que cron lo ejecute:
$ sudo vi /root/letsencrypt-renewal.sh
Dentro de este fichero nuevo tendremos que añadir las siguientes líneas:
#!/bin/bash
# Clouding.io
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
log="/var/log/le-renew.log"
echo "" >> $log
/bin/date >> $log
echo "---------------------------------------------" >> $log
/usr/bin/letsencrypt renew >> $log
Guardamos el fichero y abrimos cron con el siguiente comando:
$ sudo crontab -e
Y añade la siguiente línea al final del documento:
30 2 * * 1 /root/letsencrypt-renewal.sh
Por último, guarda y sal del editor. Con esta línea que has añadido, comprobarás cada lunes a las 2:30 a.m. si los certificados tienen menos de 30 días de expiración. Adicionalmente, se creará un registro en /var/log/le-renew.log.
Conclusión
Con este sencillo proceso ya tienes tu dominio con SSL. Ahora sólo faltaría comprobar mediante un navegador que cuando se accede al dominio, utiliza el protocolo HTTPS.