Certificado SSL gratis para tu web: alojar un sitio con Nginx y Let's Encrypt (Certbot) en Linux

13 min de lectura 6 vistas 0
Contenido

Toda web pública debería servirse por HTTPS, y un certificado SSL gratis de Let's Encrypt lo pone fácil. Esta guía muestra cómo alojar una web en un servidor cloud o dedicado de JUSTG con Nginx, emitir un certificado de Let's Encrypt con certbot, comprobar que la renovación automática funciona y forzar HTTPS. Los comandos se dan para Debian/Ubuntu y para CentOS/Rocky Linux/AlmaLinux. El dominio de ejemplo es example.com y la IP del servidor 203.0.113.10; sustitúyelos por los tuyos.

Paso 1: Apunta el dominio a tu servidor JUSTG (registros A y AAAA)

En tu registrador o proveedor DNS, crea un registro A para el dominio raíz y para www apuntando a la IPv4 del servidor. Los servidores cloud de JUSTG también incluyen IPv6 gratis; añade un registro AAAA solo si el IPv6 está configurado en el servidor y Nginx escucha en él. Espera a que los registros resuelvan antes de pedir el certificado, porque Let's Encrypt valida el dominio desde Internet.

# A    example.com       -> 203.0.113.10
# A    www.example.com   -> 203.0.113.10
# AAAA example.com       -> 2001:db8::10   (optional, only if IPv6 is configured)

# check from the server (Debian/Ubuntu: apt install -y dnsutils, Rocky: dnf install -y bind-utils)
dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA

Paso 2: Instala Nginx y certbot en Debian o Ubuntu

El plugin de Nginx de certbot puede editar la configuración de Nginx por ti. Instálalo todo desde los repositorios estándar:

apt update
apt install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
ufw allow 'Nginx Full'     # if UFW is enabled

Paso 3: Instala Nginx y certbot en Rocky Linux, AlmaLinux o CentOS

En sistemas basados en RHEL, certbot viene del repositorio EPEL. Abre también HTTP y HTTPS en firewalld:

dnf install -y epel-release
dnf install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload

Paso 4: Crea la web y su bloque server de Nginx

Crea una raíz de documentos con una página de prueba. En sistemas con SELinux, restorecon garantiza que Nginx pueda leer los archivos.

mkdir -p /var/www/example.com
echo '<h1>example.com is online</h1>' > /var/www/example.com/index.html
restorecon -Rv /var/www/example.com    # Rocky/Alma/CentOS with SELinux only

Después añade un bloque server para el dominio:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Guárdalo en la ubicación que corresponda a tu distribución, comprueba la sintaxis y recarga Nginx:

# Debian / Ubuntu: save as /etc/nginx/sites-available/example.com, then
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# CentOS / Rocky / AlmaLinux: save as /etc/nginx/conf.d/example.com.conf

nginx -t && systemctl reload nginx
curl -I http://example.com

Si curl -I devuelve 200 OK, la web responde por HTTP y ya puedes pedir el certificado.

Paso 5: Obtén un certificado SSL gratis de Let's Encrypt con certbot --nginx

Ejecuta certbot con todos los nombres de dominio que debe cubrir el certificado. La primera vez pide un correo para los avisos de caducidad y que aceptes las condiciones de Let's Encrypt. La opción --redirect añade una redirección automática de HTTP a HTTPS.

certbot --nginx -d example.com -d www.example.com --redirect

certbot demuestra el control del dominio mediante un archivo temporal servido por Nginx, instala el certificado en tu bloque server y recarga Nginx.

Paso 6: Comprueba que la renovación automática funciona

Los certificados de Let's Encrypt duran poco, así que la renovación debe ser automática. Una prueba en seco revisa todo el proceso sin tocar el certificado real:

certbot renew --dry-run

# Debian / Ubuntu: the timer is enabled by the package
systemctl list-timers | grep certbot

# Rocky / AlmaLinux (EPEL): enable the renewal timer once
systemctl enable --now certbot-renew.timer

Si la prueba termina con éxito y el temporizador está activo, no hace falta nada más.

Paso 7: Fuerza HTTPS y verifica el resultado

Si no usaste --redirect, puedes forzar HTTPS tú mismo sustituyendo el bloque del puerto 80 por una redirección y conservando el bloque HTTPS que creó certbot:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Recarga Nginx y verifica:

curl -I http://example.com      # expect 301 to https://
curl -I https://example.com     # expect 200
certbot certificates

Alternativa: SSL con un clic en aaPanel

Si tu servidor usa aaPanel, puedes saltarte los pasos manuales. Añade el sitio en Website, abre su configuración, ve a la sección SSL, elige Let's Encrypt, marca los nombres de dominio y aplica. Después activa el interruptor Force HTTPS. aaPanel renueva el certificado automáticamente. Los registros DNS del paso 1 siguen siendo necesarios.

Preguntas frecuentes

certbot falla con un error de conexión o de tiempo de espera. ¿Qué reviso?

Comprueba que los registros A y AAAA apuntan a este servidor, que los puertos 80 y 443 están abiertos en UFW o firewalld y que Nginx está en marcha. Un registro AAAA erróneo es una causa habitual, porque la validación puede usar IPv6.

¿Puedo usar un solo certificado para varios dominios?

Sí. Añade más opciones -d al comando de certbot; cada nombre debe resolver al servidor.

¿Tengo que reiniciar Nginx tras la renovación?

No. El plugin de Nginx de certbot recarga Nginx automáticamente después de una renovación correcta.

Si aún no consigues resolverlo, abre un ticket para contactar con el soporte técnico de JUSTG.

¿Fue útil la respuesta?