Set-OPS-Public/roles/serveur_postgresql/templates/setops-postgresql-cert-sync.sh.j2
Daniel Allaire 5aa7fcafdb PostgreSQL : servir le cert step-ca (TLS vérifiable), non-bloquant
Zéro-confiance flux PG, côté serveur : cert-sync (owned postgres, motif .path
comme Dovecot/Postfix) + ssl_cert/key/ca_file pointant sur le cert step-ca au
lieu du snakeoil. Garde-fou : ssl non activé si le cert n'est pas en place.
Reload robuste (instance postgresql@NN-main, pas le wrapper).

Prouvé sur data-sql-01 : cert servi = Set-OPS Internal CA (vérif root_ca ok),
keycloak/forgejo toujours 200 (TLS reste optionnel, rien de cassé).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 18:31:30 -04:00

25 lines
1.3 KiB
Django/Jinja

#!/bin/sh
# Géré par Set-OPS (rôle serveur_postgresql). Ne pas éditer à la main.
# Synchronise le certificat step_ca (déposé par client_pki, root:root) vers un
# emplacement lisible par postgres, puis recharge. PostgreSQL lit en tant que
# 'postgres' et REFUSE une clé accessible au groupe/monde → owner postgres, 0600.
# Idempotent ; appelé au déploiement ET au renouvellement (unité .path).
set -eu
SRC_CERT="{{ serveur_postgresql_tls_source_cert }}"
SRC_KEY="{{ serveur_postgresql_tls_source_cle }}"
SRC_CA="{{ serveur_postgresql_tls_source_ca }}"
DST="{{ serveur_postgresql_tls_dir }}"
[ -f "$SRC_CERT" ] && [ -f "$SRC_KEY" ] || exit 0
install -o postgres -g postgres -m 0644 "$SRC_CERT" "$DST/server.crt"
install -o postgres -g postgres -m 0600 "$SRC_KEY" "$DST/server.key"
[ -f "$SRC_CA" ] && install -o postgres -g postgres -m 0644 "$SRC_CA" "$DST/root.crt"
# Reload (SIGHUP) : PostgreSQL recharge ses fichiers TLS sans coupure.
# ATTENTION : 'postgresql' est un wrapper Debian (reload = no-op) ; il faut recharger
# la ou les INSTANCES de cluster (postgresql@NN-main), sinon le nouveau cert n'est pas pris.
for u in $(systemctl list-units --plain --no-legend 'postgresql@*' 2>/dev/null | awk '{print $1}'); do
systemctl reload "$u" 2>/dev/null || true
done