Ahorre 15% en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código: Skills Comenzar
Secciones
Linux Seguridad

Cómo Asegurar Nginx con Let’s Encrypt SSL en Ubuntu (Guía Completa 2025)

HTTPS ya no es opcional. En 2025, cada sitio web necesita encriptación SSL/TLS — no solo para proteger los datos del usuario, sino para clasificar competitivamente en Google Search y satisfacer los requisitos de seguridad del navegador moderno. Let’s Encrypt lo hace posible de forma gratuita, ofreciendo certificados SSL confiables y de renovación automática que funcionan sin problemas con Nginx en Ubuntu.

Esta guía completa te guía a través de cada paso: instalar Certbot, obtener un certificado SSL de Let’s Encrypt, verificar tu configuración y automatizar renovaciones — todo en un servidor Ubuntu 18.04, 20.04 o 22.04 que ejecuta Nginx.

Ya sea que estés administrando un entorno de VPS Hosting o un servidor web dedicado, este tutorial te proporciona una configuración HTTPS lista para producción en menos de 15 minutos.

Por qué SSL es importante para Nginx en 2025

Antes de profundizar en los comandos, vale la pena entender exactamente qué ganas asegurando Nginx con Let's Encrypt:

  • Cifrado de datos: HTTPS cifra todo el tráfico entre tu servidor y los visitantes, previniendo ataques de intermediarios y escuchas.
  • Señales de clasificación SEO: Google ha confirmado HTTPS como un factor de clasificación. Los sitios sin SSL son penalizados activamente en los resultados de búsqueda.
  • Indicadores de confianza del navegador: Chrome, Firefox y Edge muestran advertencias “No es seguro” para sitios HTTP, destruyendo la confianza del usuario e incrementando las tasas de rebote.
  • Gratuito y automatizado: Let's Encrypt emite certificados sin costo, y Certbot maneja las renovaciones automáticamente — eliminando la sobrecarga manual de certificados pagos.
  • PCI DSS y cumplimiento: Cualquier sitio que maneje pagos o datos personales está legalmente obligado a usar conexiones cifradas.

Si tu dominio ya está registrado y apuntando a tu servidor, estás listo para comenzar. Si aún necesitas un dominio, AlexHost ofrece Registro de Dominios asequible con gestión de DNS instantánea.

Requisitos previos

Asegúrate de que se cumplan las siguientes condiciones antes de continuar:

RequisitoDetalles
Sistema operativoUbuntu 18.04, 20.04 o 22.04 LTS
Servidor webNginx instalado y sirviendo activamente tu sitio
Nombre de dominioUn dominio registrado con un registro A que apunte a la IP pública de tu servidor
Acceso al servidorAcceso SSH con un usuario que tenga privilegios sudo
FirewallPuertos 80 (HTTP) y 443 (HTTPS) abiertos en UFW o iptables
Acceso raízNo es estrictamente requerido, pero el acceso sudo es obligatorio

Verifica que Nginx esté en ejecución

Antes de instalar Certbot, confirma que Nginx esté activo:

sudo systemctl status nginx

Deberías ver active (running) en la salida. Si Nginx no está instalado, ejecuta:

sudo apt update && sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

Abre los puertos del firewall requeridos

Si UFW está habilitado, permite el tráfico HTTP y HTTPS:

sudo ufw allow 'Nginx Full'
sudo ufw reload
sudo ufw status

La salida debe mostrar Nginx Full como ALLOW para IPv4 e IPv6.

Paso 1 — Instalación de Certbot y el complemento Nginx

Certbot es el cliente oficial de Let’s Encrypt. Automatiza todo el ciclo de vida del certificado: emisión, instalación y renovación. El complemento python3-certbot-nginx permite que Certbot lea tu configuración de Nginx y la modifique automáticamente.

Actualiza tu índice de paquetes

Siempre actualiza tus listas de paquetes antes de instalar nuevo software:

sudo apt update
sudo apt upgrade -y

Instala Certbot con el complemento Nginx

sudo apt install certbot python3-certbot-nginx -y

Verifica la instalación

certbot --version

Salida esperada (la versión puede variar):

certbot 2.x.x

> Nota para usuarios de Ubuntu 18.04: Si la versión predeterminada de APT de Certbot está desactualizada, instala a través de Snap para la última versión:

> “`bash

> sudo snap install –classic certbot

> sudo ln -s /snap/bin/certbot /usr/bin/certbot

> “`

Paso 2 — Configurando tu bloque de servidor Nginx

Certbot necesita detectar tu dominio en la configuración de Nginx para modificarlo automáticamente. Si aún no has creado un bloque de servidor para tu dominio, hazlo ahora.

Crear un bloque de servidor

Reemplaza yourdomain.com con tu nombre de dominio real en toda esta guía:

sudo nano /etc/nginx/sites-available/yourdomain.com

Añade la siguiente configuración básica:

server {
    listen 80;
    listen [::]:80;

    server_name yourdomain.com www.yourdomain.com;

    root /var/www/yourdomain.com/html;
    index index.html index.htm index.nginx-debian.html;

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

Habilitar el bloque de servidor

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

Probar la configuración de Nginx

Siempre valida tu configuración de Nginx antes de recargar:

sudo nginx -t

Salida esperada:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Recargar Nginx

sudo systemctl reload nginx

Paso 3 — Obtención de un Certificado SSL de Let's Encrypt

Con Nginx configurado y Certbot instalado, ahora puedes solicitar tu certificado SSL.

Ejecutar Certbot con el Plugin de Nginx

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

Desglose de las banderas:

    --nginx — Le dice a Certbot que use el plugin de Nginx para configuración automática
    -d yourdomain.com — Especifica el dominio principal
    -d www.yourdomain.com — Añade el subdominio www al mismo certificado (Nombre Alternativo del Asunto)
    
    Indicadores Interactivos Explicados
    Certbot te guiará a través de un breve asistente de configuración:
    1. Dirección de Correo Electrónico
    Enter email address (used for urgent renewal and security notices):
    Proporciona un correo electrónico válido. Let's Encrypt lo usa para notificarte sobre certificados que vencen y problemas de seguridad.
    2. Términos de Servicio
    Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf
    (A)gree/(C)ancel:
    Escribe A y presiona Enter.
    3. Boletín de la EFF (Opcional)
    Would you be willing to share your email address with the Electronic Frontier Foundation?
    (Y)es/(N)o:
    Esto es opcional. Escribe N si prefieres no suscribirte.
    4. Redirección de HTTP a HTTPS
    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
    1: No redirect
    2: Redirect - Make all requests redirect to secure HTTPS access
    Siempre elige la opción 2. Esto asegura que todos los visitantes se actualicen automáticamente a HTTPS, eliminando problemas de contenido mixto y mejorando la postura de seguridad.
    Salida Exitosa
    Si todo está configurado correctamente, verás:
    Successfully received certificate.
    Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    Key is saved at:         /etc/letsencrypt/live/yourdomain.com/privkey.pem
    This certificate expires on YYYY-MM-DD.
    These files will be updated when the certificate renews.
    
    Deploying certificate
    Successfully deployed certificate for yourdomain.com to /etc/nginx/sites-available/yourdomain.com
    Successfully deployed certificate for www.yourdomain.com to /etc/nginx/sites-available/yourdomain.com
    Congratulations! You have successfully enabled HTTPS on https://yourdomain.com and https://www.yourdomain.com
    Lo que Certbot Modificó en Nginx
    Después de ejecutarse, Certbot añade automáticamente directivas SSL a tu bloque de servidor. Tu configuración ahora se verá similar a esto:
    server {
        server_name yourdomain.com www.yourdomain.com;
    
        root /var/www/yourdomain.com/html;
        index index.html index.htm;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    }
    
    server {
        if ($host = www.yourdomain.com) {
            return 301 https://$host$request_uri;
        }
        if ($host = yourdomain.com) {
            return 301 https://$host$request_uri;
        }
    
        listen 80;
        server_name yourdomain.com www.yourdomain.com;
        return 404;
    }
    Paso 4 — Verificar la instalación de SSL
    Después de que Certbot se complete, verifica que tu certificado SSL esté correctamente instalado y funcionando.
    Método 1: Verificación en el navegador
    Abre tu navegador web y navega a https://yourdomain.com. Busca:
    
    Icono de candado en la barra de direcciones — confirma una conexión SSL activa y confiable
    Sin advertencias de seguridad — el certificado es válido y confiable para tu navegador
    HTTPS en la URL — las solicitudes HTTP deben redirigirse automáticamente a HTTPS
    
    Haz clic en el icono de candado y selecciona "Certificado" para ver el emisor (debe mostrar "Let’s Encrypt") y la fecha de vencimiento.
    Método 2: Análisis profundo de SSL Labs
    Para una auditoría de seguridad completa, usa Qualys SSL Labs:
    
    Navega a https://www.ssllabs.com/ssltest/
  • Ingresa tu nombre de dominio
  • Haz clic en "Enviar"
  • Una configuración correcta de Let’s Encrypt + Nginx debería obtener una puntuación de A o A+. Si obtienes una puntuación más baja, SSL Labs identificará las debilidades específicas a abordar.

    Método 3: Verificación desde la línea de comandos

    Verifica los detalles del certificado directamente desde la terminal:

    sudo certbot certificates

    Resultado:

    Found the following certs:
      Certificate Name: yourdomain.com
        Serial Number: abc123...
        Key Type: RSA
        Domains: yourdomain.com www.yourdomain.com
        Expiry Date: YYYY-MM-DD HH:MM:SS+00:00 (VALID: 89 days)
        Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
        Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pem

    Método 4: Comando OpenSSL

    Verifica la cadena de certificados y la fecha de vencimiento usando OpenSSL:

    echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates -issuer

    Resultado esperado:

    notBefore=Mon Jan  1 00:00:00 2025 GMT
    notAfter=Tue Apr  1 00:00:00 2025 GMT
    issuer=C=US, O=Let's Encrypt, CN=R11

    Paso 5 — Configurar la Renovación Automática de Certificados

    Los certificados de Let's Encrypt expiran después de 90 días. Este período de validez corto es intencional — limita la exposición si una clave privada se ve comprometida. Certbot maneja las renovaciones automáticamente, pero debes verificar que la automatización funcione correctamente.

    Cómo Funciona la Renovación de Certbot

    Cuando instalas Certbot a través de APT o Snap, automáticamente crea un temporizador systemd (o trabajo cron en sistemas más antiguos) que se ejecuta dos veces al día. Verifica si algún certificado está dentro de 30 días de expiración y los renueva automáticamente.

    Verificar el Temporizador Systemd

    sudo systemctl status certbot.timer

    Salida esperada:

    ● certbot.timer - Run certbot twice daily
         Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
         Active: active (waiting) since ...
        Trigger: ...
       Triggers: ● certbot.service

    Si el temporizador está activo y habilitado, la renovación automática ya está configurada.

    Probar el Proceso de Renovación (Ejecución en Seco)

    Antes de confiar en la renovación automática, simúlala para confirmar que todo funciona:

    sudo certbot renew --dry-run

    Salida exitosa:

    Simulating renewal of an existing certificate for yourdomain.com and www.yourdomain.com
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations, all simulated renewals succeeded:
      /etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Si la ejecución en seco tiene éxito, tus certificados se renovarán automáticamente sin intervención manual.

    Verificar el Trabajo Cron (Sistemas Heredados)

    En versiones más antiguas de Ubuntu que no usan temporizadores systemd, verifica el trabajo cron de Certbot:

    sudo cat /etc/cron.d/certbot

    Deberías ver una línea similar a:

    0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

    Esto ejecuta Certbot dos veces al día en intervalos aleatorios para evitar sobrecargar los servidores de Let's Encrypt.

    Renovación Manual (Si es Necesario)

    Si alguna vez necesitas forzar manualmente una renovación:

    sudo certbot renew --force-renewal
    sudo systemctl reload nginx

    > Mejor práctica: Después de cualquier renovación de certificado (manual o automática), recarga Nginx para asegurar que recoja los nuevos archivos de certificado:

    > “`bash

    > sudo systemctl reload nginx

    > “`

    > Los ganchos de renovación de Certbot manejan esto automáticamente en la mayoría de configuraciones.

    Configurar Ganchos de Renovación

    Para asegurar que Nginx se recargue automáticamente después de cada renovación, añade un gancho de implementación:

    sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

    Añade el siguiente contenido:

    #!/bin/bash
    systemctl reload nginx

    Hazlo ejecutable:

    sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

    Solución de problemas comunes

    Error: "Could not bind to IPv4/IPv6"

    Certbot utiliza el puerto 80 para la validación de dominio. Si otro proceso está utilizando el puerto 80, la validación fallará.

    Solución: Detén temporalmente Nginx, obtén el certificado en modo independiente y luego reinicia:

    sudo systemctl stop nginx
    sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
    sudo systemctl start nginx

    Error: "DNS problem: NXDOMAIN looking up A for yourdomain.com"

    Los registros DNS de tu dominio aún no se están propagando a los servidores de validación de Let's Encrypt.

    Solución: Verifica que tu registro A esté configurado correctamente:

    dig yourdomain.com A +short

    El resultado debe devolver la dirección IP pública de tu servidor. La propagación de DNS puede tardar hasta 48 horas, aunque normalmente se resuelve en 1–2 horas.

    Error: "Too many certificates already issued"

    Let's Encrypt aplica un límite de velocidad de 5 certificados duplicados por semana por dominio.

    Solución: Utiliza la bandera --staging para probar tu configuración sin alcanzar los límites de velocidad:

    sudo certbot --nginx --staging -d yourdomain.com -d www.yourdomain.com

    Una vez que hayas completado las pruebas, revoca el certificado de ensayo e emite uno de producción.

    Error: "Nginx configuration test failed"

    Certbot modifica tu configuración de Nginx. Si la configuración resultante tiene errores de sintaxis, Nginx no se recargará.

    Solución: Prueba y corrige manualmente la configuración:

    sudo nginx -t
    sudo nano /etc/nginx/sites-available/yourdomain.com
    # Fix any syntax errors, then:
    sudo systemctl reload nginx

    El certificado no se renueva automáticamente

    Si recibes correos electrónicos de advertencia de vencimiento a pesar de tener Certbot instalado, verifica el estado del temporizador:

    sudo systemctl status certbot.timer
    sudo journalctl -u certbot.service --since "7 days ago"

    Revisa los registros para detectar errores y abórdalos en consecuencia.

    Avanzado: Endurecimiento de tu configuración Nginx SSL

    La configuración predeterminada de Let’s Encrypt + Certbot es segura, pero puedes endurecerla aún más para obtener una puntuación A+ en SSL Labs.

    Habilitar HTTP/2

    Edita tu bloque de servidor para habilitar HTTP/2 para mejorar el rendimiento:

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    Agregar HSTS (HTTP Strict Transport Security)

    HSTS instruye a los navegadores a usar siempre HTTPS para tu dominio, incluso si un usuario escribe http://:

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

    Deshabilitar protocolos y cifrados débiles

    Agrega estas directivas a tu nginx.conf o bloque de servidor:

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    Después de hacer cambios, siempre prueba y recarga:

    sudo nginx -t && sudo systemctl reload nginx

    Elegir el Hosting Correcto para tu Configuración Nginx + SSL

    El rendimiento y la confiabilidad de tu servidor Nginx asegurado con SSL dependen en gran medida de la infraestructura subyacente. Aquí te mostramos cómo las opciones de hosting de AlexHost se alinean con diferentes casos de uso:

    • VPS Hosting — Ideal para la mayoría de sitios web y aplicaciones. El acceso root completo te permite configurar Nginx y Certbot exactamente como se describe en esta guía. Los planes VPS de AlexHost se ejecutan en Ubuntu 18.04, 20.04 y 22.04 LTS.
    • Servidores Dedicados — Mejor para sitios web de alto tráfico que requieren máximo rendimiento, recursos dedicados y control total del hardware. Ejecuta múltiples hosts virtuales Nginx, cada uno con su propio certificado Let’s Encrypt.
    • VPS con cPanel — Si prefieres una interfaz gráfica para gestionar certificados SSL junto con tu hosting web, cPanel se integra con Let’s Encrypt y maneja la emisión de certificados a través de su función AutoSSL.
    • Certificados SSL — Para entornos empresariales, sitios de comercio electrónico o aplicaciones que requieren certificados de validación extendida (EV) o validación de organización (OV), AlexHost ofrece certificados SSL premium con cobertura de garantía y soporte dedicado.

    Conclusión

    Asegurar Nginx con un certificado SSL de Let's Encrypt en Ubuntu es uno de los pasos más impactantes que puedes tomar para proteger a tus usuarios, mejorar tu posicionamiento en los motores de búsqueda y generar confianza con tu audiencia. Todo el proceso — desde instalar Certbot hasta habilitar renovaciones automáticas — toma menos de 15 minutos y no cuesta nada.

    Para recapitular lo que has logrado en esta guía:

    1. ✅ Instalaste Certbot y el plugin de Nginx
    2. ✅ Configuraste un bloque de servidor Nginx adecuado para tu dominio
    3. ✅ Obtuviste un certificado SSL de Let's Encrypt de confianza
    4. ✅ Verificaste el certificado usando herramientas de navegador, SSL Labs y OpenSSL
    5. ✅ Confirmaste la renovación automática mediante temporizador systemd y pruebas de ejecución en seco
    6. ✅ Aplicaste endurecimiento avanzado para una calificación de seguridad A+

    Con tu servidor Nginx ahora asegurado, considera explorar capas adicionales de protección: un Firewall de Aplicación Web (WAF), fail2ban para protección contra ataques de fuerza bruta y auditorías de seguridad regulares. Si estás administrando múltiples dominios o aplicaciones, los Paneles de Control VPS de AlexHost proporcionan una interfaz simplificada para administrar certificados SSL, hosts virtuales y configuraciones de servidor sin sacrificar la flexibilidad de un entorno Linux.

    Tus usuarios merecen una conexión segura. Ahora la tienen.