Certificados Let’s Encrypt en VPS Debian

¡Hola Nómadas! Vamos a ver como configurar un servidor web con certificado propio generado por Let’s Encrypt.

¿Qué es Let’s Encrypt?

Let’s Encrypt es una autoridad de certificación que se puso en marcha el 12 de abril de 2016 y que proporciona certificados X.509. Estos certificados entre otras cosas se utilizan para el cifrado de seguridad de nivel de transporte o TLS. Además, para la generación de los certificados X.509 se utiliza un proceso muy simple que elimina la complejidad actual de creación manual, validación, firma, instalación y renovación de los certificados para sitios web seguros.

El proyecto tiene como objetivo hacer las conexiones WWW estén cifradas, eliminar el pago, la configuración del servidor web, gestión de correo electrónico de validación y las tareas de renovación del certificado, que está destinado a reducir significativamente la complejidad de la configuración y el mantenimiento de cifrado TLS. En un servidor web Linux, la ejecución de dos comandos es suficiente para configurar el cifrado HTTPS y adquirir e instalar certificados en el plazo de 20 a 30 segundos.

Instalación y uso de LE

Let’s Encrypt (LE) ofrece un proceso sencillo para generar un certificado X.509. Pero para generar un certificado, LE debe comprobar o certificar que el dominio es de tu propiedad. Pues de lo contrario se podrían generar certificados para Google inc. Por ejemplo.

La validación del dominio se realiza en dos pasos:

El agente, instalado en el servidor web, se identifica contra los servidores de LE indicando cual es el dominio a validar. Los servidores de LE indican la ruta dentro de la web donde se debe de crear un fichero temporal. El agente genera tal fichero y lo firma digitalmente con su clave privada, finalmente notifica a LE que está listo para la validación final.

Let's Encrypt Fase I para generar certificado

Seguido a esto es el turno de LE validar si realmente se ha creado el fichero y éste está firmado. Realmente lo que hace es descargarlo y comprobar que el contenido es el esperado.

Te puede interesar  Bastionado SSH

Let's Encrypt fase II de la generación de certificados

Para finalizar, el agente genera una solicitud de firma de certificado o CSR con la que LE genera un certificado para el dominio solicitado. Además, se realizan algunas validaciones adicionales para que LE pueda asegurar que el certificado es correcto y se ha emitido correctamente.

Let's Encrypt fase III para la generación de certificados

Como se ha podido apreciar el proceso es complejo, pues imaginaros que si este es el proceso simplificado, como será el proceso manual y complicado que intenta evitar Let’s Encrypt.

Instalando Certbot

Certbot es la utilidad creada por Let’s Encrypt para facilitar el proceso descrito anteriormente. Certbot es en realidad una aplicación programada en Python y que nos proviene de ciertos comandos para poder generar certificados de manera muy sencilla.

 

Let's Encrypt fase IV de la generación de certificados

Desde la web de Certbot (https://certbot.eff.org/) nos ayudan a configurar el bot y integrarlo así en nuestros sistemas.

Nosotros vamos a utilizar la siguiente configuración:

  • Servidor web: Apache
  • Sistema operativo: Debian

Existen configuraciones para distintos sistemas operativos y los servidores más utilizados. También existe una opción para configurar el certbot de forma manual, así que se puede adatar para casi cualquier combinación.

Instalando Certbot

La instalación es bastante sencilla, pero requiere de una fuente de instalación adicional que no suele estar configurada en Debian. La fuente es la de jessie-backports y para instalarla es tan sencillo como editar el fichero /etc/apt/sources.list como usuario privilegiado o root. Hay que situarse al final del fichero y añadir la siguiente línea:

deb http://ftp.debian.org/debian jessie-backports main

Si no sabes como editar el fichero puedes utilizar el siguiente:

Ahora tenemos que actualizar el repositorio de paquetería con el comando apt-get update como root.

Para finalmente instalar certbot tenemos que ejecutar como administrador el comando: apt-get install python-certbot-apache -t jessie-backports y esto nos producirá una salida algo parecida a esta:

Ejecutando apt-get

Lo que deberemos hacer es decir que si queremos instalar todos esos paquetes.

Cuando termine tenemos la instalación completa.

Obteniendo el certificado

Esta parte es donde obtendremos los certificados Let’s Encrypt. Aquí veremos la ventaja de utilizar certbot. El proceso será ejecutar un comando y certbot nos preguntará una serie de parámetros para configurar tanto la emisión del certificado como el propio servidor Apache.

Te puede interesar  Instalar y configurar Wordfence

El comando que debemos ejecutar como root es: certbot –authenticator webroot –installer apache

Nada más ejecutar el comando certbot nos hará una serie de preguntas. Os enseñamos como las hemos respondido nosotros.

Primero se nos pregunta por el dominio y subdominios que queremos registrar en el certificado. Nosotros hemos seleccionado cibernomadas.es y www.cibernomadas.es. También indicamos un correo electrónico para terminar con el registro inicial.

Configurando certbot

Lo siguiente a realizar es aceptar los términos y condiciones de uso.

Aceptando Términos y condiciones Let's Encrypt

El siguiente paso es indicar a certbot donde tenemos alojada nuestra web. Nosotros hemos indicado /var/www/cibernomadas.es

Configurando el webroot

Después de indicar donde está desplegada la web se lo indicamos a certbot y éste empezará el proceso que hemos explicado al inicio del post.

Indicando el webroot al certbot

Como se puede ver en la imagen superior el proceso de generación del certificado es muy sencillo. Además, certbot habilita módulos ssl de apache y configura mínimamente el servidor web.

El siguiente paso para certbot es actualizar la configuración del servidor Apache para utilizar los certificados recién generados.

Configuración a desplegar

En nuestro caso, para el servidor con el que estamos haciendo las pruebas no tenemos el ServerName configurado. En este caso certbot no sabe cual de las configuraciones disponibles es la correcta y por eso nos pregunta. Nosotros hemos elegido la tercera opción que es la opción sugerida por Let’s Encrypt.

El último paso es elegir como queremos servir la página web. Podemos elegir entre servir tanto la versión segura con HTTPS o la versión HTTP. Nosotros hemos elegido la segunda opción. Esta opción redirige los accesos por HTTP a HTTPS.

Acceso HTTP o HTTPS con redirección

Y con esto tenemos lista la configuración y generación de certificados.

Nota: Recomendamos revisar toda la configuración del servidor Apache para evitar modificaciones erróneas.

Quedaría reiniciar el servidor web Apache para utilizar la nueva configuración. Con un usuario administrador o root se puede ejecutar apachectl -k restart o systemctl restart apache dependiendo de la versión de Debian.

Accediendo a la web ahora deberíamos de poder ver un bonito certificado como este:

Certificado Let's Encrypt

Actualización automática del certificado

Los certificados generados por Let’s Ecrypt tiene una peculiaridad y es que caducan cada 90 días. Esta limitación no sería un problema si un certificado caducado no “asustara” a los usuarios. Un certificado no valido hace que el navegador muestre mensajes alarmantes al usuario.

Te puede interesar  Bastionado de Wordpress Paso a Paso

Certificado erróneo

Así que deberemos renovar el certificado de forma habitual y constante. Pero esto puede convertirse en una tarea muy pesada, así que lo mejor sería automatizar el proceso de renovación.

Desde la web de Let’s Encrypt nos indican que para renovar el certificado de forma automática debemos ejecutar el comando certbot renew. Podemos probar a ver el resultado añadiendo el parámetro –dry-run

Actualizar certificado

Nosotros hemos ejecutado el comando y vemos que nuestro certificado aún no está listo para ser renovado.

Automatizando la renovación

Como hemos comentado antes, realizar esta tarea todos los días es muy tedioso y más aún acordarse dentro de 90 días. Así que lo mejor es automatizar el proceso. Esto lo haremos a través de una tarea Cron.

Cron nos permite ejecutar comando de forma programada. La programación Cron es algo ardua si no se ha trabajado antes. Para facilitar la configuración de Cron podéis a https://crontab.guru/ donde se nos permite probar una configuración y ver que es correcta.

Nosotros configuramos Cron para que ejecute la comprobación cada hora. Para configurar Cron podemos hacerlo de dos modos.

De forma global

La manera global es editando Cron con el comando crontab -e. Esto nos abre una sesión con el editor de texto predefinido en el sistema. En esta sesión debemos de escribir en la última línea la siguiente instrucción:

0 */1 * * * /usr/bin/certbot renew

Guardamos los cambios y ya estaría todo configurado.

De forma especifica

Esta forma es más sencilla, pues no requiere de modificar ficheros (a priori). Lo que vamos hacer es crear un fichero en el directorio /etc/cron.hourly con el siguiente contenido:

/usr/bin/certbot renew

Para insertar el contenido podemos utilizar un editor de texto o podemos utilizar una combinación de comandos:

Con ese comando tendríamos configurado Cron para realizar las comprobaciones necesarias cada hora.

Esto Nómadas es todo lo que necesitamos para configurar Let’s Encrypt en una Debian con Apache.

Certificados Let’s Encrypt en VPS Debian
Etiquetado en:                     

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *