diff --git a/roles/client_pki/defaults/main.yml b/roles/client_pki/defaults/main.yml index 963591f..848a6c1 100644 --- a/roles/client_pki/defaults/main.yml +++ b/roles/client_pki/defaults/main.yml @@ -67,6 +67,21 @@ client_pki_provisioner_password: "{{ vault_step_ca_provisioner_password | defaul # Depot apt officiel Smallstep (partage avec serveur_step_ca). client_pki_depot_cle_url: "{{ client_pki_depot_schema }}://packages.smallstep.com/keys/apt/repo-signing-key.gpg" client_pki_depot_cle_fichier: "/etc/apt/keyrings/smallstep.asc" + +# LA MEME CLE QUE `serveur_step_ca` POSE, et c'est le DEPOT qui la porte : les deux +# fichiers ont le meme SHA-256. La chercher ici d'abord evite de sortir sur un CDN tiers +# pour des octets qu'on possede. +# +# CE N'EST PAS THEORIQUE POUR UNE FLOTTE D'AMORCAGE. Elle n'a par definition ni serveur +# d'artefacts ni cache, donc `client_pki_depot_schema` reste `https` et chaque hote sort +# EN DIRECT ; le telechargement echouait alors trois amorcages sur quatre, avec cinq +# reprises, sur une bordure amont que rien ici ne controle. +# +# Le chemin traverse `serveur_step_ca` plutot que de dupliquer le fichier : deux copies +# d'une meme cle divergent le jour ou l'amont la remplace, et rien ne dirait laquelle +# fait foi. +client_pki_depot_cle_locale: >- + {{ role_path }}/../serveur_step_ca/files/smallstep-repo-signing-key.asc client_pki_depot_uri: "{{ client_pki_depot_schema }}://packages.smallstep.com/stable/debian" client_pki_depot_suite: "debs" diff --git a/roles/client_pki/tasks/main.yml b/roles/client_pki/tasks/main.yml index dd27bbd..1b3203c 100644 --- a/roles/client_pki/tasks/main.yml +++ b/roles/client_pki/tasks/main.yml @@ -103,8 +103,36 @@ - telecharger_la_cle_de_signature_smallste_present.stat.exists - (telecharger_la_cle_de_signature_smallste_present.stat.size | default(0)) == 0 +- name: Voir si le depot porte la cle de signature Smallstep + ansible.builtin.stat: + path: "{{ client_pki_depot_cle_locale }}" + delegate_to: localhost + become: false + changed_when: false + check_mode: false + register: client_pki_cle_depot_locale + +# LE DEPOT D'ABORD, LE RESEAU ENSUITE. `serveur_step_ca` pose deja cette cle depuis ses +# `files/` sans rien demander a personne ; le client la telechargeait. Les deux fichiers +# sont identiques — meme SHA-256 — si bien que la sortie n'achetait rien et exposait +# chaque amorcage a une bordure tierce. +- name: Poser la cle de signature Smallstep depuis le depot + ansible.builtin.copy: + src: "{{ client_pki_depot_cle_locale }}" + dest: "{{ client_pki_depot_cle_fichier }}" + owner: root + group: root + mode: "0644" + when: + - not (telecharger_la_cle_de_signature_smallste_present.stat.exists and telecharger_la_cle_de_signature_smallste_present.stat.size | default(0) > 0) + - client_pki_cle_depot_locale.stat.exists + +# LE REPLI RESTE, et il n'est pas mort : un depot qui ne porterait plus ce fichier doit +# encore pouvoir amorcer. Ce qui change est l'ORDRE — on ne sort que faute de mieux. - name: Telecharger la cle de signature Smallstep - when: not (telecharger_la_cle_de_signature_smallste_present.stat.exists and telecharger_la_cle_de_signature_smallste_present.stat.size | default(0) > 0) + when: + - not (telecharger_la_cle_de_signature_smallste_present.stat.exists and telecharger_la_cle_de_signature_smallste_present.stat.size | default(0) > 0) + - not client_pki_cle_depot_locale.stat.exists # `force` PARCE QU'UNE REPRISE CONDITIONNELLE NE REPREND RIEN (2026-09-12). # # Sans lui, `get_url` envoie un `If-Modified-Since` des que le fichier existe. Le cache