Laboratorio
Básico
cableando
HTTPS gratis con Let’s Encrypt

HTTPS gratis con Let’s Encrypt

Básico

Los pasos marcados en azul cambian según tu sistema.

Una web sin HTTPS viaja en claro: cualquiera en medio —la wifi de la cafetería, tu operador, quien controle un router por el camino— puede leer lo que se envía o incluso modificarlo. Hasta hace unos años, cifrarla costaba dinero. Let’s Encrypt, una autoridad de certificación sin ánimo de lucro, lo cambió: hoy cualquiera puede tener un certificado válido, gratis y renovado automáticamente. El cifrado no debería ser un lujo, y ya no lo es.

En este tutorial usarás Certbot, la herramienta que habla con Let’s Encrypt, para conseguir un certificado para tu sitio en Nginx, activar HTTPS y dejar la renovación en piloto automático.

Lo que necesitas

  • Nginx funcionando, con un bloque de configuración para tu dominio. Si aún no lo tienes, sigue tu servidor web con Nginx.
  • Un dominio (aquí, ejemplo.org y www.ejemplo.org) con sus registros DNS apuntando a la IP de tu servidor. Let’s Encrypt comprobará que el dominio es tuyo conectándose a él, así que tiene que resolver ya a tu máquina.
  • El puerto 80 abierto: la comprobación se hace por HTTP.

Paso 1: instalar Certbot

Ubuntu

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

Debian

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

AlmaLinux / Rocky

Certbot está en EPEL, el repositorio de paquetes extra para la familia Red Hat:

sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx

El segundo paquete es el complemento para Nginx: permite a Certbot editar tu configuración por ti para instalar el certificado.

Paso 2: comprobar el nombre del sitio

Certbot encuentra qué bloque de Nginx corresponde a tu dominio buscando la línea server_name. Asegúrate de que está y de que incluye todos los nombres para los que quieres certificado:

Ubuntu

grep server_name /etc/nginx/sites-available/ejemplo.org

Debian

grep server_name /etc/nginx/sites-available/ejemplo.org

AlmaLinux / Rocky

grep server_name /etc/nginx/conf.d/ejemplo.org.conf
    server_name ejemplo.org www.ejemplo.org;

Si has tenido que cambiar algo, comprueba la configuración y recarga: sudo nginx -t && sudo systemctl reload nginx.

Paso 3: abrir HTTPS en el cortafuegos

Ubuntu

Cambia el perfil de solo HTTP por el que abre los dos puertos:

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

Debian

Cambia el perfil de solo HTTP por el que abre los dos puertos:

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

AlmaLinux / Rocky

sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

No cierres el puerto 80: lo necesitan las renovaciones y la redirección de las visitas que lleguen por HTTP.

Paso 4: pedir el certificado

Con un solo comando, Certbot pide el certificado, demuestra a Let’s Encrypt que controlas el dominio, lo instala en Nginx y activa la redirección de HTTP a HTTPS:

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

La primera vez te hará un par de preguntas: una dirección de correo para recuperar tu cuenta si hiciera falta (es opcional) y la aceptación de las condiciones de uso. Después:

Requesting a certificate for ejemplo.org and www.ejemplo.org

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/ejemplo.org/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/ejemplo.org/privkey.pem
This certificate expires on 2027-01-16.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for ejemplo.org to /etc/nginx/sites-enabled/ejemplo.org
Successfully deployed certificate for www.ejemplo.org to /etc/nginx/sites-enabled/ejemplo.org
Congratulations! You have successfully enabled HTTPS on https://ejemplo.org and https://www.ejemplo.org

Abre https://ejemplo.org: verás el candado. Y si entras por http://, te llevará solo a la versión cifrada.

Si quieres ver qué ha tocado Certbot, abre de nuevo tu bloque de configuración: verás líneas nuevas marcadas con # managed by Certbot.

Paso 5: que se renueve solo

Los certificados de Let’s Encrypt duran 90 días. Es a propósito: obliga a automatizar la renovación, y un certificado robado sirve durante poco tiempo. Además, Let’s Encrypt ya no envía avisos de caducidad por correo, así que la renovación automática no es opcional.

Ubuntu

El paquete de Certbot instala un temporizador de systemd que intenta renovar dos veces al día (solo renueva cuando faltan menos de 30 días). Compruébalo:

systemctl list-timers certbot.timer

Debian

El paquete de Certbot instala un temporizador de systemd que intenta renovar dos veces al día (solo renueva cuando faltan menos de 30 días). Compruébalo:

systemctl list-timers certbot.timer

AlmaLinux / Rocky

En AlmaLinux y Rocky, el temporizador de renovación viene instalado pero apagado. Actívalo:

sudo systemctl enable --now certbot-renew.timer
systemctl list-timers certbot-renew.timer

Y haz un simulacro para asegurarte de que la renovación funcionará cuando llegue el momento:

sudo certbot renew --dry-run
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/ejemplo.org/fullchain.pem (success)

Si el simulacro sale bien, no tendrás que volver a pensar en el certificado.

Si algo falla

  • El dominio no resuelve a tu servidor. Let’s Encrypt no puede comprobar que es tuyo. Mira con dig +short ejemplo.org que devuelve la IP de tu servidor (los cambios de DNS pueden tardar un rato en propagarse).
  • El puerto 80 está cerrado en tu cortafuegos o en el de tu proveedor. La comprobación necesita llegar por HTTP.
  • Demasiados intentos. Let’s Encrypt limita cuántos certificados puedes pedir para un mismo dominio en una semana. Mientras pruebas, añade --dry-run a tus comandos: usa el entorno de pruebas, que no cuenta para esos límites.
  • Quieres un certificado para todos los subdominios (*.ejemplo.org). Los certificados comodín no se pueden validar por HTTP, sino creando un registro en el DNS del dominio. Certbot lo permite con --manual --preferred-challenges dns, aunque para renovarlos solos necesitarás el complemento de tu proveedor de DNS.

Un paso más: HSTS

Con HTTPS funcionando, puedes pedir a los navegadores que no vuelvan a intentar entrar en tu sitio sin cifrar. Se hace con la cabecera HSTS, dentro del bloque server que escucha en el 443:

/etc/nginx/sites-available/ejemplo.org

    add_header Strict-Transport-Security "max-age=31536000" always;

Ojo: durante el tiempo indicado (aquí, un año), los navegadores que hayan visitado tu web se negarán a abrirla sin HTTPS. Actívala solo cuando tengas claro que el sitio va a seguir con su certificado.

Hecho

Tu web ya viaja cifrada, con un certificado que se renueva solo y sin pagar a nadie por ello. Repite el paso 4 para cada dominio que sirvas, y que ninguna web tuya vuelva a ir en claro.

X LinkedIn
¿Te ha resultado útil?

Sigue leyendo

Tu servidor web con Nginx

Tutorial / Sistemas

Tu servidor web con Nginx

Publica tu web desde tu propio servidor: instala Nginx, abre el cortafuegos, crea tu primer sitio con dominio y úsalo de puerta a tus apps.

/7 min

Primeros pasos con un servidor Linux

Tutorial / Sistemas

Primeros pasos con un servidor Linux

Diez minutos que te ahorran disgustos: actualizar, crear tu usuario, activar el cortafuegos y preparar SSH en Ubuntu, Debian o AlmaLinux.

/7 min

SSH a fondo: claves, servidor y túneles

Tutorial / Sistemas

SSH a fondo: claves, servidor y túneles

Entra en tus servidores sin contraseñas, blinda sshd en unas pocas líneas y usa túneles para llegar a lo que no quieres exponer.

/16 min