DTL_LicenseServer — Manuel de référence

Description fonctionnelle et technique du service de licences

Version v1.0-6Date 21 juillet 2026Licence MITLangue English

Préface

DTL_LicenseServer est un service léger de gestion de licences destiné aux applications Windows. Il centralise la création des licences, l’autorisation des machines, la validation en ligne et la révocation, tout en évitant de placer les secrets du serveur ou un accès direct à la base de données dans le logiciel distribué.

Ce manuel constitue la référence descriptive du produit : il expose ses responsabilités, son architecture, ses données, ses interfaces et ses garanties. Il s’adresse aux responsables techniques, développeurs, exploitants et personnes chargées d’évaluer le système.

Hors périmètre. L’installation, la configuration, les commandes d’administration et les procédures d’intégration seront décrites dans un Guide de l’utilisateur séparé. Aucun mode opératoire n’est fourni ici.

Contexte et périmètre

Finalité

Le service associe un droit d’utilisation à un produit, une adresse électronique et un nombre maximal de machines. Il décide si une machine peut recevoir ou conserver une activation et produit un jeton signé attestant cette décision.

Frontières de confiance

Responsabilités exclues

DTL_LicenseServer n’est ni un système de paiement, ni un portail client, ni un annuaire d’identités. Il ne fournit pas d’interface graphique d’administration et ne remplace pas les contrôles d’accès, la sauvegarde ou la supervision de l’hébergement.

Architecture

Application Windows ── HTTPS / JSON ──► API PHP ──► MariaDB │ │ │ └── Ed25519 : signature des jetons └── empreinte SHA-256 + jeton local Outil d’administration ── HTTPS + X-Admin-Key ──► création de licences

API serveur

PHP 8.1+JSONHTTPS

Expose les opérations de santé, d’activation, de validation, de désactivation et de création administrative. La bibliothèque commune applique les contrôles, accède aux données et gère les signatures.

Base de données

MariaDBInnoDButf8mb4

Constitue la source d’autorité sur l’état d’une licence et de ses machines. Le schéma distribué se trouve dans database/netdtl_licenses.sql.

Outil d’administration

Python 3.10+Ligne de commande

Crée des licences par l’interface administrative et affiche la clé en clair une seule fois. Ses messages sont disponibles en français et en anglais.

Client embarquable

PythonWindows

Calcule une empreinte stable de la machine, dialogue avec le service et conserve le jeton d’activation signé ainsi que les métadonnées de contrôle.

Cycle de vie d’une licence

Licence créée
Machine activée
Jeton validé
Actualisation de la même machine
Désactivation et révocation du jeton
Réactivation si un quota est libre

Création

Une licence appartient à un produit et possède un courriel de référence, un état, une échéance facultative et un plafond d’activations. La clé en clair n’est renvoyée qu’à la création ; seule son empreinte SHA-256 est conservée ensuite.

Activation et actualisation

Le serveur vérifie le produit, la clé, le courriel, l’état, l’échéance et le quota. Une première machine obtient une ligne d’activation et un jeton Ed25519. Une demande ultérieure de la même machine non révoquée actualise ses informations sans consommer de place supplémentaire.

Désactivation et réactivation

La désactivation date la révocation de l’activation ; son jeton n’est alors plus valide. Si la même machine présente de nouveau les justificatifs de licence et qu’une place est disponible, le serveur réutilise sa ligne, efface la date de révocation et émet un nouveau jeton. Le quota est contrôlé avant cette réactivation.

États

ÉtatSignification
activeLa licence peut autoriser et valider des machines, sous réserve des autres contrôles.
suspendedLe droit est temporairement neutralisé.
revokedLe droit a été retiré.
expiredL’échéance de la licence est dépassée.

Modèle de données

ObjetRôle
productsCatalogue des produits pouvant recevoir des licences, avec code et état d’activation.
licensesIdentité du client, empreinte de la clé, état, échéance, quota et notes.
activationsAssociation entre une licence et une empreinte de machine, informations clientes et éventuelle révocation.
license_eventsHistorique des créations, décisions d’activation, refus et validations, avec contexte réseau.
admin_usersStructure réservée par le schéma ; elle n’est pas utilisée par l’API actuelle.
license_statusVue de synthèse facilitant la lecture de l’état et du nombre d’activations.

Jeton d’activation

Le jeton signé relie une décision à un produit, une licence, une activation et une machine. Sa charge utile comprend la version du format, product_code, license_id, activation_id, machine_id_hash et issued_at. Sa signature protège l’intégrité ; l’état courant reste vérifié côté serveur.

Capacités fonctionnelles

Le produit d’exemple du schéma porte le code MYPRODUCT et le nom MyProduct. Il illustre le caractère générique du service et n’impose pas le nom du logiciel licencié.

Interface de service

Toutes les réponses utilisent JSON. L’interface distingue l’observation de santé, les opérations portant sur une activation et la création administrative.

Point d’entréeMéthodeProtectionResponsabilité
health.phpGETAucuneÉtat du service et de la connexion MariaDB.
activate.phpPOSTClé de licence + courrielActivation, actualisation ou réactivation d’une machine.
validate.phpPOSTJeton signéValidation en ligne d’une activation existante.
deactivate.phpPOSTJeton signéRévocation de la machine courante.
admin_create_license.phpPOSTX-Admin-KeyCréation administrative d’une licence.

Classes de réponse

Les succès ordinaires utilisent les classes HTTP 200 et 201. Les requêtes invalides, authentifications absentes, refus de licence, objets inconnus et conflits de quota relèvent des classes 400. Les erreurs de configuration, signature ou base de données relèvent des classes 500. Les réponses contiennent un indicateur de succès et, en cas de refus, un code d’erreur stable.

Modèle de sécurité

Principe essentiel. Une signature valide atteste l’intégrité d’un jeton, pas l’état actuel de la licence. La validation en ligne reste l’autorité pour une suspension, une révocation, une expiration ou une désactivation postérieure.

Composants internes

ComposantResponsabilité
server/lib.phpConfiguration, connexion, réponses JSON, contrôles communs, jetons et journalisation.
server/activate.phpDécision d’activation, application du quota et émission du jeton.
server/validate.phpContrôle cryptographique et cohérence avec les données courantes.
server/deactivate.phpRévocation de l’activation désignée par le jeton.
server/admin_create_license.phpCréation protégée et restitution unique de la clé en clair.
server/health.phpIdentification de la version et état de MariaDB.
admin/DTLlicense.pyClient administratif en ligne de commande.
client/dtl_license_client.pyEmpreinte Windows, appels au service et persistance locale du jeton.
dtl_licenseserver_i18n.pyCatalogue bilingue partagé par les outils Python.

Invariants

Limites connues

La version du service est 1.0.6. Toute évolution du protocole, du schéma ou de la charge utile des jetons doit préserver la compatibilité ou annoncer explicitement sa rupture.

Glossaire

TermeDéfinition
LicenceDroit accordé pour un produit, un client et un nombre maximal de machines.
ActivationAssociation persistante entre une licence et l’empreinte d’une machine.
JetonAttestation signée émise par le serveur pour une activation.
EmpreinteCondensat SHA-256 dérivé des identifiants disponibles sur la machine Windows.
RévocationÉtat d’une activation dont le jeton ne doit plus être accepté.
QuotaNombre maximal d’activations simultanément non révoquées.