TrafficServerLocal/core/data/certs
merios 33c368936e feat: infraestructura base de Traefik + generador de proyectos
- core/: reverse proxy Traefik v3 (HTTP 80 / HTTPS 443)
  - traefik.yml con provider Docker (exposedByDefault: false) y provider file
  - dynamic_tls.yml sanitizado con certificados .local comentados
  - certs/README.md con procedimiento de certificados auto-firmados
- init_project.sh: generador de proyectos base (SRV_DIR configurable)
  - plantilla compose con redireccion HTTP->HTTPS + Let's Encrypt
  - bloque alternativo comentado para dominios .local
- README.md: documentacion integral (puesta en marcha, HTTP/HTTPS,
  troubleshooting y seguridad)
- docs/arquitectura.md: guia de instalacion y gestion de URLs
- docs/http-https.md: referencia de etiquetas Traefik, TLS y certresolver
- .gitignore: excluye .env, acme.json, certificados, datos y respaldos
2026-10-15 11:34:39 -03:00
..
README.md feat: infraestructura base de Traefik + generador de proyectos 2026-10-15 11:34:39 -03:00

Certificados locales (.local)

Este directorio aloja los certificados auto-firmados que usan los dominios internos (*.local). Está montado en el contenedor de Traefik como:

- ./data/certs:/etc/traefik/certs:ro

⚠️ El contenido de esta carpeta NO se versiona (ver .gitignore): las claves privadas no deben salir del servidor.


1. Generar un certificado auto-firmado

Desde la raíz del repositorio:

cd core/data/certs

openssl req -x509 -nodes -days 3650 \
  -newkey rsa:2048 \
  -keyout miapp.local.key \
  -out    miapp.local.crt \
  -subj   "/CN=miapp.local" \
  -addext "subjectAltName=DNS:miapp.local"

Archivos resultantes:

Archivo Descripción
miapp.local.crt Certificado público (se puede distribuir)
miapp.local.key Clave privada — permisos 600, nunca se comparte

Si el certificado debe cubrir varios nombres en un solo .crt:

openssl req -x509 -nodes -days 3650 \
  -newkey rsa:2048 \
  -keyout intranet.local.key \
  -out    intranet.local.crt \
  -subj   "/CN=intranet.local" \
  -addext "subjectAltName=DNS:intranet.local,DNS:app.intranet.local,DNS:api.intranet.local"

2. Declararlo en Traefik

Editar ../dynamic_tls.yml y descomentar el bloque con la ruta interna:

tls:
  certificates:
    - certFile: /etc/traefik/certs/miapp.local.crt
      keyFile:  /etc/traefik/certs/miapp.local.key

3. Recargar el proxy

cd ../../          # desde core/
docker compose restart traefik
docker logs -f core-proxy

dynamic_tls.yml tiene watch: true, pero reiniciar es la forma más segura de confirmar que el certificado se cargó.

4. Etiquetar el proyecto

El router debe declarar tls=true sin certresolver (el certificado ya lo aporta el provider file):

labels:
  - "traefik.enable=true"
  - "traefik.docker.network=proxy_network"
  - "traefik.http.routers.miapp.rule=Host(`miapp.local`)"
  - "traefik.http.routers.miapp.entrypoints=websecure"
  - "traefik.http.routers.miapp.tls=true"
  - "traefik.http.services.miapp.loadbalancer.server.port=80"

5. Resolver el nombre en el cliente

En cada máquina que deba acceder al sitio:

echo "192.168.1.50  miapp.local" | sudo tee -a /etc/hosts

6. Evitar el aviso del navegador

El navegador mostrará "certificado no confiable" porque es auto-firmado. Opciones:

  • Windows: certutil -addstore -f "ROOT" miapp.local.crt (PowerShell admin).
  • Linux (systemd): copiar a /usr/local/share/ca-certificates/ y ejecutar sudo update-ca-certificates.
  • macOS: doble clic sobre el .crt → Añadir al llavero → Confiar.
  • Firefox no usa el almacén del sistema:Settings → Certificates → Import.

Certificados reales que usa este servidor

Los certificados de producción de los dominios públicos no viven acá: los emite Let's Encrypt y Traefik los guarda en ../acme.json (también excluido del repositorio).