Installer le Webserver-Front (DMZ)
Le Webserver-Front est une replique en lecture seule du Webserver (ADMIN) concue pour etre exposee en DMZ. Il est alimente exclusivement par un push unidirectionnel mutuellement authentifie (mTLS) depuis ADMIN : le Front n’ouvre jamais de connexion vers ADMIN ni vers aucun composant interne. Cette page mene de zero a un flux de replication fonctionnel : generer les certificats et les cles, les copier sur chaque hote, configurer les deux cotes et verifier.
Dans cette page, ADMIN designe le Webserver normal (licencie, interne) et FRONT le Webserver-Front. Pour l’architecture et le modele de confiance, voir Webserver-Front (replique DMZ) ; pour l’exploitation au quotidien, voir Exploiter le Webserver-Front.
Rappel securite
- ADMIN → FRONT uniquement. ADMIN pousse des deltas incrementaux en continu et un instantane complet toutes les
FrontReconcileMinsminutes vers le recepteur de replication du FRONT (mTLS, sur lePortAPIdu FRONT). - Trois protections independantes enveloppent chaque push : authentification mTLS par certificat client, jeton RS256 de courte duree (paire de cles de signature dediee), et chiffrement AES-256-GCM de la charge utile avec la cle partagee
ReplKey. - Les secrets ne quittent jamais ADMIN. Seule une liste blanche de buckets est repliquee, et les champs sensibles (jetons, mots de passe, IP/ports/endpoints internes) sont supprimes avant de quitter ADMIN.
- Aucune licence necessaire sur le FRONT. Il fonctionne sans fichier
license_MNS.dat.
Avant de commencer : vos valeurs
Seules les valeurs ci-dessous changent d’un environnement a l’autre. Tout le reste de cette page se copie et s’execute tel quel.
| Valeur | Quoi mettre | Exemple (a remplacer !) |
|---|---|---|
| Nom(s) DNS du FRONT | Chaque nom d’hote utilise pour joindre le FRONT : celui qu’ADMIN contacte et celui que les utilisateurs saisissent dans leur navigateur | front.acme.local, status.acme.com |
| Adresse(s) IP du FRONT | Chaque adresse IP utilisee pour joindre le FRONT, le cas echeant (ADMIN ou utilisateurs passant par une IP) | 10.20.0.15 |
PortAPI du FRONT |
Port de replication sur lequel ADMIN pousse (defaut) | 8040 |
PortWEB du FRONT |
Port de l’interface web ouverte par les utilisateurs (defaut) | 9080 |
Les valeurs SAN sont des exemples : remplacez-les
front.acme.local, status.acme.com et 10.20.0.15 sont des exemples. Utilisez les vrais noms DNS et adresses IP de votre hote FRONT. Le certificat n’est accepte que pour les noms et adresses listes dans son SAN (Subject Alternative Name) :
- ADMIN refuse de pousser si l’hote de
FrontEndpointn’est pas dans le SAN (le CN seul ne compte pas). - Le FRONT presente le meme certificat sur
PortAPI(replication) et surPortWEB(navigateurs des utilisateurs) : le SAN doit donc aussi contenir le nom saisi par les utilisateurs.
Dans le doute, listez tous les noms DNS et toutes les adresses IP de l’hote FRONT. Ajouter une entree plus tard impose de reemettre le certificat.
Ou executer quoi :
| Machine | Etapes | Prerequis |
|---|---|---|
| Un poste de confiance (idealement hors ligne) | Etape 1 | bash + OpenSSL : tout Linux, macOS, ou Git Bash sous Windows (Git for Windows inclut OpenSSL) |
| Hote FRONT (DMZ) | Etape 2 | le dossier front/ produit a l’etape 1 |
| Hote ADMIN | Etapes 3 et 4 | le dossier admin/ produit a l’etape 1 |
Etape 1 — Generer les certificats et les cles
Option A — Script (recommande)
Telechargez mugnsoft-front-pki.sh et executez-le dans bash (sous Windows : ouvrez Git Bash dans le dossier de telechargement). Remplacez les valeurs de --dns et --ip par les votres ; separez plusieurs valeurs par des virgules, sans espace :
bash mugnsoft-front-pki.sh --dns front.acme.local,status.acme.com --ip 10.20.0.15
--ip peut etre omis si le FRONT n’est joint que par nom DNS. Le script refuse de s’executer avec les valeurs d’exemple de la documentation (example.com, 203.0.113.10), refuse d’ecraser un dossier de sortie existant, genere tout, le controle et affiche :
5/5 Self-check
ok ADMIN client cert is signed by the CA
ok ADMIN client cert is valid for client authentication
ok FRONT server cert is signed by the CA and valid for server authentication
ok ADMIN client key matches its certificate
ok FRONT server key matches its certificate
ok repl_sign.pub is the public half of repl_sign.key
SAN of the FRONT certificate:
DNS:front.acme.local, DNS:status.acme.com, IP Address:10.20.0.15
Verifiez que la ligne SAN liste vos noms et adresses. Le resultat est un dossier par destination, deja organise comme les repertoires d’installation :
mugnsoft-front-pki/
├── ca/ A GARDER HORS LIGNE - ne copier sur aucun serveur
│ ├── repl_ca.key cle privee de la CA
│ └── repl_ca.crt
├── admin/ -> copier le contenu dans le repertoire d'installation ADMIN
│ ├── pki/repl_ca.crt
│ ├── pki/admin_client.crt
│ ├── pki/admin_client.key
│ ├── pki/repl_sign.key
│ └── webserver.json.add lignes a ajouter au webserver.json d'ADMIN (ReplKey renseignee)
└── front/ -> copier le contenu dans le repertoire d'installation FRONT
├── pki/repl_ca.crt
├── pki/repl_sign.pub
├── config/ssl/certificates/webserver.pem certificat serveur du FRONT
├── config/ssl/private/webserver.key cle serveur du FRONT
└── webserver-front.json configuration FRONT complete (ReplKey renseignee)
Options : --out <dossier> (defaut ./mugnsoft-front-pki), --days <n> validite des certificats ADMIN et FRONT (defaut 825 ; la CA est valable 10 ans). --help affiche l’aide.
Enregistrez ceci sous mugnsoft-front-pki.sh :
#!/usr/bin/env bash
# mugnsoft-front-pki.sh - generate every key and certificate the Webserver (ADMIN)
# and the Webserver-Front (FRONT) need for replication, sorted into one folder per
# host, ready to copy into each install directory.
#
# Requires bash and OpenSSL 1.1.1 or later (Linux, macOS, or Git Bash on Windows).
#
# Usage:
# ./mugnsoft-front-pki.sh --dns <front-names> --ip <front-ips> [--out <dir>] [--days <n>]
#
# --dns Comma-separated DNS names of the FRONT host: the name ADMIN dials
# (FrontEndpoint) AND the name users type in their browser.
# --ip Comma-separated IP addresses of the FRONT host, if ADMIN or users
# reach it by IP. Optional when --dns is given.
# --out Output folder (default: ./mugnsoft-front-pki). Must not exist yet.
# --days Validity of the ADMIN client and FRONT server certificates (default 825).
#
# Example (replace the values with YOUR environment's names and addresses):
# ./mugnsoft-front-pki.sh --dns front.acme.local,status.acme.com --ip 10.20.0.15
set -euo pipefail
# Git Bash: keep "/CN=..." from being rewritten into a Windows path.
export MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL='*'
DNS="" IPS="" OUT="./mugnsoft-front-pki" DAYS=825
die() { echo "ERROR: $*" >&2; exit 1; }
usage() { sed -n '2,21p' "$0" | sed 's/^# \{0,1\}//'; exit "${1:-0}"; }
while [ $# -gt 0 ]; do
case "$1" in
--dns) DNS="${2:-}"; shift 2 ;;
--ip) IPS="${2:-}"; shift 2 ;;
--out) OUT="${2:-}"; shift 2 ;;
--days) DAYS="${2:-}"; shift 2 ;;
-h|--help) usage 0 ;;
*) echo "Unknown option: $1" >&2; usage 1 ;;
esac
done
command -v openssl >/dev/null || die "openssl not found in PATH"
[ -n "$DNS$IPS" ] || die "give at least one --dns or --ip for the FRONT host (see --help)"
# exact match per entry: the placeholders shown on the doc page and in --help
case ",${DNS// /},${IPS// /}," in
*,front.acme.local,*|*,status.acme.com,*|*,10.20.0.15,*|*example.com*|*203.0.113.10*) die "the example values must be replaced with your FRONT host's real names/addresses" ;;
esac
[[ "$DAYS" =~ ^[0-9]+$ ]] || die "--days must be a number"
[ -e "$OUT" ] && die "$OUT already exists - choose another --out or move it away (it holds your CA key)"
# Build the subjectAltName list and validate every entry.
SAN="" CN=""
IFS=',' read -ra items <<< "$DNS"
for d in "${items[@]}"; do
d="${d// /}"; [ -z "$d" ] && continue
[[ "$d" =~ ^[A-Za-z0-9*]([A-Za-z0-9.-]*[A-Za-z0-9])?$ ]] || die "invalid DNS name: $d"
SAN="${SAN:+$SAN,}DNS:$d"; CN="${CN:-$d}"
done
IFS=',' read -ra items <<< "$IPS"
for ip in "${items[@]}"; do
ip="${ip// /}"; [ -z "$ip" ] && continue
[[ "$ip" =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ || "$ip" =~ ^[0-9A-Fa-f:]+$ ]] || die "invalid IP address: $ip"
SAN="${SAN:+$SAN,}IP:$ip"; CN="${CN:-$ip}"
done
umask 077
mkdir -p "$OUT"/{ca,tmp} "$OUT"/admin/pki "$OUT"/front/pki "$OUT"/front/config/ssl/certificates "$OUT"/front/config/ssl/private
cd "$OUT"
q() { local err; err=$("$@" 2>&1 >/dev/null) || { echo "FAILED: $*" >&2; echo "$err" >&2; exit 1; }; }
echo "1/5 Replication CA"
cat > tmp/ca.cnf <<'EOF'
[req]
distinguished_name = dn
x509_extensions = v3_ca
prompt = no
[dn]
CN = mugnsoft-repl-ca
[v3_ca]
basicConstraints = critical,CA:TRUE
keyUsage = critical,keyCertSign,cRLSign
subjectKeyIdentifier = hash
EOF
q openssl genrsa -out ca/repl_ca.key 4096
q openssl req -x509 -new -key ca/repl_ca.key -sha256 -days 3650 -config tmp/ca.cnf -out ca/repl_ca.crt
echo "2/5 ADMIN client certificate"
cat > tmp/client.ext <<'EOF'
basicConstraints = CA:FALSE
keyUsage = critical,digitalSignature,keyEncipherment
extendedKeyUsage = clientAuth
EOF
q openssl genrsa -out admin/pki/admin_client.key 4096
q openssl req -new -key admin/pki/admin_client.key -subj "/CN=webserver-admin" -out tmp/admin_client.csr
q openssl x509 -req -in tmp/admin_client.csr -CA ca/repl_ca.crt -CAkey ca/repl_ca.key -CAcreateserial \
-days "$DAYS" -sha256 -extfile tmp/client.ext -out admin/pki/admin_client.crt
echo "3/5 FRONT server certificate ($SAN)"
printf 'basicConstraints = CA:FALSE\nkeyUsage = critical,digitalSignature,keyEncipherment\nextendedKeyUsage = serverAuth\nsubjectAltName = %s\n' "$SAN" > tmp/server.ext
q openssl genrsa -out front/config/ssl/private/webserver.key 4096
q openssl req -new -key front/config/ssl/private/webserver.key -subj "/CN=$CN" -out tmp/front_server.csr
q openssl x509 -req -in tmp/front_server.csr -CA ca/repl_ca.crt -CAkey ca/repl_ca.key -CAcreateserial \
-days "$DAYS" -sha256 -extfile tmp/server.ext -out front/config/ssl/certificates/webserver.pem
echo "4/5 Token signing keypair and shared payload key"
q openssl genrsa -out admin/pki/repl_sign.key 2048
q openssl rsa -in admin/pki/repl_sign.key -pubout -out front/pki/repl_sign.pub
REPLKEY=$(openssl rand -hex 32)
cp ca/repl_ca.crt admin/pki/repl_ca.crt
cp ca/repl_ca.crt front/pki/repl_ca.crt
rm -rf tmp ca/repl_ca.srl
# Configuration fragments, ReplKey already filled in.
FIRST_HOST="${DNS%%,*}"; FIRST_HOST="${FIRST_HOST// /}"; [ -z "$FIRST_HOST" ] && FIRST_HOST="${IPS%%,*}"
cat > admin/webserver.json.add <<EOF
"ReplKey": "$REPLKEY",
"ReplCACert": "pki/repl_ca.crt",
"ReplClientCert": "pki/admin_client.crt",
"ReplClientKey": "pki/admin_client.key",
"ReplSignKey": "pki/repl_sign.key",
"FrontEnabled": "true",
"FrontEndpoint": "$FIRST_HOST:8040",
"FrontReconcileMins": "5",
"FrontGracePeriodMins": "0"
EOF
cat > front/webserver-front.json <<EOF
{
"HTTPS": "true",
"PortAPI": "8040",
"PortWEB": "9080",
"RunUser": "",
"ReplKey": "$REPLKEY",
"ReplCACert": "pki/repl_ca.crt",
"ReplPubKey": "pki/repl_sign.pub"
}
EOF
echo "5/5 Self-check"
ok() { echo " ok $*"; }
openssl verify -CAfile ca/repl_ca.crt admin/pki/admin_client.crt >/dev/null && ok "ADMIN client cert is signed by the CA"
openssl verify -CAfile ca/repl_ca.crt -purpose sslclient admin/pki/admin_client.crt >/dev/null && ok "ADMIN client cert is valid for client authentication"
openssl verify -CAfile ca/repl_ca.crt -purpose sslserver front/config/ssl/certificates/webserver.pem >/dev/null && ok "FRONT server cert is signed by the CA and valid for server authentication"
[ "$(openssl x509 -in admin/pki/admin_client.crt -noout -pubkey | openssl pkey -pubin -outform DER | openssl dgst -sha256)" = \
"$(openssl pkey -in admin/pki/admin_client.key -pubout -outform DER | openssl dgst -sha256)" ] && ok "ADMIN client key matches its certificate"
[ "$(openssl x509 -in front/config/ssl/certificates/webserver.pem -noout -pubkey | openssl pkey -pubin -outform DER | openssl dgst -sha256)" = \
"$(openssl pkey -in front/config/ssl/private/webserver.key -pubout -outform DER | openssl dgst -sha256)" ] && ok "FRONT server key matches its certificate"
[ "$(openssl pkey -in admin/pki/repl_sign.key -pubout -outform DER | openssl dgst -sha256)" = \
"$(openssl pkey -pubin -in front/pki/repl_sign.pub -outform DER | openssl dgst -sha256)" ] && ok "repl_sign.pub is the public half of repl_sign.key"
echo " SAN of the FRONT certificate:"
openssl x509 -in front/config/ssl/certificates/webserver.pem -noout -ext subjectAltName | sed -n '2p' | sed 's/^ */ /'
cat <<EOF
Done. Output in: $(pwd)
ca/ repl_ca.key + repl_ca.crt KEEP OFFLINE - copy to no server
admin/ copy the CONTENTS into the ADMIN install directory
then merge admin/webserver.json.add into ADMIN's webserver.json
front/ copy the CONTENTS into the FRONT install directory
(webserver-front.json is complete; it replaces the starter one)
Set FrontEndpoint to a name or IP from the SAN list above, with FRONT's PortAPI.
EOF
Option B — Commandes manuelles
Meme resultat que le script, pour executer chaque commande vous-meme. Modifiez les deux lignes FRONT_, puis collez le bloc entier dans bash (Git Bash sous Windows) :
# ----- CHANGE these two lines: your FRONT host's real names and addresses -----
FRONT_SAN="DNS:front.acme.local,DNS:status.acme.com,IP:10.20.0.15"
FRONT_CN="front.acme.local"
# ----- everything below runs as-is -----
export MSYS_NO_PATHCONV=1 # Git Bash: keep "/CN=..." as is
mkdir -p mugnsoft-front-pki && cd mugnsoft-front-pki
mkdir -p ca admin/pki front/pki front/config/ssl/certificates front/config/ssl/private
# 1. Replication CA (valid 10 years)
printf '[req]\ndistinguished_name=dn\nx509_extensions=v3_ca\nprompt=no\n[dn]\nCN=mugnsoft-repl-ca\n[v3_ca]\nbasicConstraints=critical,CA:TRUE\nkeyUsage=critical,keyCertSign,cRLSign\nsubjectKeyIdentifier=hash\n' > ca.cnf
openssl genrsa -out ca/repl_ca.key 4096
openssl req -x509 -new -key ca/repl_ca.key -sha256 -days 3650 -config ca.cnf -out ca/repl_ca.crt
# 2. ADMIN client certificate
openssl genrsa -out admin/pki/admin_client.key 4096
openssl req -new -key admin/pki/admin_client.key -subj "/CN=webserver-admin" -out admin_client.csr
printf 'basicConstraints=CA:FALSE\nkeyUsage=critical,digitalSignature,keyEncipherment\nextendedKeyUsage=clientAuth\n' > client.ext
openssl x509 -req -in admin_client.csr -CA ca/repl_ca.crt -CAkey ca/repl_ca.key -CAcreateserial \
-days 825 -sha256 -extfile client.ext -out admin/pki/admin_client.crt
# 3. FRONT server certificate (carries your SAN list)
openssl genrsa -out front/config/ssl/private/webserver.key 4096
openssl req -new -key front/config/ssl/private/webserver.key -subj "/CN=$FRONT_CN" -out front_server.csr
printf 'basicConstraints=CA:FALSE\nkeyUsage=critical,digitalSignature,keyEncipherment\nextendedKeyUsage=serverAuth\nsubjectAltName=%s\n' "$FRONT_SAN" > server.ext
openssl x509 -req -in front_server.csr -CA ca/repl_ca.crt -CAkey ca/repl_ca.key -CAcreateserial \
-days 825 -sha256 -extfile server.ext -out front/config/ssl/certificates/webserver.pem
# 4. Token signing keypair, CA copies, shared payload key
openssl genrsa -out admin/pki/repl_sign.key 2048
openssl rsa -in admin/pki/repl_sign.key -pubout -out front/pki/repl_sign.pub
cp ca/repl_ca.crt admin/pki/ && cp ca/repl_ca.crt front/pki/
rm -f admin_client.csr front_server.csr client.ext server.ext ca.cnf ca/repl_ca.srl
echo "ReplKey: $(openssl rand -hex 32)"
# 5. Check: both lines must end in "OK", then the SAN list must be yours
openssl verify -CAfile ca/repl_ca.crt -purpose sslclient admin/pki/admin_client.crt
openssl verify -CAfile ca/repl_ca.crt -purpose sslserver front/config/ssl/certificates/webserver.pem
openssl x509 -in front/config/ssl/certificates/webserver.pem -noout -ext subjectAltName
Les deux lignes openssl verify doivent afficher OK, et la derniere commande doit montrer votre liste SAN. Notez la valeur ReplKey : elle va dans les deux fichiers de configuration (etapes 2 et 3). Creez ensuite a la main les deux fragments de configuration que le script aurait produits, a partir des exemples des etapes 2 et 3.
Etape 2 — Installer le Front (hote DMZ)
Copier le certificat AVANT le premier demarrage
install et start exigent que config/ssl/certificates/webserver.pem soit en place. Les versions actuelles s’arretent avec Webserver-Front: ...webserver.pem is missing. ReplCACert is set, so Front will not generate a self-signed certificate... : copiez front/config/ et relancez la commande. Les versions precedentes creaient silencieusement un certificat auto-signe (valable uniquement pour webserver.mugnsoft.com et webserver) qu’ADMIN refuse : copiez les fichiers ci-dessous par-dessus (en ecrasant) et redemarrez le FRONT.
webserver-front uninstall supprime config/ (ainsi que dbs/, data/, log/, report/, export/), donc le certificat et la cle copies a l’etape 2.2. pki/ et webserver-front.json sont conserves. Apres une desinstallation, recopiez front/config/ avant le prochain install.
2.1 Decompressez mugnsoft-webserver-front-<version>.windows-amd64.zip (ou .linux-amd64.tar.gz) sur l’hote DMZ. Il contient webserver-front.exe (webserver-front sous Linux), un webserver-front.json de depart et un dossier pki/ vide. L’interface web est integree au binaire ; aucun fichier de licence n’est necessaire.
2.2 Copiez le contenu de front/ dans le repertoire d’installation du FRONT. Transferez le dossier mugnsoft-front-pki/front/ vers l’hote FRONT par votre moyen securise habituel (scp, SFTP, support amovible), puis lancez la commande de votre OS depuis le dossier qui contient front/, avec votre chemin d’installation. Elle ajoute pki/ et config/ssl/ et remplace le webserver-front.json de depart :
# Linux
cp -r front/. /opt/mugnsoft/webserver-front/
# Windows (PowerShell)
Copy-Item -Recurse -Force .\front\* C:\Mugnsoft\webserver-front\
Le repertoire d’installation du FRONT ressemble maintenant a ceci :
webserver-front/
├── webserver-front.exe (webserver-front sous Linux)
├── webserver-front.json
├── pki/repl_ca.crt
├── pki/repl_sign.pub
└── config/ssl/certificates/webserver.pem
config/ssl/private/webserver.key
2.3 Verifiez webserver-front.json. Le fichier produit a l’etape 1 est complet ; ne changez PortAPI / PortWEB que si vous n’utilisez pas les valeurs par defaut :
{
"HTTPS": "true",
"PortAPI": "8040",
"PortWEB": "9080",
"RunUser": "",
"ReplKey": "<64 caracteres hexa de l'etape 1 - identique sur ADMIN>",
"ReplCACert": "pki/repl_ca.crt",
"ReplPubKey": "pki/repl_sign.pub"
}
2.4 Installez et demarrez le service (depuis le repertoire d’installation). Les etapes 2.1 a 2.4 peuvent aussi se faire en une commande avec le script d’installation de Installer sous Linux ou Installer sous Windows : bash mugnsoft-install.sh webserver-front --front-pki ./front (Linux) ou .\mugnsoft-install.ps1 webserver-front -FrontPki .\front (Windows).
# Windows (invite de commandes en administrateur)
webserver-front.exe install && webserver-front.exe start
# Linux (en root)
./webserver-front install && ./webserver-front start
Autorisez dans le pare-feu ADMIN vers le FRONT sur PortAPI (TCP 8040 par defaut), et les utilisateurs vers PortWEB (TCP 9080 par defaut). Le FRONT ne se connecte jamais a ADMIN.
Etape 3 — Configurer ADMIN
3.1 Copiez le dossier pki/ de admin/ dans le repertoire d’installation d’ADMIN. Transferez mugnsoft-front-pki/admin/ vers l’hote ADMIN, puis depuis le dossier qui contient admin/, avec votre chemin d’installation :
# Linux
cp -r admin/pki /opt/mugnsoft/webserver/
# Windows (PowerShell)
Copy-Item -Recurse -Force .\admin\pki C:\Mugnsoft\webserver\
3.2 Ajoutez les lignes de replication au webserver.json d’ADMIN. Collez le contenu de admin/webserver.json.add juste avant l’accolade fermante }, conservez les cles deja presentes, et verifiez que la ligne precedant le bloc colle se termine par une virgule. Puis reglez FrontEndpoint sur <un nom DNS ou une IP du SAN>:<PortAPI du FRONT>. Le resultat ressemble a :
{
"HTTPS": "true",
"PortAPI": "8050",
"PortWEB": "9090",
"RunUser": "",
"ReplKey": "<memes 64 caracteres hexa que sur le FRONT>",
"ReplCACert": "pki/repl_ca.crt",
"ReplClientCert": "pki/admin_client.crt",
"ReplClientKey": "pki/admin_client.key",
"ReplSignKey": "pki/repl_sign.key",
"FrontEnabled": "true",
"FrontEndpoint": "front.acme.local:8040",
"FrontReconcileMins": "5",
"FrontGracePeriodMins": "0"
}
3.3 Redemarrez le service ADMIN (webserver.exe stop puis webserver.exe start, ou ./webserver stop && ./webserver start sous Linux).
Gardez les horloges d’ADMIN et du FRONT synchronisees (NTP) : les jetons de replication sont valables 15 minutes.
Etape 4 — Verifier
4.1 Testez depuis l’interface web d’ADMIN. Ouvrez le menu engrenage → components, faites un clic droit sur le webserver et choisissez edit server. Dans l’onglet General, le bloc Webserver-Front contient FrontEndpoint (Front endpoint API) et l’URL navigateur du FRONT (Front public URL). Cliquez sur TEST : ADMIN fait le meme appel mTLS a /uptime que la pompe de replication, et verifie l’URL publique comme le ferait un navigateur. Les deux lignes doivent etre vertes :
Une ligne Front endpoint API rouge en donne la cause, par exemple Front is serving its built-in self-signed certificate (CN=webserver) : voir le tableau de depannage ci-dessous. La verification de l’URL publique signale seulement un certificat signe par votre CA privee, sauf si Accept untrusted cert est active (voir Navigateurs des utilisateurs et certificat).
4.2 Testez le canal depuis l’hote ADMIN, dans le repertoire d’installation d’ADMIN, avec bash (Git Bash sous Windows). Remplacez front.acme.local et 8040 par l’hote et le port de votre FrontEndpoint :
FRONT_HOST=front.acme.local; FRONT_PORT=8040
printf 'GET /uptime HTTP/1.0\r\n\r\n' | openssl s_client -quiet -connect "$FRONT_HOST:$FRONT_PORT" \
-verify_hostname "$FRONT_HOST" -verify_return_error \
-CAfile pki/repl_ca.crt -cert pki/admin_client.crt -key pki/admin_client.key
La derniere ligne affichee doit etre ok. Cette commande effectue exactement les controles d’ADMIN : chaine et SAN du certificat du FRONT, et certificat client d’ADMIN. Si FrontEndpoint utilise une adresse IP, remplacez -verify_hostname "$FRONT_HOST" par -verify_ip "$FRONT_HOST".
Note :
openssl s_client plutot que curl : le curl fourni avec Windows et Git Bash utilise le magasin de certificats Windows (schannel), qui ne sait pas charger la cle client PEM (Failed to import cert file) ni verifier la revocation d’une CA privee.
4.3 Controlez le flux. Ouvrez https://<nom DNS du FRONT>:9080/replStatus (sans connexion) : dans la minute qui suit le redemarrage d’ADMIN, il renvoie "stale":false et un lastReplMs recent. Connectez-vous ensuite a l’interface du FRONT sur https://<nom DNS du FRONT>:9080/ : moniteurs et applications apparaissent apres le premier instantane complet (jusqu’a FrontReconcileMins minutes). Un bandeau rouge signale un flux perime.
4.4 En cas d’echec, lisez les warnings du log/webserver.log d’ADMIN (lignes commencant par sendBatch) et du dossier log/ du FRONT, puis consultez le tableau de depannage ci-dessous.
Navigateurs des utilisateurs et certificat
Le FRONT presente aussi le certificat de l’etape 1 aux navigateurs. Il est signe par votre CA de replication privee : les navigateurs affichent un avertissement tant que cette CA n’est pas approuvee. Deux options :
- Utilisateurs internes : distribuez
repl_ca.crtdans le magasin des autorites racines de confiance des postes (par exemple par strategie de groupe). - FRONT public : utilisez plutot un certificat d’une CA publique reconnue pour le nom DNS du FRONT. Placez le certificat (suivi de ses certificats intermediaires) dans
config/ssl/certificates/webserver.pemdu FRONT et sa cle dansconfig/ssl/private/webserver.key. Puis, sur ADMIN uniquement, pointezReplCACertvers un fichier contenant le certificat racine de cette CA publique (par exemplepki/front_ca.crt) et reglezFrontEndpointsur ce nom DNS (les CA publiques n’emettent pas de SAN IP). Le FRONT gardeReplCACert = pki/repl_ca.crt, qui verifie le certificat client d’ADMIN. Le certificat client ADMIN, les cles et laReplKeyde l’etape 1 restent inchanges.
Renouvellement
Les certificats ADMIN et FRONT expirent apres --days (825 jours par defaut ; dates visibles avec openssl x509 -in <fichier> -noout -enddate). Pour renouveler, relancez l’etape 1 dans un nouveau dossier et refaites les etapes 2.2, 3.1 et 3.2 avec les nouveaux fichiers et la nouvelle ReplKey, puis redemarrez le FRONT et ADMIN. Sous Linux, si RunUser est renseigne, donnez les nouveaux fichiers a cet utilisateur : chown -R <RunUser> pki config.
Depannage
Les messages ci-dessous sont ceux qu’affichent reellement ADMIN (log/webserver.log, lignes sendBatch) et le FRONT (log/).
| Message | Cause | Correction |
|---|---|---|
FRONT (console et log/) : Webserver-Front: ...webserver.pem is missing. ReplCACert is set, so Front will not generate a self-signed certificate... |
config/ n’a pas ete copie a l’etape 2.2, ou uninstall l’a supprime |
Copiez front/config/ dans le repertoire d’installation, relancez install / start |
TEST d’ADMIN : Front is serving its built-in self-signed certificate (CN=webserver) |
Une version precedente a demarre le FRONT sans le certificat de l’etape 1 et a genere le sien | Recopiez front/config/ (en ecrasant), redemarrez le FRONT |
x509: certificate is valid for webserver.mugnsoft.com, webserver, not <hote> |
Meme cause que la ligne precedente | Recopiez front/config/ (en ecrasant), redemarrez le FRONT |
x509: certificate is valid for <noms>, not <hote> |
L’hote de FrontEndpoint n’est pas dans le SAN du certificat |
Reglez FrontEndpoint sur un nom/une IP liste, ou relancez l’etape 1 avec la valeur manquante et refaites l’etape 2.2 |
x509: cannot validate certificate for <IP> because it doesn't contain any IP SANs |
FrontEndpoint est une adresse IP et le certificat n’a aucun SAN IP: |
Idem (ajoutez --ip) |
x509: certificate signed by unknown authority (le TEST d’ADMIN nomme le certificat presente par le FRONT) |
Le ReplCACert d’ADMIN n’est pas la CA qui a signe le certificat du FRONT |
Copiez le repl_ca.crt correspondant (ou la racine de la CA publique) sur ADMIN |
FRONT : TLS handshake error ... remote error: tls: bad certificate |
ADMIN a refuse le certificat du FRONT | Le journal d’ADMIN donne la raison : une des lignes x509: ci-dessus |
ADMIN : remote error: tls: unknown certificate authorityFRONT : x509: certificate signed by unknown authority |
Le certificat client d’ADMIN n’est pas signe par le ReplCACert du FRONT |
Utilisez admin_client.crt et repl_ca.crt issus de la meme execution de l’etape 1 des deux cotes |
ADMIN : remote error: tls: certificate requiredFRONT : tls: client didn't provide a certificate |
ADMIN n’a envoye aucun certificat client | Verifiez ReplClientCert et ReplClientKey dans le webserver.json d’ADMIN |
replication token rejected: token invalid: crypto/rsa: verification error |
Le ReplPubKey du FRONT n’est pas la moitie publique du ReplSignKey d’ADMIN |
Copiez repl_sign.pub et repl_sign.key issus de la meme execution de l’etape 1, redemarrez le FRONT |
replication token rejected: ... token is expired |
Les deux horloges different de plus de 15 minutes | Synchronisez ADMIN et le FRONT par NTP |
could not decrypt or parse the batch (ReplKey mismatch ...) |
La ReplKey differe entre ADMIN et le FRONT (le FRONT journalise une empreinte a comparer) |
Mettez la meme valeur de 64 caracteres hexa dans les deux fichiers, redemarrez les deux |
no replication client (the mTLS material ... did not load) |
Un chemin de ReplClientCert, ReplClientKey ou ReplCACert est faux |
Les chemins sont relatifs au repertoire d’installation : verifiez que pki/... y existe |
apply failed ... cannot find the path specified |
Anciens builds : le dossier dbs/ du FRONT est absent |
Creez dbs/ dans le repertoire d’installation du FRONT (les builds actuels le font au premier demarrage) |
Une fois la cause corrigee, ADMIN livre de lui-meme les push mis en attente entre-temps ; seul le cote dont les fichiers ont change doit etre redemarre.
Reference des champs de replication
Champs PKI / cryptographiques (Repl*)
Ces champs sont provisionnes hors bande dans le fichier de configuration de chaque hote. Ils ne transitent jamais par le canal de replication et ne sont pas modifiables depuis l’interface Settings. Les chemins relatifs partent du repertoire d’installation.
| Champ | Cote | Description |
|---|---|---|
ReplKey |
ADMIN + FRONT | Cle AES-256 partagee, 64 caracteres hexa (openssl rand -hex 32). Chaque lot de replication est chiffre AES-GCM avec cette cle : les donnees restent confidentielles et inviolables de bout en bout, meme si TLS est termine par un reverse proxy. Doit etre identique des deux cotes |
ReplCACert |
ADMIN + FRONT | Certificat CA verifiant le pair. Sur le FRONT il valide le certificat client d’ADMIN (RequireAndVerifyClientCert : un pair sans certificat client signe par la CA n’atteint jamais le handler). Sur ADMIN il valide le certificat serveur du FRONT |
ReplClientCert |
ADMIN | Certificat client TLS presente par ADMIN lorsqu’il pousse vers le FRONT |
ReplClientKey |
ADMIN | Cle privee de ReplClientCert |
ReplSignKey |
ADMIN | Cle privee RSA (PEM) signant le jeton RS256 de courte duree attache a chaque push. Paire dediee, distincte des cles JWT de connexion utilisateur |
ReplPubKey |
FRONT | Cle publique RSA (PEM) verifiant ces jetons. Le FRONT ne detient que cette moitie publique : un FRONT compromis ne peut forger ni push de replication ni sessions utilisateur ADMIN |
Le certificat serveur du FRONT et sa cle ne sont pas des champs Repl* : ils sont toujours lus dans config/ssl/certificates/webserver.pem et config/ssl/private/webserver.key.
Champs operationnels du Front (Front*)
Ces champs resident sur ADMIN et pilotent le push. Ils peuvent etre definis dans webserver.json ou surcharges a chaud depuis la page Settings d’ADMIN.
| Champ | Defaut | Description |
|---|---|---|
FrontEnabled |
"false" |
Mettre a "true" pour activer la pompe de replication sur ADMIN |
FrontEndpoint |
— | hote:port du recepteur de replication du FRONT : un nom DNS ou une IP du SAN du certificat, et le PortAPI du FRONT (ex. front.acme.local:8040) |
FrontReconcileMins |
"5" |
Cadence en minutes du push d’instantane complet (les deltas incrementaux circulent en continu entre deux). Le FRONT signale son flux comme perime, avec un bandeau dans l’interface, si aucun push valide n’arrive dans 3x cet intervalle |
FrontGracePeriodMins |
"0" (off) |
Delai de grace en minutes avant qu’un statut applicatif non-OK devienne visible sur le FRONT. Les utilisateurs externes continuent de voir le dernier statut sain pendant cette fenetre : les incidents courts sont souvent resolus avant qu’ils ne les remarquent. Les vues d’ADMIN, l’historique de statut, le SLA et l’alerting ne sont pas affectes. Les DOWNTIME planifies sont propages immediatement |
Voir aussi
- Webserver-Front (replique DMZ) – architecture, modele de securite et perimetre de replication
- Exploiter le Webserver-Front – exploitation au quotidien, declaration via Settings, controle de fraicheur
- Configuration du Webserver – reference complete de
webserver.json - Modele de securite – frontieres de confiance globales