🚧Certificados SSL/TLS

Las siglas SSL/TLS significa Secure Sockets Layer (Capa de sockets seguros) /Transport Layer Security (Seguridad en la capa de transporte), se trata de un protocolo de seguridad que crea un enlace cifrado entre un servidor web y un navegador web.

Su funcionamiento es el siguiente:

Proceso de handshake

Los certificados SSL/TLS crean confianza entre los usuarios del sitio web. Las características de una página web protegida son las siguientes:

  • Un ícono de candado y una barra de direcciones verde en el navegador web

  • Un prefijo https en la dirección del sitio web del navegador

  • Un certificado SSL/TLS válido. Puede comprobar si el certificado SSL/TLS es válido haciendo clic y expandiendo el ícono del candado en la barra de direcciones URL

  • Una vez establecida la conexión cifrada, aunque se intercepten, solo el cliente y el servidor web pueden ver los datos que se envían.

Instalación

Usaremos Let's encrypt como software de validación de certificados, ya que es una solución segura, probada y gratutita. Simplifica el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (cuando no todos) de los pasos requeridos.

Para instalar un certificado SSL en Nginx, necesitaremos los siguientes ficheros:

  • Certificado (.crt)

  • Clave privada (.key)

  • Autoridad de certificación (.ca)

Partimos de un servidor web con Ubuntu server 22.04 con nginx versión 1.18 con un servidor web llamado "alexwp.org" tal y como vimos en un tutorial anterior.

1. Instalar Certbot:

Partimos de Certbot, una herramienta de Let's Encrypt que facilita la obtención y renovación de certificados SSL/TLS. Instálala en tu servidor Ubuntu ejecutando los siguientes comandos:

sudo apt update
sudo apt install certbot python3-certbot-nginx

2. Comprobar el server_name y habilitación de HTTPS a través de Firewall

De forma específica, Certbot funciona buscando una directiva server_name que coincida con el dominio para el que está solicitando el certificado. Si hemos seguido el tutorial anterior, deberías poder revisar dentro del archivo de configuración /etc/nginx/sites-available/wpalex.org y busca la linea con server_name.

Asegúrate también, que el servidor web esté detenido antes de ejecutar Certbot, ya que este suele intentar detener y reiniciar el servidor web durante el proceso de obtención del certificado:

sudo systemctl stop nginx

Si tienes configurado el firewall de ufw, deberás ajustar la configuración para permitir el tráfico de HTTPS. Afortunadamente, Nginx registra algunos perfiles con ufw después de la instalación. Puede ver la configuración actual del FW escribiendo lo siguiente:

sudo ufw status

Probablemente tendrá este aspecto, lo cual significa que solo se permite el tráfico de HTTP al servidor web:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Para permitir de forma adicional el tráfico de HTTPS, habilite el perfil de Nginx Full y elimine el permiso de perfil redundante HTTP de Nginx.

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

Ahora, su estado debería tener el siguiente aspecto:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

3. Obtener un Certificado Let's Encrypt:

Ejecuta Certbot para obtener un certificado SSL/TLS. Para que funcione, debe poder encontrar el bloque server{} correcto en su configuración de Nginx para que pueda configurar SSL automáticamente como hemos revisado antes.

sudo certbot --nginx -d alexwp.org -d www.alexwp.org

Reemplaza alexwp.org con el nombre de dominio o la dirección IP de tu servidor. Elparámetro -d para especificar los nombres de dominio para los que queremos que el certificado sea válido.

La primera vez que ejecutas certbot, se te pide ingresar una dirección de correo electrónico y que aceptes las condiciones de servicio.

Si la comprobación se realiza correctamente, certbot le preguntará cómo desea configurar sus ajustes de HTTPS:

Escoge 2., luego aparecerá un mensaje:

4. Verificar la renovación automática de Certbot

Los certificados de Let’s Encrypt son válidos únicamente por noventa días. El propósito de esto es incentivar a los usuarios a automatizar sus procesos de renovación de certificados. El paquete certbot que instalamos se ocupa de esto por nosotros añadiendo un temporizador systemd que se ejecutará dos veces al día y renovará automáticamente cualquier certificado que vaya a vencer en los próximos 30 días.

Puede consultar el estado del temporizador con systemctl:

sudo systemctl status certbot.timer

De esta forma aparecerá:

Output● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
    Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
   Triggers: ● certbot.service

Para probar el proceso de renovación, puede hacer un simulacro con certbot:

sudo certbot renew --dry-run

Si no ve errores, estará listo. Cuando sea necesario, Certbot renovará sus certificados y volverá a cargar Nginx para registrar los cambios. Si el proceso de renovación automática falla, Let’s Encrypt enviará un mensaje a la dirección de correo electrónico que especificó en el que se le advertirá cuándo se aproxime la fecha de vencimiento de sus certificados.

Referencias:

(...)

Última actualización