15%

Ahorra 15%<\/span> 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
30.10.2024

Cómo Configurar un Certificado SSL en Nginx: Una Guía Completa Paso a Paso

Asegurar tu sitio web con un certificado SSL/TLS ya no es opcional — es un requisito fundamental para la confianza del usuario, la protección de datos y el posicionamiento en motores de búsqueda. Google ha utilizado explícitamente HTTPS como señal de clasificación desde 2014, y los navegadores modernos advierten activamente a los visitantes cuando un sitio carece de cifrado. Si estás ejecutando Nginx como servidor web, esta guía te explicará todo lo que necesitas saber para instalar, configurar y automatizar la gestión de certificados SSL usando Certbot y Let’s Encrypt.

Ya sea que estés administrando un entorno de VPS Hosting, un servidor dedicado o un plan de alojamiento compartido, un SSL correctamente configurado es innegociable para cualquier sitio web en producción.

¿Qué es un certificado SSL y por qué lo necesita Nginx?

Un certificado SSL (Secure Sockets Layer) — denominado hoy con mayor precisión como certificado TLS (Transport Layer Security) — establece una conexión cifrada entre tu servidor web y el navegador del visitante. Este cifrado garantiza que los datos sensibles, como credenciales de inicio de sesión, información de pago y datos personales, no puedan ser interceptados por terceros malintencionados.

Para Nginx específicamente, la configuración SSL implica:

  • Archivos de certificado: La cadena de certificados públicos emitida por una Autoridad de Certificación (CA)
  • Clave privada: Una clave generada criptográficamente almacenada de forma segura en tu servidor
  • Directivas del bloque de servidor: Instrucciones de configuración de Nginx que vinculan el certificado a tu dominio

Sin SSL, tu sitio se sirve a través de HTTP, lo que significa que todo el tráfico se transmite en texto plano. Con SSL correctamente configurado, tu sitio utiliza HTTPS — cifrado, autenticado y de confianza para navegadores y motores de búsqueda por igual.

> Consejo profesional: Si estás evaluando opciones de alojamiento, AlexHost ofrece Certificados SSL para dominios de todo tipo, incluyendo certificados de Validación de Dominio (DV), Validación de Organización (OV) y Validación Extendida (EV).

Requisitos previos antes de comenzar

Antes de profundizar en los pasos de configuración, asegúrate de que se cumplan las siguientes condiciones:

  • Un servidor web Nginx en funcionamiento en un sistema basado en Linux (se recomienda Ubuntu 20.04/22.04 o Debian)
  • Acceso root o sudo a tu servidor
  • Un nombre de dominio registrado que apunte a la dirección IP de tu servidor mediante registros DNS A — puedes registrar uno a través de Registro de Dominios
  • Puertos del firewall abiertos: Los puertos TCP 80 (HTTP) y 443 (HTTPS) deben ser accesibles
  • Un usuario no root con privilegios sudo (mejor práctica para la seguridad del servidor)

Puedes verificar que Nginx está en funcionamiento con:

sudo systemctl status nginx

Y confirmar que tu dominio se resuelve correctamente usando:

dig yourdomain.com +short

Paso 1: Instalar Certbot en tu servidor

Certbot es el cliente oficial de código abierto para Let’s Encrypt — una Autoridad de Certificación gratuita, automatizada y ampliamente confiable. Gestiona todo el proceso de emisión de certificados, incluyendo la validación del dominio y las actualizaciones de configuración de Nginx.

Actualiza tu índice de paquetes

Comienza siempre actualizando tus listas de paquetes para asegurarte de instalar las últimas versiones disponibles:

sudo apt update && sudo apt upgrade -y

Instala Certbot y el plugin de Nginx

El plugin python3-certbot-nginx permite a Certbot leer y modificar directamente tus archivos de configuración de Nginx, automatizando gran parte del proceso de configuración:

sudo apt install certbot python3-certbot-nginx -y

Verifica la instalación

Confirma que Certbot se instaló correctamente comprobando su versión:

certbot --version

Deberías ver una salida similar a certbot 2.x.x.

Paso 2: Permitir el tráfico HTTPS a través de tu firewall

Si estás usando UFW (Uncomplicated Firewall), necesitas permitir explícitamente el tráfico HTTPS antes de continuar:

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

El perfil Nginx Full permite tanto HTTP (puerto 80) como HTTPS (puerto 443). Eliminar la regla HTTP independiente garantiza que, una vez configurado SSL, no dejes puertos innecesarios abiertos sin propósito.

Paso 3: Obtener tu certificado SSL de Let’s Encrypt

Con Certbot instalado y tu firewall configurado, ahora puedes solicitar un certificado. El indicador --nginx le indica a Certbot que use el plugin de Nginx, que gestiona automáticamente la verificación del desafío ACME y actualiza la configuración de tu servidor.

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

¿Qué ocurre durante este proceso?

  1. Verificación de propiedad del dominio: Certbot modifica temporalmente tu configuración de Nginx para servir un archivo de desafío, demostrando a Let’s Encrypt que controlas el dominio
  2. Emisión del certificado: Let’s Encrypt emite un certificado firmado válido por 90 días
  3. Configuración automática de Nginx: Certbot actualiza tu bloque de servidor de Nginx para usar los nuevos archivos de certificado

Indicaciones interactivas

Durante el proceso, Certbot solicitará:

  • Una dirección de correo electrónico para avisos urgentes de renovación y seguridad
  • Aceptación de los Términos de Servicio
  • Si redirigir HTTP a HTTPS — elige siempre la opción 2 (Redirigir) para aplicar HTTPS en todo el sitio

Tus certificados se almacenarán en:

/etc/letsencrypt/live/yourdomain.com/

Los archivos clave son:

ArchivoPropósito
fullchain.pemTu certificado + cadena intermedia
privkey.pemTu clave privada (mantenla en secreto)
cert.pemSolo tu certificado de dominio
chain.pemSolo certificados intermedios

Paso 4: Configurar Nginx manualmente para SSL (Avanzado)

Aunque Certbot automatiza la mayor parte de la configuración, entender la configuración manual te da control total sobre tu implementación SSL — esencial para el ajuste de rendimiento, el endurecimiento de seguridad y las implementaciones personalizadas.

Abre la configuración del bloque de servidor de Nginx

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

Si estás usando el archivo de configuración predeterminado:

sudo nano /etc/nginx/sites-available/default

Configuración completa del bloque de servidor SSL

Reemplaza o actualiza tu configuración con el siguiente ejemplo reforzado:

# Redirect all HTTP traffic to HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

# HTTPS server block
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    # SSL Certificate Paths
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

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

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # Security Headers
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy "no-referrer-when-downgrade";

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

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

Explicación de las directivas de configuración clave

  • ssl_protocols TLSv1.2 TLSv1.3: Deshabilita protocolos más antiguos y vulnerables (SSLv3, TLS 1.0, TLS 1.1)
  • ssl_ciphers: Especifica un conjunto de cifrados sólido que prioriza el secreto hacia adelante
  • ssl_stapling on: Habilita el grapado OCSP, reduciendo la latencia del protocolo de enlace SSL
  • Strict-Transport-Security: Indica a los navegadores que siempre usen HTTPS para tu dominio (HSTS)
  • http2: Habilita HTTP/2 para mejorar el rendimiento en conexiones HTTPS

Paso 5: Probar tu configuración de Nginx

Antes de reiniciar Nginx, valida siempre la sintaxis de tu configuración para detectar errores que podrían dejar tu sitio fuera de línea:

sudo nginx -t

Una prueba exitosa devuelve:

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

Si encuentras errores, revisa la salida cuidadosamente — Nginx indicará el archivo y el número de línea donde existe el problema.

Paso 6: Reiniciar Nginx para aplicar los cambios

Una vez que la prueba de configuración sea exitosa, recarga o reinicia Nginx:

# Graceful reload (preferred for production — no downtime)
sudo systemctl reload nginx

# Full restart (use if reload doesn't apply all changes)
sudo systemctl restart nginx

Verifica que Nginx funciona correctamente después del reinicio:

sudo systemctl status nginx

Paso 7: Configurar la renovación automática del certificado SSL

Los certificados de Let’s Encrypt caducan después de 90 días. Este corto período de validez es intencional — limita el daño causado por certificados comprometidos y fomenta la automatización. Certbot instala automáticamente un temporizador systemd (o tarea cron) para gestionar las renovaciones, pero debes verificarlo y probarlo.

Comprueba el temporizador de renovación existente

sudo systemctl status certbot.timer

Deberías ver que el temporizador está activo y programado para ejecutarse dos veces al día.

Prueba el proceso de renovación

Simula una renovación sin modificar realmente ningún certificado:

sudo certbot renew --dry-run

La salida exitosa incluirá:

Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/yourdomain.com/fullchain.pem (success)

Añade un hook posterior a la renovación para recargar Nginx

Certbot no recargará automáticamente Nginx después de renovar los certificados a menos que configures un hook de despliegue. Crea uno con:

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

Esto garantiza que Nginx cargue los archivos de certificado actualizados inmediatamente después de cada renovación exitosa.

Paso 8: Verificar tu instalación SSL

Después de completar la configuración, verifica tu configuración SSL usando estos métodos:

Comprobación en el navegador

Navega a https://yourdomain.com en tu navegador. Deberías ver un icono de candado en la barra de direcciones que indica una conexión segura.

Herramientas de prueba SSL en línea

Usa estas herramientas gratuitas para auditar la calidad de tu configuración SSL:

  • SSL Labs (Qualys): https://www.ssllabs.com/ssltest/ — Proporciona una calificación por letras (apunta a A o A+)
  • Security Headers: https://securityheaders.com/ — Audita tus cabeceras de seguridad HTTP
  • HSTS Preload: https://hstspreload.org/ — Comprueba la elegibilidad para la precarga HSTS

Verificación por línea de comandos

# Check certificate details
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

# Check certificate expiry date
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

Solución de problemas comunes de SSL en Nginx

ProblemaCausa probableSolución
ERR_SSL_PROTOCOL_ERRORNginx no escucha en el puerto 443Comprueba la directiva listen 443 ssl; y las reglas del firewall
NET::ERR_CERT_AUTHORITY_INVALIDUsando cert.pem en lugar de fullchain.pemActualiza ssl_certificate para usar fullchain.pem
El certificado no se renuevaTemporizador de Certbot deshabilitado o puerto 80 bloqueadoEjecuta sudo certbot renew --dry-run y comprueba los registros
Advertencias de contenido mixtoRecursos HTTP cargados en una página HTTPSActualiza todos los enlaces internos y URLs de recursos a HTTPS
SSL_ERROR_RX_RECORD_TOO_LONGTráfico HTTP llegando al puerto HTTPSAsegúrate de que la redirección del puerto 80 al 443 esté configurada

Elegir el entorno de alojamiento adecuado para SSL

El rendimiento y la fiabilidad de tu implementación SSL dependen en gran medida de tu entorno de alojamiento. Aquí tienes una descripción general rápida:

  • VPS Hosting: El acceso root completo te da control total sobre la configuración de Nginx, los parámetros SSL y la gestión de certificados — ideal para esta guía
  • Servidores Dedicados: Máximo rendimiento y aislamiento para sitios de alto tráfico que requieren configuraciones SSL de nivel empresarial
  • Alojamiento Web Compartido: SSL se gestiona normalmente a través de un panel de control; la configuración manual de Certbot puede no estar disponible
  • VPS con cPanel: Simplifica la gestión de SSL a través de una interfaz gráfica manteniendo el control a nivel de VPS

Para desarrolladores y administradores de sistemas que necesitan control total sobre su stack SSL, un VPS o servidor dedicado es la opción recomendada.

Conclusión

Configurar SSL en Nginx es un proceso de varios pasos, pero cada paso cumple un propósito crítico — desde cifrar el tráfico y verificar la propiedad del dominio hasta reforzar la configuración de cifrado y automatizar las renovaciones. Siguiendo esta guía, has implementado:

✅ Un certificado SSL gratuito y de confianza a través de Let’s Encrypt y Certbot

✅ Una configuración SSL de Nginx reforzada con protocolos TLS modernos

✅ Redirección de HTTP a HTTPS para todo el tráfico

✅ Grapado OCSP para mejorar el rendimiento del protocolo de enlace

✅ HSTS y cabeceras de seguridad para una defensa en profundidad

✅ Renovación automatizada de certificados con hooks de recarga de Nginx

Un certificado SSL correctamente configurado no solo protege a tus usuarios — genera confianza, mejora tu posicionamiento SEO y es un requisito básico para cualquier presencia web profesional. Si buscas una infraestructura fiable para alojar tu servidor Nginx con SSL, explora los planes de VPS Hosting de AlexHost, diseñados específicamente para desarrolladores y empresas que se toman la seguridad en serio.

15%

Ahorra 15%<\/span> 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