Para instalar un certificado SSL en Nginx necesitas colocar los archivos del certificado en el servidor, editar el bloque server en la configuración de Nginx y recargar el servicio. El proceso completo toma menos de 15 minutos en una VPS estándar.
Esta guía cubre la instalación de un certificado comercial (DV, OV o EV) o de Let's Encrypt en Nginx sobre Linux, incluyendo la redirección de HTTP a HTTPS y la verificación final.
Requisitos previos
Antes de empezar confirma que tienes:
- Acceso SSH al servidor con privilegios de
sudo. - Nginx instalado y funcionando (
nginx -vpara verificar). - Un dominio apuntando al IP del servidor (DNS propagado).
- Los archivos del certificado SSL: normalmente
dominio.crt(o.pem), la clave privadadominio.keyy, si aplica, el certificado intermedio (bundle/chain).
Si usarás Let's Encrypt, puedes saltarte la sección de archivos de certificado; Certbot los genera y coloca automáticamente.
Opción A — Instalar un certificado comercial
Paso 1: Sube y combina los archivos del certificado
Copia los archivos a una ruta segura en el servidor:
sudo mkdir -p /etc/nginx/ssl
sudo cp dominio.crt /etc/nginx/ssl/
sudo cp dominio.key /etc/nginx/ssl/
sudo cp cadena_intermedia.crt /etc/nginx/ssl/
Nginx requiere que el certificado del dominio y la cadena intermedia estén concatenados en un solo archivo (certificado completo o "full chain"):
sudo cat dominio.crt cadena_intermedia.crt > /etc/nginx/ssl/dominio_fullchain.crt
Ajusta los permisos para que solo root pueda leer la clave privada:
sudo chmod 600 /etc/nginx/ssl/dominio.key
Paso 2: Edita el bloque server en Nginx
Abre el archivo de configuración de tu sitio (suele estar en /etc/nginx/sites-available/tudominio o /etc/nginx/conf.d/tudominio.conf):
sudo nano /etc/nginx/sites-available/tudominio
Reemplaza o complementa el bloque existente con esta estructura:
server {
listen 443 ssl http2;
server_name tudominio.com www.tudominio.com;
ssl_certificate /etc/nginx/ssl/dominio_fullchain.crt;
ssl_certificate_key /etc/nginx/ssl/dominio.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
root /var/www/tudominio/public_html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
}
# Redirigir HTTP a HTTPS
server {
listen 80;
server_name tudominio.com www.tudominio.com;
return 301 https://$host$request_uri;
}
Paso 3: Verifica y recarga Nginx
sudo nginx -t
sudo systemctl reload nginx
El comando nginx -t prueba la sintaxis sin interrumpir el servicio. Si muestra syntax is ok y test is successful, el reload es seguro.
Opción B — Instalar Let's Encrypt con Certbot
Let's Encrypt es gratuito, ampliamente soportado y se renueva solo. Es la opción ideal para la mayoría de sitios.
Paso 1: Instala Certbot
En sistemas basados en Debian/Ubuntu:
sudo apt update
sudo apt install certbot python3-certbot-nginx
En sistemas RHEL/CentOS/AlmaLinux:
sudo dnf install certbot python3-certbot-nginx
Paso 2: Obtén e instala el certificado
sudo certbot --nginx -d tudominio.com -d www.tudominio.com
Certbot editará automáticamente la configuración de Nginx para agregar los bloques SSL y la redirección HTTPS. También programará la renovación automática vía cron o systemd timer.
Paso 3: Prueba la renovación automática
sudo certbot renew --dry-run
Si no hay errores, tu certificado se renovará sin intervención manual cada 60–90 días.
Ajustes de seguridad recomendados
Una vez activo HTTPS, refuerza la configuración SSL con estas directivas adicionales:
| Directiva Nginx | Valor recomendado | Para qué sirve |
|---|---|---|
ssl_protocols |
TLSv1.2 TLSv1.3 | Deshabilita TLS 1.0 y 1.1 (inseguros) |
ssl_session_tickets |
off | Mejora la seguridad hacia adelante (PFS) |
add_header Strict-Transport-Security |
"max-age=31536000; includeSubDomains" | Activa HSTS para forzar HTTPS en el navegador |
ssl_stapling |
on | Acelera la verificación OCSP del certificado |
Para más información sobre cabeceras de seguridad y cómo configurarlas correctamente, visita nuestra sección de seguridad SSL.
Verificar que la instalación es correcta
Después de recargar Nginx, verifica la instalación con estas herramientas:
- SSL Labs: ve a
ssllabs.com/ssltest/e ingresa tu dominio. Un resultado A o A+ confirma una configuración sólida. - Navegador: abre
https://tudominio.comy verifica el candado en la barra de dirección. - curl: desde terminal,
curl -I https://tudominio.comdebe devolver un200 OKsin advertencias SSL.
Si el sitio aún muestra advertencias de contenido mixto (imágenes o scripts cargados por HTTP), revisa que todas las URLs internas usen https://.
Si buscas un hosting con SSL incluido y soporte técnico experto, elenlace.com ofrece planes administrados donde nosotros nos encargamos de la instalación y renovación del certificado por ti.
Conclusiones clave
- Instalar SSL en Nginx requiere concatenar el certificado y la cadena intermedia en un solo archivo fullchain.
- El bloque
serveren Nginx debe escuchar en el puerto 443 con las directivasssl_certificateyssl_certificate_key. - Siempre agrega un bloque adicional que redirija el puerto 80 (HTTP) al 443 (HTTPS) con un
301. - Let's Encrypt con Certbot es la opción más sencilla: instala y renueva el certificado automáticamente.
- Valida el resultado en SSL Labs para confirmar que no hay vulnerabilidades ni errores de cadena.
¿Necesitas ayuda con la configuración de tu servidor? Contáctanos y nuestro equipo técnico instala y configura tu certificado SSL en Nginx sin costo adicional en planes elegibles.
Preguntas frecuentes
¿Cuál es la diferencia entre ssl_certificate y ssl_certificate_key en Nginx?
ssl_certificate apunta al archivo público (certificado + cadena intermedia concatenados), mientras que ssl_certificate_key apunta a la clave privada generada cuando creaste el CSR. Ambos archivos trabajan en par: el certificado prueba la identidad, la clave descifra la conexión.
¿Por qué Nginx no arranca después de agregar el SSL?
Lo más común es un error de sintaxis en el archivo de configuración o una ruta de archivo incorrecta. Ejecuta sudo nginx -t para ver el mensaje exacto. También puede ocurrir si la clave privada y el certificado no coinciden (fueron generados juntos en el mismo CSR).
¿Puedo usar el mismo certificado SSL para HTTP/2 en Nginx?
Sí. Agrega http2 a la directiva listen (como en el ejemplo: listen 443 ssl http2;). HTTP/2 requiere HTTPS, así que no puedes activarlo en el bloque de puerto 80.
¿Let's Encrypt funciona en cualquier servidor Nginx?
Funciona en cualquier servidor con acceso público a internet donde el dominio resuelva al IP correcto. No funciona en servidores locales o IPs privadas sin usar el método de validación DNS-01 con Certbot.
Compara proveedores
Otros proveedores y guías que vale la pena comparar: