Skip to content

feat(probe): mTLS, enrôlement par jeton à usage unique et révocation (#1101) - #1283

Merged
deusyv merged 3 commits into
devfrom
feat/1101-mtls-enrolement
Nov 14, 2026
Merged

deusyv merged 3 commits into
devfrom
feat/1101-mtls-enrolement

Conversation

@deusyv

@deusyv deusyv commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

Implémente l'issue #1101 : la couche sécurité mTLS du chantier sondes (#1002) — autorité, enrôlement par jeton à usage unique, révocation.

Contenu

  • netcross_probe.securite : autorité de confiance (certificat auto-signé EC P-256), signature de CSR de sonde avec SAN URI urn:netcross:probe:<probe_id>, vérification de certificat client (révoquée / autorité étrangère / sans identité / expirée refusées), contextes mTLS (côté collecteur : refus sans certificat client ; côté sonde : URLLib) ;
  • netcross_probe.enrolement : client de la sonde — POST /probe/v1/enrollments avec jeton à usage unique et CSR PKCS#10 (EC P-256 par défaut), réponse probe_id + certificat client + chaîne CA + expiration ; parcours d'échec exhaustif (426, 409, 400, URLError) ; secrets jamais journalisés ;
  • netcross_api.probe_routes : route d'enrôlement du collecteur (la seule du contrat sans certificat client) — jetons hachés à usage unique, refus 400/401/409/426 conformes au contrat, réponse 400 (et non 422) pour payload malformé ;
  • révocation : une sonde révoquée est rejetée à la ré-inscription (401 probe_revoked) et son certificat refusé à la poignée de main mTLS ;
  • docs : probe-agent.md (section Sécurité), probe-api-v1.yaml appliquées, parite-surfaces.md (69 routes), CHANGELOG.md, class diagram régénéré.

Reste pour #1105 (collecteur)

Les routes d'inventaire/santé et probe:// (issue #1105) brancheront ce socle sans le réécrire.

Checklist qualité

  • ruff check / ruff format --check : OK
  • mypy : 0 erreur (255 fichiers)
  • audit_debug_entrees.py : 556/556
  • audit_debug_sorties.py : 4615/4615
  • generate_class_diagram.py : régénéré
  • mkdocs build --strict : OK
  • Suite complète : 7208 passés, 98 sautés

Refs #1101

…1101)

- module netcross_probe.securite : contexte SSL custom pour vérifier le
  SAN URI urn:netcross:probe:<probe_id> côté collecteur (PKIX-SSH §5
  sans SNI), et URLLib context côté probe (PKIX-SSH §7) ;
- module netcross_probe.enrolement : POST /probe/v1/enrolments avec
  CSR PKCS#10, jeton à usage unique, réponse probe_id + chaîne mTLS ;
- routes /probe/v1/security/* : état (révoqué + validité), révocation,
  jetons d'enrôlement, réponse 400 (et non 422) pour payload malformé ;
- docs probe-agent.md, parite-surfaces.md (69 routes), probe-api-v1.yaml
  appliquées (7 nouvelles), CHANGELOG.md, class diagram régénéré.

Refs #1101
@github-actions

github-actions Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

Couverture de tests (delta vs dev)

Métrique Base (dev) PR Δ
Couverture 98.2 % 98.2 % -0.0 pt
Instructions couvertes 32952/33400 33254/33706 +302
Branches couvertes 9671/9990 9699/10022 +28

Seuil bloquant : 95.0 % (fail_under, #246), marge 3.2 pt.

deusyv and others added 2 commits November 14, 2026 07:06
Conflits résolus : CHANGELOG (entrées #1101 et #1103 conservées),
docs/parite-surfaces.md (71 routes FastAPI), docs/class-diagram.md
régénéré par scripts/generate_class_diagram.py.

Co-authored-by: Perplexity <noreply@perplexity.ai>
@deusyv
deusyv merged commit ce93dea into dev Nov 14, 2026
9 checks passed
@deusyv
deusyv deleted the feat/1101-mtls-enrolement branch November 14, 2026 11:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant