Despliegue TLS para Studio

OpenADS Studio escucha hoy en HTTP plano (openads_serverd --http-port N). El protocolo wire tiene su propio URI tls:// para TLS cliente-side (M12.12, mbedtls 3.6 LTS empaquetado), pero la consola HTTP embebida usa cpp-httplib, que solo soporta TLS vía OpenSSL — no bundlamos OpenSSL para mantener el binario ligero.

Para servir Studio sobre HTTPS en producción, termina TLS delante del daemon. Tres opciones probadas; todas dejan openads_serverd escuchando en 127.0.0.1 para que solo el proxy sea accesible desde la red.

Opción 1 — Caddy (recomendada)

Caddy auto-provisiona certificado Let’s Encrypt, redirige HTTP → HTTPS, configura TLS sanos, recarga config al cambio. Caddyfile:

studio.midominio.com {
    reverse_proxy 127.0.0.1:6263
}
sudo apt-get install caddy
sudo nano /etc/caddy/Caddyfile        # pega el snippet
sudo systemctl reload caddy

Studio ya accesible en https://studio.midominio.com/. Cert renovado automáticamente; Caddy hace OCSP stapling.

Opción 2 — nginx

server {
    listen 443 ssl http2;
    server_name studio.midominio.com;

    ssl_certificate     /etc/letsencrypt/live/studio.midominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/studio.midominio.com/privkey.pem;

    location / {
        proxy_pass         http://127.0.0.1:6263;
        proxy_http_version 1.1;
        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 https;
    }
}

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

Combinar con certbot --nginx -d studio.midominio.com para cert Let’s Encrypt.

Opción 3 — stunnel (solo terminación TLS)

Superficie menor que HTTP proxies completos — stunnel solo envuelve socket plano en TLS.

# /etc/stunnel/openads.conf
[studio]
accept  = 0.0.0.0:443
connect = 127.0.0.1:6263
cert    = /etc/stunnel/openads-fullchain.pem
key     = /etc/stunnel/openads-key.pem
sudo apt-get install stunnel4
sudo systemctl enable --now stunnel4

Opción 4 — Túnel SSH (zero-config, single user)

Cuando solo un admin necesita Studio y ya hay login SSH:

ssh -L 6263:localhost:6263 user@server.midominio.com
# abrir http://localhost:6263 en navegador

SSH cifra todo el tráfico HTTP; el daemon sigue escuchando en 127.0.0.1:6263 dentro del host remoto.

Postura recomendada

+--------+      HTTPS        +-------+   HTTP plano       +-----------------+
| Browser| ---------------→ | Caddy | -----------------→ | openads_serverd |
+--------+   TLS público     +-------+    127.0.0.1:6263  +-----------------+
                              ↑                                ↓
                          Let's Encrypt                    data dir

Flags daemon:

openads_serverd \
    --port 6262 \
    --http-port 6263 \
    --data /srv/openads/data \
    --http-user admin:password-fuerte

Combina TLS del proxy con --http-user — aunque se comprometiera el TLS terminator, las credenciales siguen siendo requeridas para cualquier API call.

HTTPS nativo en serverd

Una opción CMake OPENADS_WITH_OPENSSL=ON está en roadmap. Lincaría backend OpenSSL de cpp-httplib, aceptaría flags --tls-cert <pem> --tls-key <pem>, y serverd serviría HTTPS sin proxy. Estado: planeado para milestone futuro studio.web.x; mientras tanto, terminar TLS en proxy.