Table of Contents | ||||
---|---|---|---|---|
|
Resumen
Se pretende implementar una solución para la gestión de licencias de forma flexible, tanto para proyectos que tengan acceso a Internet como para otros que no estén preparados para ello.
Introducción
La solución tiene que ser flexible y permitir manejar muchos tipos de features (o características) ajustables
por cliente y proyecto, incluyendo revocación por features y demás.
Se contempla la solución en dos modelos diferentes:
Software as a Service: los clientes usarían nuestras licencias y se podría comprobar, por ejemplo una vez al día contra nuestros sistemas si su licencia es correcta.
Almacenamiento en una base de datos no relacional las licencias, claves y demás al ser
binarios/base64, con la seguridad necesaria.Creación de una API para revocar licencias y consultarlas.
Almacenamiento de claves pública y privada por cliente, sin necesidad de almacenarlo en
un fichero físico.Definición de una forma de revocar las licencias, forma adicional a la fecha de expiración.
On Premise: aquí entraría la problemática de que no podemos garantizar que no se corrompa el código usando ingeniería inversa y quitar de este mismo las comprobaciones de la licencia. En caso de que se produzca un uso fraudulento de nuestro producto siempre podríamos comprobar en nuestro sistema cuando ha caducado la licencia y mediante una auditoría ver cuánto tiempo lleva el cliente usándola ilegalmente.
En este caso no podría revocarse la licencia, dado el supuesto de que no haya acceso a
Internet.
Diseño Funcional
Una licencia es un binario (texto cifrado) que contiene una serie de características definidas por el usuario y
que soportaría los siguientes tipos de datos:
...
Un usuario para poder tener permisos CRUD de una licencia de un proyecto deberá estar dado de alta en el
sistema en ese proyecto y tener los permisos necesarios para las operaciones. Un usuario administrador de
un proyecto tendría sentido que pudiera modificar y revocar la licencia. Sin embargo, un usuario consumidor
de la misma no debería tener más allá de permisos de lectura.
Funcionalidad core
Un usuario administrador de un proyecto que quiera trabajar con licencias podrá a través del backoffice (License Management):
...
Comprobar que su licencia es válida
Correctamente firmada
No está revocada
No está expirada
Obtener las características asociadas a esa licencia
Arquitectura y diseño técnico
Uso de License3j
License3j es una librería open source para administrar licencias en programas Java. Un archivo de licencia
es un archivo de configuración especial que está firmado de forma electrónica. Esta librería puede crear y
firmar licencias además de comprobar los parámetros con los que ha sido creada.
Entre sus características encontramos:
Creación y manipulación de features de muchos tipos, desde enteros, hasta strings, fechas y
UUIDsCreación y lectura de claves públicas y privadas indicando el algoritmo de forma sencilla (o
compleja, según se requiera).Creación y manipulación de licencias, añadiendo firmado en la misma licencia (no se firma la licencia completa, sino que se añade un atributo de firma a través de la clave privada indicada)
Lectura y escritura de licencias en archivos. Lectura y escritura de claves en archivos.
Bindeo de licencia a Hardware concreto, pudiendo negar su uso si no se trata del hardware indicado
(esta parte es más compleja, pero es posible)Manejo de licencias revocadas.
Diseño
...
Planificación
Durante el Q2 se pretende dar solución al modelo Software as a Service, implementando la solución de:
...
Integración con control center
...
API de gestión de licencias y productos (si fuera necesario).
...
Sistema de autenticación y comprobación de roles.
...
la Q2 se han creado las APIs para la gestion de licencias y tipos así como para la validacion de los datos.
Las licencias pueden crearse desde el front aportando los datos necesarios.
...
Una vez rellenos los campos, se nos da la opcion de seleccionar los modulos disponibles en el producto, así como establecer una fecha de expiración del módulo, y de crear features propias.
...
Se ha desarrollado tambien una api para la verificacion de las licencias a traves de los ficheros codificados de licencias que se generan y a través de un identificador hash de la licencia.
Una vez con la licencia creada, podemos generar ficheros para su verificacion.
Así mismo, está disponible también la creación de tipos de licencia.
...
Creándose con un procedimiento similar a las licencias, una vez esté creada podremos seleccionar un tipo de licencia a la hora de crear una licencia, viniendo ésta con módulos predefinidos, o crear un tipo de licencia más adaptado a nuestras necesidades.
Está finalizado el desarrollo de la API que hace uso de los ficheros generados de las licencias para verificar su autenticidad e integridad.
Así mismo se están desarrollando en este momento las librerías para la comprobación de licencias, tanto en su versión API como en su versión sin conexión.
Durante el Q3 se complementarían el resto de:
...