Por qué gestionar Let's Encrypt usted mismo en un VPS
Let's Encrypt es una autoridad de certificación gratuita que emite certificados TLS validados mediante un challenge automatizado (HTTP-01 o DNS-01). En un alojamiento compartido, usted sufre la configuración TLS del proveedor: versiones de protocolo impuestas, sin OCSP stapling, renovación opaca. En un VPS, usted controla certbot (o acme.sh), el reverse proxy y la terminación TLS. Usted decide los protocolos (solo TLS 1.2/1.3), las suites de cifrado, el HSTS y el grapado OCSP. También puede emitir un certificado wildcard (*.exemple.com) mediante el challenge DNS-01, cubrir varios dominios en un solo certificado (SAN) y conectar la renovación a sus propias alertas. En resumen: un control total sobre la seguridad de transporte, condición para lograr una puntuación A+ en SSL Labs y la máxima confianza del lado del navegador.
Lo que gana al autoalojar la cadena TLS
- Certificados 100% gratuitos, válidos 90 días y renovados automáticamente sin intervención.
- Wildcard
*.exemple.composible mediante el challenge DNS-01: un solo certificado para todos sus subdominios. - Control completo de la configuración: TLS 1.3, suites de cifrado modernas, HSTS y OCSP stapling.
- Certificados SAN multidominio (
exemple.com,www.exemple.com,api.exemple.com) sobre una misma IP. - Renovación programable y observable: hooks de recarga, alertas por Slack o correo antes del vencimiento.
- Sin dependencia de un panel de terceros: la misma receta funciona en todos sus VPS y entornos.
Requisitos realistas
La terminación TLS consume muy pocos recursos: un VPS de 1 vCPU y 512 MB a 1 GB de RAM basta de sobra para servir el HTTPS de uno o varios sitios. En cuanto al software: Docker y docker compose (o un Nginx/Caddy nativo), un nombre de dominio que apunte a la IP pública del VPS (registro A/AAAA propagado) y los puertos 80 y 443 abiertos en el firewall — el puerto 80 es indispensable para el challenge HTTP-01. Para un certificado wildcard, prevea un acceso API a su proveedor DNS (token) con el fin de automatizar el challenge DNS-01. Compruebe la propagación antes de empezar: dig +short exemple.com debe devolver la IP del VPS.
Desplegar HTTPS automatizado en unos pocos pasos
Apuntar el dominio y abrir los puertos
Cree un registro A
exemple.com(y AAAA si usa IPv6) hacia la IP del VPS y luego autorice el tráfico web:ufw allow 80,443/tcp. Confirme la resolución condig +short exemple.comantes de seguir adelante: un challenge siempre falla si el DNS todavía no apunta.Elegir el reverse proxy que gestiona TLS
Lo más sencillo:
Caddy, que obtiene y renueva Let's Encrypt automáticamente. UnCaddyfilemínimo —exemple.com { reverse_proxy app:3000 }— basta para servir HTTPS desde el primerdocker compose up -d. Para un control fino, opte más bien porNginx+certbot, oTraefikcon su resolver ACME integrado.Emitir el primer certificado (HTTP-01)
Con Nginx + Certbot en contenedor:
docker run --rm -v ./certs:/etc/letsencrypt -v ./webroot:/var/www certbot/certbot certonly --webroot -w /var/www -d exemple.com -d www.exemple.com. Certbot coloca un archivo de desafío en el webroot servido por Nginx, Let's Encrypt lo valida y depositafullchain.pem+privkey.pem.Emitir un wildcard mediante DNS-01 (opcional)
Para
*.exemple.com, el challenge HTTP-01 no sirve: utilice DNS-01. Conacme.shy un token de API:acme.sh --issue --dns dns_cf -d exemple.com -d '*.exemple.com'. El script crea un registro TXT_acme-challenge, espera la propagación y luego limpia automáticamente.Endurecer la configuración TLS
En Nginx, fuerce
ssl_protocols TLSv1.2 TLSv1.3;, activessl_stapling on;y añadaadd_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;. Redirija todo el puerto 80 hacia el 443. Recargue sin corte de servicio:nginx -s reload.Automatizar la renovación
Programe una renovación dos veces al día con recarga del proxy:
0 0,12 * * * docker run --rm -v ./certs:/etc/letsencrypt certbot/certbot renew --quiet --deploy-hook "nginx -s reload". Caddy y Traefik lo hacen de forma nativa; compruebe el vencimiento conecho | openssl s_client -connect exemple.com:443 2>/dev/null | openssl x509 -noout -dates.
Antes de pasar a producción, pruebe contra el entorno de staging de Let's Encrypt (--staging en Certbot, --server letsencrypt_test en acme.sh): el límite de producción es de 5 emisiones por dominio y por semana, y un script mal ajustado puede hacerle chocar con él muy rápido. Añada también una supervisión del vencimiento de los certificados: una sonda que ejecute openssl x509 -checkend 604800 (7 días) y dispare una alerta si la renovación automática ha fallado en silencio — un cron roto es la causa número uno de un HTTPS caducado en plena noche.