Caronte
Servidor de licencias
Caronte es el servidor de licencias que gobierna la activación de los productos del ecosistema. Genera y valida claves, controla cuántos dispositivos puede activar cada licencia y qué funcionalidades habilita, y resuelve el caso incómodo de todo sistema de licencias: validar sin conexión. Lo hace emitiendo tokens firmados con Ed25519 y una caducidad configurable, de modo que un cliente sin red siga funcionando durante una ventana acotada sin que eso abra la puerta a usarlo indefinidamente.
Qué hace
Es la pieza que decide si un producto puede arrancar, y tiene que dar esa respuesta tanto con red como sin ella.
- Genera claves de licencia con un formato propio y controla su ciclo de vida.
- Soporta licencias perpetuas, por suscripción y de prueba.
- Limita por asientos cuántos dispositivos pueden activar una misma licencia.
- Habilita o deshabilita funcionalidades concretas por licencia mediante entitlements.
- Valida en línea o fuera de línea con tokens firmados en Ed25519 y caducidad configurable.
- Expone la validación por REST y por gRPC, para que cada producto use el protocolo que le conviene.
- Registra en auditoría toda operación sobre licencias y avisa por correo de caducidades y activaciones.
Arquitectura
Se descompone en servicios pequeños detrás de un gateway, con la criptografía elegida para que la validación offline no dependa de compartir un secreto.
- Gateway de API en Rust sobre Axum como único punto de entrada.
- Servicios separados de licencias, validación y notificaciones, cada uno con su responsabilidad acotada.
- Doble protocolo en el servicio de validación: REST para integraciones sencillas y gRPC para las que necesitan latencia baja.
- Firma asimétrica Ed25519 para los tokens offline: el cliente verifica con la clave pública y nunca custodia un secreto capaz de emitir licencias.
- Contraseñas con Argon2id y claves de API almacenadas como SHA-256.
- PostgreSQL 16 como almacén, accedido con SQLx y consultas verificadas en compilación.
- Dashboard de administración en Next.js y despliegue completo con Docker Compose en un solo comando.
Stack
Servicios en Rust sobre Axum para la parte REST y tonic para gRPC, con SQLx contra PostgreSQL 16. La criptografía combina Ed25519 para los tokens offline, Argon2id para contraseñas y SHA-256 para claves de API. El panel de administración es Next.js 16 con TypeScript y Tailwind, y todo el conjunto se levanta con Docker Compose, con integración continua en GitHub Actions y Jenkins.