Repository navigation
feat(ca-server,ra-console): scellement des journaux par la TSA maison (constat J-1) - #103
Merged
Merged
Conversation
This was referenced Oct 19, 2026
PhilippeVienne
force-pushed
the
feat/journal-seal-ca-ra
branch
from
October 19, 2026 09:09
69f3a07 to
5fe753a
Compare
PhilippeVienne
marked this pull request as ready for review
October 20, 2026 17:07
… (constat J-1) Les journaux de ca-server et de ra-console n'étaient chaînés que par hachage, sans clé : une réécriture complète avec recalcul de la chaîne restait indétectable. Les deux services font désormais horodater la tête de leur chaîne par tsa-server, en HTTP, comme n'importe quel client RFC 3161 (log.sealed, jeton conservé), puis par les TSA tierces (log.cross_sealed), et en déposent une copie hors site si S3 est configuré (log.replicated), à chaque intervalle. - Nouveau crate oe-seal : la boucle de bin/tsa-server/src/seal.rs, généralisée par un trait Stamper (AuthorityStamper en mémoire pour la TSU, HttpStamper par oe_crosstsa::Client::attest pour les autres). JournalHealth/JournalReport passent dans oe-audit (réexportés par oe-httpapi). Les tests de la boucle passent avec elle ; tsa-server ne garde que ceux qui tiennent à sa TSU. - ca-server et ra-console : OPENEIDAS_TSA_URL (vide = pas de scellement, avertissement au démarrage), OPENEIDAS_AUDIT_SEAL_INTERVAL (_SECONDS pour la console), OPENEIDAS_CROSS_TSA_URLS (absente : FreeTSA et DigiCert ; vide : désactivé). /healthz rend l'état sous `journal` et passe le statut en « degrade » après trois passes en échec, sans 503 : les services restent utilisables, la sonde ne les redémarre pas. - Compose : la CA scelle via http://tsa:8318/tsa. Chart : ca.audit.sealInterval, raConsole.audit.sealIntervalSeconds, raConsole.crossTSA.urls (vide par défaut : la NetworkPolicy de la console n'ouvre les ports 80 et 443 que s'il est renseigné ; egress vers le pod TSA ajouté). La matrice de conformité n'est pas touchée (tranche J-d). Réf. #36 de l'audit (J-1), docs/AUDIT_2026_09_25.md. Co-authored-by: Claude <noreply@anthropic.com>
PhilippeVienne
force-pushed
the
feat/journal-seal-ca-ra
branch
from
October 20, 2026 17:11
5fe753a to
8623cfb
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tranche J-c du plan P1 (PROGRESSION.md §0), empilée sur #102 (base
feat/tsa-audit-cross-seal) : à rebrancher surdevaprès sa fusion.Ce que fait la PR
Les journaux de
ca-serveret dera-consolen'étaient chaînés que par hachage, sans clé. Les deux services font désormais horodater la tête de leur chaîne partsa-server, en HTTP, comme n'importe quel client RFC 3161 (log.sealed, jeton conservé), puis par les TSA tierces (log.cross_sealed), et en déposent une copie hors site si S3 est configuré (log.replicated), à chaque intervalle (décision du 2026-10-13 : scellement par la TSA maison, par HTTP).oe-seal: la boucle debin/tsa-server/src/seal.rsgénéralisée par un traitStamper(AuthorityStamperen mémoire pour la TSU ;HttpStamperviaoe_crosstsa::Client::attest, nouvelle méthode publique à une seule TSA avec erreur typée).JournalHealth/JournalReportpassent dansoe-audit(réexportés paroe-httpapi, rien ne change pourtsa-server). Les sept tests de la boucle passent avec elle (la TSA maison y est jointe en HTTP, comme en production) ;tsa-servergarde deux tests propres à sa TSU (jeton vérifié paropenssl ts -verify, horloge non traçable).ca-serveretra-console:OPENEIDAS_TSA_URL(vide = pas de scellement, avertissement au démarrage),OPENEIDAS_AUDIT_SEAL_INTERVAL(_SECONDSpour la console),OPENEIDAS_CROSS_TSA_URLS(absente : FreeTSA et DigiCert ; vide : désactivé),OPENEIDAS_CROSS_TSA_TIMEOUT./healthzrend l'état sousjournalet passestatutendegradeaprès trois passes en échec, sans 503 (sonde de vivacité ; les services restent utilisables). Testé dansbin/ca-server/tests/crl_publication.rsetbin/ra-console/tests/healthz.rs.http://tsa:8318/tsa; la TSA démarre après la CA, la première passe échoue et est reprise au bout d'une minute (SEAL_RETRY). La CI pose déjàOPENEIDAS_CROSS_TSA_URLS="": aucune TSA publique sollicitée.ca.audit.sealInterval,raConsole.audit.sealIntervalSeconds,raConsole.crossTSA.urls(vide par défaut : la NetworkPolicy de la console n'ouvre les ports 80/443 que s'il est renseigné ; egress vers le pod TSA ajouté). La CA reprendtsa.crossTSA.urls.docs/CA.mdetdocs/RA-CONSOLE.md.Hors périmètre (J-d) : la matrice (
REQ-7.10-02dit encore « ni scellés ni contresignés »),CONFORMITE-ETSI.md,ARCHITECTURE.md,CPS.md.Vérifications
cargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings: OKcargo test --workspace: OK (sans PostgreSQL ; les tests gardés parOE_CASTORE_TEST_DSNs'ignorent)cargo audit --ignore RUSTSEC-2023-0071: 4 avis surrustls0.23.45 (RUSTSEC-2026-0346 à 0349), indépendants de cette PR et présents surdev: PRchore(deps)séparée.helm lintethelm template(avecci/ra-console-values.yaml) : OK, variables et NetworkPolicy rendues comme attendu.https://claude.ai/code/session_017unSVWTcYebxj2tHbtFFVV