Guía completa para configurar SSL en Nginx

Guía Completa para Configurar SSL en Nginx (2026)

📘 Este artículo forma parte de nuestra Guía Completa de Servidores y Virtualización y complementa a nuestra Guía Completa de Redes. Si administras servidores Nginx, esas guías son tu punto de partida.

Introducción

HTTPS ya no es opcional. En 2026, los navegadores marcan como «no seguro» cualquier web sin SSL, Google penaliza el SEO de las webs sin HTTPS y los usuarios desconfían de cualquier sitio que no tenga el candado.

Nginx es el servidor web más usado del mundo, y configurar SSL/TLS correctamente es fundamental para:

  • Seguridad: cifrado del tráfico.
  • SEO: Google prioriza HTTPS.
  • Confianza: los usuarios ven el candado.
  • Cumplimiento: RGPD, PCI-DSS, NIS2.

En esta guía completa vas a aprender:

  • Qué es SSL/TLS (conceptos básicos).
  • Obtener certificados gratuitos con Let’s Encrypt.
  • Configurar SSL en Nginx paso a paso.
  • Endurecer la configuración (TLS 1.3, HSTS, OCSP Stapling).
  • Redirigir HTTP a HTTPS.
  • Renovar certificados automáticamente.
  • Configurar certificados wildcard.
  • Comprobar la seguridad con SSL Labs.
  • Solución de problemas comunes.
  • FAQ con las preguntas frecuentes.

Si es tu primera vez con Nginx, consulta nuestra Guía de instalación de Nginx. Si usas Apache, consulta nuestra Guía de Apache2.


Índice de contenidos

  1. ¿Qué es SSL/TLS?
  2. Requisitos previos
  3. Instalación de Certbot
  4. Obtener certificado Let’s Encrypt
  5. Configuración básica de SSL en Nginx
  6. Configuración avanzada (TLS 1.3, HSTS)
  7. Redirigir HTTP a HTTPS
  8. Renovación automática
  9. Certificados wildcard
  10. SSL para múltiples dominios
  11. Comprobar la seguridad (SSL Labs)
  12. Optimización y rendimiento
  13. Solución de problemas
  14. FAQ
  15. Conclusión

1. ¿Qué es SSL/TLS?

SSL (Secure Sockets Layer) y su sucesor TLS (Transport Layer Security) son protocolos criptográficos que cifran las comunicaciones entre un cliente (navegador) y un servidor (tu web).

Guía Completa para Configurar SSL en Nginx (2026)

1.1 Diferencias entre SSL y TLS

Aunque popularmente se dice «SSL», técnicamente:

  • SSL: versiones 1.0, 2.0, 3.0 (obsoletas y vulnerables).
  • TLS: versiones 1.0, 1.1 (obsoletas), 1.2, 1.3 (actuales).

En 2026, solo TLS 1.2 y 1.3 deben estar habilitados.

1.2 Cómo funciona HTTPS

  1. Cliente solicita conexión HTTPS al servidor.
  2. Servidor presenta su certificado.
  3. Cliente verifica el certificado contra una CA (Certificate Authority) de confianza.
  4. Handshake TLS: ambas partes negocian algoritmos y claves.
  5. Conexión cifrada establecida.

1.3 Componentes de un certificado

  • Clave pública: parte del par de claves.
  • Clave privada: nunca se comparte.
  • CA: entidad que firma el certificado.
  • SAN (Subject Alternative Name): dominios cubiertos.
  • Fecha de expiración: normalmente 90 días (Let’s Encrypt).
  • Cadena de confianza: CA raíz → CA intermedia → certificado.

1.4 Tipos de certificados

TipoDescripciónCoste
DV (Domain Validation)Solo verifica el dominioGratis (Let’s Encrypt)
OV (Organization Validation)Verifica la organización~100 €/año
EV (Extended Validation)Verificación exhaustiva~300 €/año
WildcardCubre subdominiosGratis (Let’s Encrypt)
Multi-domain (SAN)Varios dominiosGratis (Let’s Encrypt)

Recomendación 2026: Let’s Encrypt para todo. Gratis, renovación automática, aceptado universalmente.

Consulta Cómo implementar el protocolo HTTPS correctamente.


2. Requisitos previos

2.1 Servidor

  • Debian 12 o Ubuntu 24.04 (recomendados).
  • Nginx instalado y funcionando.
  • Dominio apuntando al servidor (registro DNS A/AAAA).
  • Puerto 80 abierto (para la validación de Let’s Encrypt).
  • Acceso root o sudo.

2.2 Conocimientos

  • Linux básico (terminal, edición de archivos).
  • Nginx básico (vhosts, configuraciones).

Si no tienes Nginx instalado:

sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx

Consulta Guía de instalación de Nginx.

2.3 DNS configurado

Verifica que tu dominio apunta al servidor:

dig +short tudominio.com

Debería devolver la IP de tu servidor.

Si no funciona:

  • Configura el registro A (IPv4) o AAAA (IPv6).
  • Espera a la propagación (5 min – 48 h).

Consulta Guía Completa de Redes.


3. Instalación de Certbot

Certbot es el cliente oficial de Let’s Encrypt.

3.1 Instalación en Debian/Ubuntu

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

Verificar:

certbot --version

3.2 Instalación en RHEL/Rocky/AlmaLinux

sudo dnf install -y certbot python3-certbot-nginx

3.3 Alternativa: acme.sh

Alternativa moderna:

curl https://get.acme.sh | sh

Ventajas:

  • Escrito en shell (sin dependencias).
  • Soporta más proveedores DNS.

Consulta Guía Completa de Servidores.


4. Obtener certificado Let’s Encrypt

4.1 Método 1: Certbot con plugin Nginx (recomendado)

Automático: Certbot modifica la configuración de Nginx.

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

Certbot:

  1. Verifica que controlas el dominio (HTTP-01 challenge).
  2. Genera el certificado.
  3. Modifica la configuración de Nginx.
  4. Configura la renovación automática.

Te pedirá:

  • Email para notificaciones (renovación, avisos).
  • Aceptar términos de servicio.
  • Redirigir HTTP a HTTPS (recomendado: sí).

Resultado:

Congratulations! You have successfully enabled HTTPS on
https://tudominio.com and https://www.tudominio.com

4.2 Método 2: Certbot standalone

Si Nginx no está corriendo o quieres más control:

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

Requiere puerto 80 libre.

4.3 Método 3: Certbot webroot

Si tienes otros servicios en el puerto 80:

sudo certbot certonly --webroot -w /var/www/html -d tudominio.com

Requiere que el dominio sirva contenido desde /var/www/html.

4.4 Verificar el certificado

sudo certbot certificates

Salida:

Found the following certs:
  Certificate Name: tudominio.com
    Domains: tudominio.com www.tudominio.com
    Expiry Date: 2027-01-15 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/tudominio.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/tudominio.com/privkey.pem

Archivos generados:

  • /etc/letsencrypt/live/tudominio.com/fullchain.pem — certificado + cadena.
  • /etc/letsencrypt/live/tudominio.com/privkey.pem — clave privada.
  • /etc/letsencrypt/live/tudominio.com/cert.pem — solo certificado.
  • /etc/letsencrypt/live/tudominio.com/chain.pem — cadena intermedia.

⚠️ Importante: los archivos en live/ son symlinks a archive/. Nunca edites archivos en live/.


5. Configuración básica de SSL en Nginx

Guía completa para configurar SSL en Nginx

5.1 Ejemplo de configuración

Crea o edita /etc/nginx/sites-available/tudominio.com:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name tudominio.com www.tudominio.com;

    # Certificados
    ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;

    # Protocolos y cifrados
    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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # Sesiones SSL
    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/tudominio.com/chain.pem;
    resolver 1.1.1.1 8.8.8.8 valid=300s;
    resolver_timeout 5s;

    # Cabeceras de seguridad
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    # Root y logs
    root /var/www/tudominio.com;
    index index.html index.php;

    access_log /var/log/nginx/tudominio.access.log;
    error_log /var/log/nginx/tudominio.error.log;

    # Location principal
    location / {
        try_files $uri $uri/ =404;
    }
}

5.2 Activar y verificar

sudo ln -s /etc/nginx/sites-available/tudominio.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

5.3 Verificar HTTPS

En el navegador:

https://tudominio.com

Deberías ver el candado y https:// en la barra de direcciones.

Por línea de comandos:

curl -I https://tudominio.com

Deberías ver:

HTTP/2 200
server: nginx
...

Consulta Cómo implementar el protocolo HTTPS correctamente.


6. Configuración avanzada (TLS 1.3, HSTS)

6.1 Habilitar solo TLS 1.2 y 1.3

ssl_protocols TLSv1.2 TLSv1.3;

Deshabilitar:

  • TLS 1.0 y 1.1 (obsoletos, vulnerables).
  • SSL 2.0 y 3.0 (nunca).

6.2 Cifrados recomendados

ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;

ssl_prefer_server_ciphers off: deja al cliente elegir (más seguro con TLS 1.3).

6.3 Habilitar HSTS

HSTS (HTTP Strict Transport Security) obliga al navegador a usar HTTPS durante un tiempo.

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

Parámetros:

  • max-age=31536000: 1 año.
  • includeSubDomains: aplica a subdominios.
  • preload: solicita inclusión en la lista de preload de Chrome.

⚠️ Cuidado: una vez activado con preload, es difícil revertir. Empieza con max-age bajo.

6.4 OCSP Stapling

Reduce el tiempo de handshake:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/tudominio.com/chain.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;

6.5 Sesiones SSL

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

Ventajas:

  • Cache: 10 MB (≈40.000 sesiones).
  • Timeout: 1 día.
  • Deshabilitar tickets: evita problemas de forward secrecy.

6.6 DH parameters (opcional)

Para máxima seguridad:

sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048

En Nginx:

ssl_dhparam /etc/nginx/dhparam.pem;

⚠️ Tarda varios minutos en generar. No es obligatorio en 2026.

6.7 Configuración completa recomendada

# SSL
ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;
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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/tudominio.com/chain.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;

Consulta Hardening de servidores web Apache vs Nginx.


7. Redirigir HTTP a HTTPS

Nunca permitas HTTP sin redirigir.

7.1 Configuración de redirección

server {
    listen 80;
    listen [::]:80;
    server_name tudominio.com www.tudominio.com;
    
    # Redirigir todo a HTTPS
    return 301 https://$server_name$request_uri;
}

Con Certbot, esta redirección se añade automáticamente.

7.2 Verificar

curl -I http://tudominio.com

Deberías ver:

HTTP/1.1 301 Moved Permanently
Location: https://tudominio.com/

7.3 Redirección de www a no-www (o viceversa)

Si quieres un dominio canónico:

De www a no-www:

server {
    listen 443 ssl http2;
    server_name www.tudominio.com;
    return 301 https://tudominio.com$request_uri;
}

De no-www a www:

server {
    listen 443 ssl http2;
    server_name tudominio.com;
    return 301 https://www.tudominio.com$request_uri;
}

Consulta Guía Completa de Redes.


8. Renovación automática

Los certificados de Let’s Encrypt duran 90 días. Hay que renovarlos.

8.1 Verificar la renovación automática

Certbot instala un timer systemd:

systemctl list-timers | grep certbot

Deberías ver:

certbot.timer    ...    Next: ...

8.2 Probar la renovación (dry-run)

sudo certbot renew --dry-run

Salida:

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

8.3 Renovación manual

sudo certbot renew

Solo renueva si quedan <30 días.

8.4 Forzar renovación

sudo certbot renew --force-renewal

⚠️ No abusar: Let’s Encrypt tiene rate limits.

8.5 Hook post-renovación

Recarga Nginx tras renovar:

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

Contenido:

#!/bin/bash
systemctl reload nginx
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

8.6 Verificar los logs

sudo tail -f /var/log/letsencrypt/letsencrypt.log

Consulta Cómo automatizar tareas con cron.


9. Certificados wildcard

Un certificado wildcard cubre *.tudominio.com (todos los subdominios).

9.1 Requisitos

  • Validación DNS-01: necesitas acceso a la API de tu proveedor DNS.
  • Plugins específicos: Cloudflare, Route53, etc.

9.2 Instalación del plugin DNS

Para Cloudflare:

sudo apt install -y python3-certbot-dns-cloudflare

9.3 Configurar credenciales

Crea /etc/letsencrypt/cloudflare.ini:

dns_cloudflare_api_token = TU_API_TOKEN
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

9.4 Obtener certificado wildcard

sudo certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
    -d "tudominio.com" \
    -d "*.tudominio.com"

Ventajas:

  • Cubre todos los subdominios.
  • Un solo certificado para todo.

Inconvenientes:

  • Requiere API del DNS.
  • Renovación automática depende del plugin.

Consulta Cómo funciona un CDN (Cloudflare).


10. SSL para múltiples dominios

10.1 Un certificado para varios dominios

sudo certbot --nginx \
    -d tudominio.com \
    -d www.tudominio.com \
    -d otrod minio.com \
    -d www.otrodominio.com

Ventajas:

  • Un solo certificado.
  • Gestión simplificada.

10.2 Certificados separados

Por vhost:

server {
    listen 443 ssl http2;
    server_name tudominio.com;
    ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;
    ...
}

server {
    listen 443 ssl http2;
    server_name otrodominio.com;
    ssl_certificate /etc/letsencrypt/live/otrodominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/otrodominio.com/privkey.pem;
    ...
}

10.3 Múltiples dominios en un vhost

Con server_name:

server {
    listen 443 ssl http2;
    server_name tudominio.com www.tudominio.com otrodominio.com;
    ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
    ...
}

11. Comprobar la seguridad (SSL Labs)

SSL Labs es la herramienta de referencia para evaluar la seguridad SSL.

11.1 Analizar tu dominio

  1. Visita https://www.ssllabs.com/ssltest/
  2. Introduce tu dominio.
  3. Espera el análisis (~2 min).

11.2 Interpretar el resultado

Objetivo: A+.

NotaSignificado
A+Excelente (HSTS + TLS 1.3)
AMuy bueno
BAceptable (TLS 1.2 sin HSTS)
CProblemático
FInseguro

11.3 Mejorar la nota

Si tienes menos de A+:

  1. Habilitar HSTS (con preload).
  2. Habilitar TLS 1.3.
  3. Deshabilitar TLS 1.0/1.1.
  4. Habilitar OCSP Stapling.
  5. Deshabilitar cifrados débiles.
  6. Reiniciar Nginx.

Comprobar de nuevo.

11.4 Otras herramientas

Consulta Hardening de servidores web Apache vs Nginx.


12. Optimización y rendimiento

12.1 HTTP/2

listen 443 ssl http2;

Ventajas:

  • Multiplexación.
  • Compresión de cabeceras.
  • Server push.

12.2 HTTP/3 (QUIC)

Requiere Nginx 1.25+:

listen 443 quic reuseport;
listen 443 ssl http2;
add_header Alt-Svc 'h3=":443"; ma=86400';

Ventajas:

  • Menor latencia.
  • Mejor en redes móviles.

12.3 Compresión

gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

12.4 Caché

location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|webp|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

12.5 Tamaño máximo

client_max_body_size 100M;

Consulta Optimización de servidores Linux.


13. Solución de problemas

13.1 «NET::ERR_CERT_AUTHORITY_INVALID»

Causas:

  • Certificado caducado.
  • Certificado autofirmado.
  • Falta la cadena intermedia.

Solución:

sudo certbot certificates
sudo systemctl reload nginx

Verificar la cadena:

openssl s_client -connect tudominio.com:443 -showcerts

13.2 «ERR_SSL_PROTOCOL_ERROR»

Causas:

  • Configuración SSL incorrecta.
  • Certificado mal referenciado.

Solución:

sudo nginx -t
sudo tail -f /var/log/nginx/error.log

13.3 «This site can’t provide a secure connection»

Causas:

  • Puerto 443 cerrado.
  • Firewall bloquea.

Solución:

sudo ufw status
sudo ss -tulpn | grep :443

Consulta Guía para configurar firewall en Debian.

13.4 «Certificate has expired»

Solución:

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

Verificar:

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

13.5 «Mixed content» (contenido mixto)

Causa: recursos cargados por HTTP en página HTTPS.

Solución:

Busca en tu HTML:

grep -rn "http://" /var/www/tudominio.com/ | grep -v "https://"

Corrige:

  • Imágenes: cambia http:// a https://.
  • CSS/JS: igual.
  • O usa rutas relativas (/ruta/ en lugar de http://...).

13.6 Redirección infinita

Causa: redirección HTTPS + redirección en la app.

Solución:

  • Deshabilita la redirección en la app.
  • O usa X-Forwarded-Proto.
proxy_set_header X-Forwarded-Proto $scheme;

13.7 Certbot falla

Diagnóstico:

sudo tail -f /var/log/letsencrypt/letsencrypt.log
sudo certbot certificates

Causas:

  • DNS no propagado.
  • Puerto 80 cerrado.
  • Rate limit alcanzado.

13.8 Comprobar fecha de expiración

Por línea de comandos:

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

Salida:

notBefore=Oct 1 12:00:00 2026 GMT
notAfter=Dec 30 12:00:00 2026 GMT

Consulta Análisis de registros en Linux.


14. FAQ

¿Qué es SSL y por qué es importante?

SSL/TLS son protocolos criptográficos que cifran las comunicaciones web.

Importancia:

  • Seguridad: cifra datos.
  • SEO: Google prioriza HTTPS.
  • Confianza: los usuarios ven el candado.
  • Cumplimiento: RGPD, PCI-DSS.

¿SSL y TLS son lo mismo?

Técnicamente, no. SSL es el predecesor (obsoleto). TLS es el actual.

En el lenguaje común, se dice «SSL» para referirse a ambos.

¿Cuánto cuesta un certificado SSL?

Con Let’s Encrypt: gratis.

Con CA comercial:

  • DV: ~50 €/año.
  • OV: ~150 €/año.
  • EV: ~300 €/año.

Recomendación: Let’s Encrypt para todo.

¿Cada cuánto se renueva el certificado?

Let’s Encrypt: cada 90 días (automático con Certbot).

Comercial: 1 año normalmente.

¿Cómo redirijo HTTP a HTTPS?

server {
    listen 80;
    server_name tudominio.com;
    return 301 https://$server_name$request_uri;
}

Con Certbot, se añade automáticamente.

¿Qué es HSTS y debería activarlo?

HSTS fuerza al navegador a usar HTTPS siempre.

Recomendación: activar, pero empezar con max-age bajo (300) y subir gradualmente.

⚠️ preload es irreversible. Úsalo solo cuando estés seguro.

¿Cómo obtengo un certificado wildcard?

sudo certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
    -d "tudominio.com" \
    -d "*.tudominio.com"

Requiere plugin DNS de tu proveedor.

¿Por qué mi web dice «no segura»?

Causas:

  • Certificado caducado.
  • Certificado autofirmado.
  • Mixed content.
  • Cadena de certificados incompleta.

Solución: revisa los logs y usa SSL Labs.

¿Cómo compruebo mi nota SSL?

SSL Labs: https://www.ssllabs.com/ssltest/

Objetivo: A+.

¿Funciona en Cloudflare?

Sí. Con modo SSL «Full (Strict)».

En Cloudflare:

  • SSL/TLS → Overview → Full (Strict).
  • Edge Certificates → Always Use HTTPS: On.

¿Cómo funciona con un reverse proxy?

Nginx como proxy:

location / {
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

¿Qué es OCSP Stapling?

Técnica que acelera el handshake TLS al incluir la respuesta OCSP en el handshake.

Recomendación: activar.

¿Qué protocolos debo habilitar?

TLS 1.2 y TLS 1.3.

Deshabilitar: TLS 1.0, TLS 1.1, SSL 2.0, SSL 3.0.

¿Qué cifrados debo usar?

Los modernos con ECDHE y AEAD:

ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...

Nunca uses RC4, DES, 3DES, MD5.

¿Cuánto tarda Let’s Encrypt en emitir un certificado?

Menos de 1 minuto (con validación HTTP-01).

Con DNS-01: puede tardar unos minutos (propagación DNS).

¿Qué pasa si no renuevo a tiempo?

Los navegadores mostrarán advertencias de seguridad.

Con Certbot, la renovación es automática y avisa por email si falla.

¿Cómo migro mi certificado a otro servidor?

Copia los archivos:

sudo tar -czf certs.tar.gz /etc/letsencrypt/
# Transferir
sudo tar -xzf certs.tar.gz -C /

O usa Certbot en el nuevo servidor.

¿Puedo tener SSL sin dominio?

No con Let’s Encrypt. Necesitas un dominio válido.

Alternativa: certificado autofirmado (solo para pruebas).


15. Conclusión

Configurar SSL en Nginx es imprescindible en 2026. Con Let’s Encrypt y Certbot, el proceso es gratis, sencillo y automático.

Puntos clave:

  1. Instala Certbot (apt install certbot python3-certbot-nginx).
  2. Obtén el certificado con certbot --nginx -d tudominio.com.
  3. Configura Nginx con TLS 1.2/1.3, HSTS, OCSP Stapling.
  4. Redirige HTTP a HTTPS siempre.
  5. Renovación automática con el timer de systemd.
  6. Wildcard con plugin DNS.
  7. Múltiples dominios en un certificado o separados.
  8. Comprueba en SSL Labs (objetivo: A+).
  9. Optimiza con HTTP/2, HTTP/3, compresión, caché.
  10. Soluciona problemas con los logs y SSL Labs.

Si quieres seguir aprendiendo:

Deja un comentario