mirror of
https://github.com/deunix-educ/Fail2banMqttActionBanishment.git
synced 2026-08-24 03:11:58 +02:00
46 lines
2.3 KiB
Bash
Executable File
46 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# generate-node-cert.sh — génère une clé + un certificat client mTLS pour
|
|
# un noeud, signé par la CA privée du master (voir master-ca-init.sh).
|
|
#
|
|
# Flux MANUEL (clé + CSR + signature générées ici, au même endroit) :
|
|
# réservé à l'usage local sur le master lui-même (ex. certificat
|
|
# master-internal, généré par install.sh::install-master sans jamais
|
|
# passer par le réseau). Pour un noeud DISTANT, préférer le flux par
|
|
# jeton (manage.py create_join_token puis sudo ./install.sh join sur le
|
|
# noeud, voir ROADMAP.md) : la clé y est générée SUR le noeud et ne
|
|
# transite jamais par le réseau, contrairement à ce script qui la génère
|
|
# ici puis suppose qu'elle sera copiée à la main vers le noeud.
|
|
#
|
|
# Usage : sudo ./generate-node-cert.sh <nom_du_noeud> [répertoire_sortie]
|
|
# Le nom du noeud devient le CN du certificat, donc son identité MQTT côté
|
|
# master (use_identity_as_username) — sert de base aux ACL par noeud.
|
|
|
|
set -euo pipefail
|
|
|
|
NODE_NAME="${1:?Usage: $0 <nom_du_noeud> [répertoire_sortie]}"
|
|
CA_DIR="${CA_DIR:-/etc/mosquitto/master-ca}"
|
|
OUT_DIR="${2:-./certs/$NODE_NAME}"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
if [ ! -f "$CA_DIR/ca.key" ]; then
|
|
echo "CA introuvable dans $CA_DIR — lancer master-ca-init.sh d'abord." >&2
|
|
exit 1
|
|
fi
|
|
|
|
install -d "$OUT_DIR"
|
|
openssl genrsa -out "$OUT_DIR/$NODE_NAME.key" 2048
|
|
openssl req -new -key "$OUT_DIR/$NODE_NAME.key" -subj "/CN=$NODE_NAME" -out "$OUT_DIR/$NODE_NAME.csr"
|
|
# Signature + entitlement ACL + restart mosquitto : logique partagée avec
|
|
# l'endpoint /api/join/ (banevents/views.py::join_node), voir
|
|
# sign-node-csr.sh — un seul chemin de code qui touche ca.key.
|
|
CA_DIR="$CA_DIR" "$SCRIPT_DIR/sign-node-csr.sh" "$NODE_NAME" "$OUT_DIR/$NODE_NAME.csr" > "$OUT_DIR/$NODE_NAME.crt"
|
|
cp "$CA_DIR/ca.crt" "$OUT_DIR/ca.crt"
|
|
rm "$OUT_DIR/$NODE_NAME.csr"
|
|
chmod 600 "$OUT_DIR/$NODE_NAME.key"
|
|
|
|
echo "Certificat généré dans $OUT_DIR :"
|
|
echo " - $NODE_NAME.key, $NODE_NAME.crt (ca.crt copié aussi mais pas utilisé par le noeud :"
|
|
echo " le certificat serveur du master est vérifié via le magasin de CA système)"
|
|
echo "À copier sur le noeud (ex. emitter/master-tls/) et référencer via"
|
|
echo "MQTT_MASTER_CLIENT_KEY / MQTT_MASTER_CLIENT_CERT / MQTT_MASTER_NODE_NAME=$NODE_NAME."
|