From fa6ef8b031e54d9f9669c8fa238f008f64020811 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sat, 4 Jul 2026 18:45:16 -0400 Subject: [PATCH] =?UTF-8?q?Z=C3=A9ro-confiance=20:=20Keycloak=E2=86=92PG?= =?UTF-8?q?=20en=20verify-full=20+=20root=5Fca=20lisible=20(0644)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - client_pki : root_ca.crt en 0644 (un cert racine est PUBLIC ; requis pour que les clients TLS non-root — keycloak, forgejo… — puissent vérifier). - serveur_keycloak : db-url-properties sslmode=verify-full + sslrootcert. Incident maîtrisé : 1er essai, keycloak (user keycloak) ne pouvait pas lire root_ca 0600 → SSO down → restauré en <1 min → corrigé (0644) → verify-full OK. Prouvé : realm 200, sslmode=verify-full, aucune erreur SSL/DB. Co-Authored-By: Claude Opus 4.8 --- roles/client_pki/tasks/main.yml | 5 +++++ roles/serveur_keycloak/defaults/main.yml | 5 +++++ roles/serveur_keycloak/templates/keycloak.conf.j2 | 3 +++ 3 files changed, 13 insertions(+) diff --git a/roles/client_pki/tasks/main.yml b/roles/client_pki/tasks/main.yml index 160441f..03cb698 100644 --- a/roles/client_pki/tasks/main.yml +++ b/roles/client_pki/tasks/main.yml @@ -66,6 +66,11 @@ environment: STEPPATH: "{{ client_pki_steppath }}" +- name: Rendre le certificat racine lisible par tous (cert public, requis par les clients TLS) + ansible.builtin.file: + path: "{{ client_pki_steppath }}/certs/root_ca.crt" + mode: "0644" + - name: Obtenir le certificat d'hote ansible.builtin.command: cmd: >- diff --git a/roles/serveur_keycloak/defaults/main.yml b/roles/serveur_keycloak/defaults/main.yml index 719538e..2a4caed 100644 --- a/roles/serveur_keycloak/defaults/main.yml +++ b/roles/serveur_keycloak/defaults/main.yml @@ -58,3 +58,8 @@ serveur_keycloak_role_mapper_clients: [] # Assignations rôle→utilisateur (ex. [{user: testmail, role: grafana-editor}]). # En prod, préférer l'assignation via groupe d'annuaire ; ici, explicite pour la preuve. serveur_keycloak_role_assignments: [] + +# TLS vers PostgreSQL (zero-confiance). Vide = pas de verif (compat). 'verify-full' = +# chiffre + verifie le cert serveur contre le root_ca step-ca (l'hote doit etre dans le SAN). +serveur_keycloak_db_sslmode: "" +serveur_keycloak_db_sslrootcert: "/etc/step/certs/root_ca.crt" diff --git a/roles/serveur_keycloak/templates/keycloak.conf.j2 b/roles/serveur_keycloak/templates/keycloak.conf.j2 index 04a8373..068bef3 100644 --- a/roles/serveur_keycloak/templates/keycloak.conf.j2 +++ b/roles/serveur_keycloak/templates/keycloak.conf.j2 @@ -2,6 +2,9 @@ db=postgres db-url-host={{ serveur_keycloak_db_host }} db-url-database={{ serveur_keycloak_entree.base }} +{% if serveur_keycloak_db_sslmode | default('') %} +db-url-properties=?sslmode={{ serveur_keycloak_db_sslmode }}&sslrootcert={{ serveur_keycloak_db_sslrootcert }} +{% endif %} db-username={{ serveur_keycloak_entree.proprietaire }} # Derriere serveur_nginx (TLS termine a l'edge).