Skip to content

feat(ra-console): révocation d'un certificat, première signature (étape 4a) - #66

Open
PhilippeVienne wants to merge 1 commit into
feat/ra-console-action-executefrom
feat/ra-console-revoke
Open

PhilippeVienne wants to merge 1 commit into
feat/ra-console-action-executefrom
feat/ra-console-revoke

Conversation

@PhilippeVienne

Copy link
Copy Markdown
Contributor

Objet

docs/WEBUI.md §15 étape 4 (révocation et double contrôle), tranche 4a du découpage validé (4a : première signature → 4b : co-signature et salle d'attente). Empilée sur #65 (feat/ra-console-action-execute, tête 457dc7e à l'ouverture), elle-même sur #64. Ordre de merge : #64, #65, cette PR (rebase --onto origin/dev <tête de #65> à chaque étape).

  • La console prépare désormais revoke_certificate (en plus d'approve/reject) et relaie la signature par POST /api/v1/certificates/{serial}/revoke.
  • Deux ca_operateur distincts, par la politique de ca-server (jamais un champ de la console, §8) : la première signature est enregistrée par ca-server et rien n'est révoqué — réponse {"status": "AWAITING_QUORUM", "signatures": 1, "required": 2, "action_id", "signed_by"}. La co-signature arrive en 4b.
  • oe_actions::Expect gagne serial : ca-server compare le certificat de la route au corps figé avant toute consommation, comme pour une décision ; une cible sans rapport avec le type d'action (transaction_id sur une révocation) est refusée.
  • ra-console : relay_assertion factorise le relais d'une assertion (décisions, révocation) ; le numéro de série doit être sous forme canonique (hexadécimal minuscule, ≤ 20 octets) avant relais.
  • docs/RA-CONSOLE.md à jour.

Écart assumé avec le §8 (décision de l'utilisateur, appliquée en 4b)

Le §8 prévoyait que ra-console stocke les assertions dans ses propres tables de collecte et relaie le lot au seuil. Le code d'oe-actions fait mieux : ca-server enregistre chaque signature au fil de l'eau (decision_evidence) et n'exécute qu'au seuil. La console n'a donc jamais à conserver d'assertion ; en 4b, la salle d'attente lira la table actions de ca-server (SELECT ajouté au rôle en lecture seule) et le §8 sera mis à jour pour décrire ce qui est construit.

Vérifications

  • bin/ra-console/tests/action_challenge.rs, harnais doté d'une vraie CA sur PostgreSQL et du révocateur de ca-server : première signature enregistrée sans révocation ; assertion présentée pour un autre certificat refusée (action_mismatch), rien de consommé ; formes non canoniques refusées ; un ra_operateur ne peut pas préparer de révocation. Test unitaire d'Expect étendu.
  • Mutation (2 mutants, tous tués) : contrôle du numéro de série retiré d'Expect ; validation de forme retirée de la console.
  • cargo fmt --check, cargo clippy --workspace --all-targets -- -D warnings (1.97 et 1.98.1), cargo test --workspace avec PostgreSQL, cargo audit --ignore RUSTSEC-2023-0071 : verts.

Revue humaine obligatoire

Voir PROVENANCE.md. Chaque case est cochée par le
contributeur humain qui valide la PR, après l'avoir fait lui-même.

  • Revue d'architecture validée par l'humain
  • Code relu et tests unitaires/intégration vérifiés localement
  • Absence de dépendances tierces incompatibles avec la double licence EUPL-1.2 / AGPL-3.0 (make licenses)
  • Validation de l'apport intellectuel et de la paternité humaine sur la modification

Assistance par IA

  • Cette PR a été produite avec l'assistance de Claude Code : les commits concernés portent la remorque Co-authored-by: Claude <noreply@anthropic.com>, auteur et committer restent humains, et scripts/provenance.py archive a été lancé
  • Cette PR a été écrite sans assistance par IA

…pe 4a)

docs/WEBUI.md §15 étape 4, §8 : la console prépare `revoke_certificate`
et relaie la signature par `POST /api/v1/certificates/{serial}/revoke`.
La politique de ca-server exige deux ca_operateur distincts : la
première signature est enregistrée, rien n'est révoqué
(AWAITING_QUORUM, 1/2). La co-signature est l'étape 4b.

- oe_actions::Expect gagne `serial` : ca-server compare le certificat de
  la route au corps figé avant toute consommation, comme pour une
  décision ; une cible sans rapport avec le type d'action est refusée.
- ra-console : relay_assertion factorise le relais d'une assertion
  (décisions et révocation) ; numéro de série exigé sous forme
  canonique (hexadécimal minuscule, 20 octets au plus) avant relais.
- Tests : harnais doté d'une vraie CA sur PostgreSQL et du révocateur de
  ca-server ; première signature sans révocation, mauvaise cible,
  forme non canonique, refus pour un ra_operateur. Deux mutations tuées.

Co-authored-by: Claude <noreply@anthropic.com>
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