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>
25 lines
1.3 KiB
Django/Jinja
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
|