Guías de instalación

Instalar un certificado SSL: Let's Encrypt

Le explicamos paso a paso cómo obtener un certificado SSL gratuito de Let's Encrypt con Certbot e instalarlo en Nginx o Apache, además de la renovación automática y la redirección a HTTPS.

Aurora YazılımEquipo editorial 6 min de lectura
Instalar un certificado SSL: Let's Encrypt
¿Cómo instalar un certificado SSL con Let's Encrypt?

Para instalar un certificado SSL, su dominio debe apuntar al servidor y el puerto 80 debe estar abierto. Instala Certbot en el servidor y ejecuta sudo certbot --nginx o --apache; Certbot obtiene el certificado, configura el servidor web y activa la renovación automática. El último paso es probar la renovación con certbot renew --dry-run.

¿Qué son Let's Encrypt y Certbot?

Let's Encrypt es una autoridad de certificación sin ánimo de lucro, gestionada por ISRG, que emite gratis certificados con validación de dominio (DV). Si quiere saber para qué sirve un certificado y qué tipos existen, consulte antes nuestro artículo qué es un certificado SSL.

Certbot, por su parte, es el cliente oficial desarrollado por la EFF, que se comunica con Let's Encrypt mediante el protocolo ACME. Solicita el certificado, comprueba que el dominio le pertenece, configura Nginx o Apache y programa la renovación.

Los certificados de Let's Encrypt son de corta duración: la validez por defecto es de 90 días y la entidad ha anunciado que reducirá este plazo de forma gradual. Por eso, confíe siempre en la renovación automática en lugar de la manual.

Lista de comprobación previa

El punto en el que Certbot falla con más frecuencia es la validación del dominio. Si se cumplen los puntos siguientes, la instalación suele terminar en pocos minutos.

  • Los registros A y AAAA del dominio apuntan a la IP correcta del servidor (si existe un registro AAAA, el sitio también debe responder por IPv6)
  • Los puertos 80 y 443 del servidor están abiertos en el cortafuegos
  • Nginx o Apache están en marcha y hay un bloque de servidor o host virtual definido para el dominio
  • Puede conectarse al servidor por SSH con un usuario con permisos sudo
  • Si utiliza un proxy como Cloudflare, sabe cómo está configurado en la primera instalación
bashComprobación de DNS y puertos
dig +short ornek.com A
dig +short www.ornek.com A
sudo ufw status
# Si utiliza Nginx
sudo ufw allow 'Nginx Full'

Instalar Certbot paso a paso

El sitio oficial de Certbot, certbot.eff.org, recomienda el paquete snap para Ubuntu y Debian; así Certbot se mantiene actualizado con independencia de la distribución. Si no desea usar snap, también funcionan los paquetes apt de la propia distribución.

Con snap (recomendado)

Si en el sistema ya hay un paquete certbot instalado con apt, desinstálelo antes para evitar conflictos.

bash
sudo apt remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
certbot --version

Con el paquete apt

Con este método también debe instalar el paquete del complemento correspondiente a su servidor web.

bash
sudo apt update
# Para Nginx
sudo apt install certbot python3-certbot-nginx
# Para Apache
sudo apt install certbot python3-certbot-apache

Obtener e instalar el certificado en el servidor

Gracias a su complemento, Certbot lee su configuración actual y, según los valores de server_name o ServerName, le pregunta para qué dominios quiere obtener el certificado. Lo más recomendable es incluir en el mismo certificado tanto el dominio sin www como la versión con www.

Durante el comando se le pide una dirección de correo y que acepte las condiciones de uso. Certbot publica un archivo temporal de validación en la ruta .well-known/acme-challenge y Let's Encrypt lo lee por el puerto 80 para comprobar que el dominio es suyo.

  • Los archivos del certificado se guardan en /etc/letsencrypt/live/ornek.com/.
  • fullchain.pem contiene el certificado del servidor junto con el intermedio; use este en el servidor web.
  • privkey.pem es la clave privada; no la copie ni la comparta en ningún sitio.
bashNginx
sudo certbot --nginx -d ornek.com -d www.ornek.com
bashApache
sudo certbot --apache -d ornek.com -d www.ornek.com
bashSolo el certificado (método webroot)
sudo certbot certonly --webroot -w /var/www/ornek.com/html \
  -d ornek.com -d www.ornek.com

¿Cómo configurar la renovación automática?

Los paquetes snap y apt añaden durante la instalación un temporizador de systemd o una tarea cron. Esta tarea se ejecuta varias veces al día y renueva los certificados que están a punto de caducar. Lo único que debe hacer es comprobar que la renovación funciona de verdad.

Como Let's Encrypt dejó de enviar correos de aviso de caducidad, conviene vigilar la fecha de vencimiento del certificado con su propia herramienta de monitorización. También puede definir un gancho de renovación (deploy hook) para que el servidor web lea el nuevo certificado tras cada renovación.

bash
sudo certbot renew --dry-run
sudo certbot certificates
systemctl list-timers | grep -i certbot

# Hook que recarga Nginx tras cada renovación correcta
echo '#!/bin/sh
systemctl reload nginx' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Redirección a HTTPS y contenido mixto

Los complementos de Certbot para Nginx y Apache suelen añadir por usted la regla que redirige las peticiones HTTP a HTTPS. Si prefiere hacerlo a mano, utilice una redirección 301 permanente; así los buscadores trasladan el valor de las direcciones antiguas a la nueva.

En los alojamientos compartidos con Apache se hace lo mismo con el archivo .htaccess; las reglas detalladas están en nuestra guía de redirecciones con htaccess. Si tras la redirección la página sigue cargando por http:// alguna imagen, script o fuente, el navegador muestra un aviso de contenido mixto; sustituya esas direcciones por https o por rutas relativas.

nginxRedirección manual en Nginx
server {
    listen 80;
    listen [::]:80;
    server_name ornek.com www.ornek.com;
    return 301 https://ornek.com$request_uri;
}

HSTS y ajustes TLS seguros

Una vez que la redirección funciona, con la cabecera HSTS puede indicar al navegador que, a partir de ahora, abra su sitio solo por HTTPS. Esta cabecera impide que, después de la primera visita, alguien se interponga y degrade la conexión a HTTP.

No active HSTS con una duración larga a la ligera. Si alguno de sus subdominios aún no admite HTTPS, se cortará el acceso a esa dirección. Pruebe primero con un valor max-age corto y, si todo va bien, amplíe el plazo; añada las opciones includeSubDomains y preload solo cuando esté seguro de que todos los subdominios están listos.

Los complementos de Certbot para Nginx y Apache añaden un archivo de configuración con ajustes de protocolo TLS actuales y seguros. Mantenga desactivadas las versiones antiguas TLS 1.0 y 1.1; revisar periódicamente la configuración del servidor con herramientas de prueba públicas como SSL Labs le permite detectar a tiempo un ajuste débil que haya pasado inadvertido.

nginxPrueba de HSTS de corta duración
# Dentro del bloque de servidor 443
add_header Strict-Transport-Security "max-age=300" always;

Verificación y errores frecuentes

No se conforme con el candado del navegador: verifique también la instalación desde la línea de comandos. Los comandos siguientes muestran quién emitió el certificado, su fecha de caducidad y la cadena de redirecciones.

ErrorSolución
Timeout during connectEl puerto 80 está cerrado o el DNS apunta a otro servidor; revise el cortafuegos y el registro A.
Unauthorized / 404 challengeNo se puede leer el archivo de validación; compruebe la ruta webroot y las reglas de redirección.
Too many certificatesSe han hecho demasiados intentos en poco tiempo; realice las pruebas con --dry-run o --staging.
Could not find a server blockLa línea server_name no incluye el dominio; añádalo al bloque de servidor y pruebe con nginx -t.
Certificado antiguo en el navegadorEl servidor web no se ha recargado; use el comando reload o el deploy hook.
bash
curl -I http://ornek.com
curl -I https://www.ornek.com
openssl s_client -connect ornek.com:443 -servername ornek.com </dev/null 2>/dev/null \
  | openssl x509 -noout -issuer -dates

Certificado comodín, Windows y paneles

Un certificado comodín (wildcard) con la forma *.ornek.com solo se obtiene mediante validación DNS. Si Certbot dispone de un complemento específico para su proveedor de DNS, la renovación es automática; los certificados obtenidos con --manual, en cambio, le obligan a añadir a mano el registro TXT cada vez.

Si utiliza Windows Server e IIS, puede lograr el mismo resultado con clientes de Windows compatibles con el protocolo ACME. Los paneles de alojamiento suelen ofrecer la compatibilidad con Let's Encrypt como una opción de un solo clic; en ese caso no necesita escribir ningún comando en el servidor.

HTTPS es solo una parte del trabajo de velocidad y seguridad. Si se aborda junto con HTTP/2, las cabeceras de caché y la compresión, se gana tanto en confianza como en rendimiento; en nuestros proyectos de diseño web SEO planificamos estas capas desde el principio.

bash
sudo certbot certonly --manual --preferred-challenges dns \
  -d ornek.com -d "*.ornek.com"

Preguntas frecuentes

01¿Hay diferencia de seguridad entre un SSL gratuito y uno de pago?

En cuanto a la fuerza del cifrado no hay diferencia; ambos utilizan los mismos estándares. Los certificados de pago ofrecen servicios adicionales, como validación de la organización (OV, EV), póliza de garantía o soporte. Si no hay un requisito contractual corporativo, Let's Encrypt es suficiente para la mayoría de los sitios.

02¿Qué pasa si el certificado no se renueva?

Con un certificado caducado, los navegadores muestran al visitante un aviso de seguridad a pantalla completa y la mayoría de las personas abandonan el sitio. Además, dejan de funcionar las páginas de pago y las conexiones de API. Por eso hay que probar la renovación el día de la instalación y vigilar la fecha de vencimiento.

03¿Funciona Certbot si uso Cloudflare?

Funciona, pero con el proxy activo la validación HTTP a veces puede atascarse. Puede usar el propio certificado de origen de Cloudflare o ejecutar Certbot con validación DNS; elegir el modo SSL Full (strict) es el camino más seguro.

Un sitio instalado con Certbot, con la renovación probada y redirigido a HTTPS transmite confianza tanto al visitante como al buscador. Si quiere abordar a la vez el certificado, las redirecciones y los ajustes del servidor, eche un vistazo a nuestro servicio de gestión de velocidad y rendimiento o a nuestras soluciones de diseño web, que cubren todo el proceso. Si va a montar una tienda, también puede conocer las opciones de plataforma de e-commerce en las que gestionamos por usted el certificado y el servidor, y para cualquier duda puede escribirnos desde la página de contacto.