Set-OPS-Public/roles/client_pki/README.md
Daniel Allaire 7dc7720b4b client_pki : l'empreinte du root CA n'est pas un secret de voûte
Le rôle dérive l'empreinte à chaud depuis l'autorité, parce qu'un from-zero
régénère l'AC avec une empreinte neuve. Figée en voûte, elle serait périmée
dès la première reconstruction — et une empreinte périmée fait échouer le
bootstrap de chaque hôte.

Or `defaults/main.yml` portait encore un défaut lisant
`vault_step_ca_fingerprint`. Ce défaut était mort : la tâche suivante écrase
le fait sans condition, donc la valeur de la voûte n'avait aucun effet.

Le recensement de voute.py s'y laissait prendre — il cherche la chaîne
`vault_*` sans pouvoir savoir qu'un défaut n'est jamais lu. La « source
unique » avait hérité de l'erreur, et le panneau réclamait un secret
impossible à fournir avant que l'AC n'existe.

Défaut retiré : la clé disparaît du recensement (25 -> 24 exigés), du
gabarit et du panneau. `client_pki_ca_fingerprint_override` reste le moyen
d'épingler une empreinte.

`docs/intrants-communs.md` §H était une troisième copie manuelle de la liste
des secrets, avec les deux mêmes erreurs ; elle renvoie maintenant à
`voute.py lister` et à la preuve P18.

Preuves : 24 OK, 0 échec ; voute.py verifier --strict passe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 22:37:27 -04:00

56 lines
2.8 KiB
Markdown

# client_pki
Intégration cliente **PKI / identité machine** : chaque hôte fait confiance à l'AC
interne (`serveur_step_ca`), obtient **son propre certificat** et le renouvelle
automatiquement.
## Rôle
- Installe `step-cli` (dépôt apt Smallstep).
- **Confiance** : `step ca bootstrap --install` → installe la racine de l'AC dans le
magasin de confiance système (l'hôte fait confiance au TLS interne réel).
- **Certificat d'hôte** : `step ca certificate <fqdn>` via le provisioner.
- **Renouvellement automatique** : unités systemd officielles `cert-renewer@.{service,timer}`
(vérifie/renouvelle toutes les 15 min, recharge le service consommateur s'il existe).
## « Chaque hôte authentifiable »
Après ce rôle, l'hôte possède une **identité machine** vérifiable : un certificat émis
par l'AC interne, renouvelé sans intervention. Les services peuvent l'utiliser pour
du TLS / mTLS interne.
## Secrets requis (Vault)
```yaml
client_pki_provisioner_password: "{{ vault_step_ca_provisioner_password }}" # partage avec serveur_step_ca
```
Un seul — et l'empreinte racine n'en fait **pas** partie.
## L'empreinte du root CA n'est pas un intrant
Elle est **dérivée à chaud** depuis l'autorité (`step certificate fingerprint` exécuté sur
`serveur_step_ca`, en `delegate_to`), et non lue depuis la voûte. La raison : un `from-zero`
régénère l'AC, donc son empreinte change. Une empreinte figée en voûte serait périmée dès la
première reconstruction — et une empreinte périmée fait échouer le `bootstrap` de chaque
hôte, sans que rien n'indique pourquoi.
Si l'AC est injoignable ou pas encore déployée, un `assert` échoue avec un message clair
plutôt que de laisser passer une empreinte vide — ce qui reviendrait à faire confiance à
n'importe quelle autorité au premier contact.
Pour épingler explicitement une empreinte (AC externe, migration) :
`client_pki_ca_fingerprint_override`.
## Variables principales
| Variable | Défaut | Rôle |
| --- | --- | --- |
| `client_pki_ca_url` | `https://infra-pki-01.exemple.internal:8443` | URL de l'AC |
| `client_pki_provisioner` | `admin@exemple.internal` | Provisioner émetteur |
| `client_pki_nom_cert` | FQDN de l'hôte | Nom du certificat |
## Notes / sécurité
- Émission via le provisioner **JWK** (mot de passe partagé) : tout hôte avec ce secret
peut émettre des certificats. Acceptable en interne ; pour durcir, basculer vers ACME
ou des jetons à usage unique par hôte (phase ultérieure).
- Pour qu'un service (nginx, keycloak…) recharge automatiquement après renouvellement,
nommer son certificat d'après le service (instance `cert-renewer@<service>`).
## Prérequis
- Dépendance `client_pki requiert serveur_step_ca actif` (déjà dans `docs/dependances-groupes.yml`).
- Réseau vers l'AC (`:8443`).