Skip to content

feat(ca): dépôt public des certificats + marquage STAGING - #10

Merged
PhilippeVienne merged 1 commit into
devfrom
feat/ca-repository-page-staging-naming
Sep 13, 2026
Merged

PhilippeVienne merged 1 commit into
devfrom
feat/ca-repository-page-staging-naming

Conversation

@PhilippeVienne

Copy link
Copy Markdown
Contributor

Résumé

  • ca-server sert une page HTML sur GET / : sujet, émetteur, numéro de série, validité et empreinte SHA-256 de chaque certificat de la hiérarchie chargée (émetteur puis racine), plus les liens vers .cer/.crl/chaîne PEM/matrice de conformité déjà servis en brut. Aucun texte « staging » codé en dur : la page ne fait qu'afficher le Subject réel des certificats.
  • values-staging.yaml fixe des noms explicites (Open eIDAS STAGING Root CA - NE PAS UTILISER EN PRODUCTION, etc.) pour root/issuing/TSU/OCSP — jusqu'ici identiques à ce qu'une vraie CA de production porterait.

⚠️ Le changement de noms n'a aucun effet rétroactif : la cérémonie de clé est idempotente et ne se rejoue pas d'elle-même. La hiérarchie déjà amorcée sur le staging actuel garde ses noms actuels tant qu'elle n'est pas explicitement recréée (tokens SoftHSM + état + registre PostgreSQL effacés) — étape distincte, sur le cluster, qui reste à confirmer séparément.

Plan de test

  • cargo test -p ca-server (nouveau test : la page liste bien le sujet réel de chaque certificat)
  • cargo clippy --workspace --all-targets -- -D warnings, cargo fmt --check
  • helm template avec values-staging.yaml : les nouveaux CN sont bien injectés
  • CI verte

- ca-server sert désormais une page HTML lisible sur GET / : sujet,
  émetteur, numéro de série, validité et empreinte SHA-256 de chaque
  certificat de la hiérarchie chargée, plus les liens vers les
  ressources déjà servies en brut (.cer, .crl, chaîne PEM, matrice de
  conformité). Aucune mention 'staging' codée en dur : c'est le Subject
  réel des certificats qui identifie l'environnement.
- values-staging.yaml fixe désormais des noms explicites
  ('Open eIDAS STAGING Root CA - NE PAS UTILISER EN PRODUCTION', etc.)
  pour root/issuing/TSU/OCSP — jusqu'ici identiques à ce qu'une vraie CA
  de production porterait. N'a d'effet que sur une prochaine cérémonie
  de clé : la hiérarchie déjà amorcée sur le staging actuel n'est pas
  renommée rétroactivement.
Copilot AI lite review requested due to automatic review settings September 13, 2026 11:15
@PhilippeVienne
PhilippeVienne merged commit 9329b5f into dev Sep 13, 2026
8 checks passed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved moderate issues remain with public route exposure and masked serialization failures.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Adds a public CA HTML repository page with certificate metadata and explicit STAGING certificate names.

Changes:

  • Exposes certificate subjects, validity, fingerprints, and download links.
  • Adds STAGING identities in Helm values.
  • Adds integration coverage and the sha2 dependency.
File summaries
File Description
deploy/helm/open-eidas/values-staging.yaml Defines explicit STAGING certificate names.
Cargo.lock Records dependency updates.
bin/ca-server/tests/crl_publication.rs Tests the public repository page.
bin/ca-server/src/http.rs Implements HTML rendering and certificate metadata.
bin/ca-server/Cargo.toml Adds SHA-256 support.
Review details

Suppressed comments (4)

bin/ca-server/src/http.rs:195

  • En cas d'échec de sérialisation, unwrap_or_default() hash une tranche vide et la page affiche donc l'empreinte SHA-256 de l'entrée vide comme si elle appartenait au certificat rendu. Cela masque l'erreur et produit une métadonnée impossible à vérifier ; faites remonter l'échec ou rendez explicitement le certificat indisponible au lieu de substituer des octets vides.
        let der = cert.to_der().unwrap_or_default();

bin/ca-server/src/http.rs:289

  • Cette nouvelle route publique n'est pas ajoutée au tableau des chemins de publication de docs/CA.md, qui ne liste actuellement que /download et /api/v1. Les opérateurs et auditeurs ne découvriront donc ni le dépôt HTML ni les métadonnées qu'il expose ; documentez GET / dans la même évolution.
        .route("/", get(handle_repository))

bin/ca-server/tests/crl_publication.rs:160

  • Le nouveau test ne vérifie que deux Subjects et un lien PEM, alors que cette page introduit aussi l'émetteur, la série, la validité, l'empreinte SHA-256 et les liens DER/CRL/conformance. Une régression supprimant ces éléments passerait ; ajoutez au moins une assertion pour chaque champ et lien exposé.
    assert!(
        html.contains("Test Issuing CA"),
        "sujet de la CA émettrice absent"
    );
    assert!(

deploy/helm/open-eidas/values-staging.yaml:67

  • Ce commentaire indique qu'effacer les tokens et l'état suffit pour qu'une nouvelle cérémonie prenne les nouveaux CN, mais run_ceremony réutilise d'abord la hiérarchie trouvée dans le Store ; en staging, ce registre est le PostgreSQL externe. Sans le préciser, un opérateur peut effacer les PVC tout en conservant les anciens noms ; mentionnez explicitement le registre PostgreSQL dans la remise à zéro.
  # quels). Gravé dans les certificats à la cérémonie de clé — un
  # changement ici n'a AUCUN effet sur une hiérarchie déjà amorcée, seule
  # une nouvelle cérémonie (tokens/état effacés) en tient compte.
  • Files reviewed: 3/5 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread bin/ca-server/src/http.rs
let ca_path = server.ca_path.clone();
let crl_path = server.crl_path.clone();
Router::new()
.route("/", get(handle_repository))
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.

2 participants