Files
gestion-certificats2/scripts/create_root_cert.sh
google-labs-jules[bot] 32aced02d6 Fix: Résolution des erreurs de création de périmètre fonctionnel et de certificats.
Ce commit adresse plusieurs problèmes qui empêchaient la création correcte des périmètres fonctionnels et de leurs certificats intermédiaires associés.

Modifications apportées :

1.  **Scripts Shell (create_root_cert.sh, create_intermediate_cert.sh):**
    *   Correction des chemins de copie pour les fichiers de configuration OpenSSL (`root-openssl.conf`, `intermediate-openssl.conf`) pour utiliser `/opt/scripts/configs/` comme source correcte dans l'environnement d'exécution.
    *   Ajout de `set -e` au début des scripts pour un arrêt immédiat en cas d'erreur.
    *   Modification de `scripts/configs/root-openssl.conf` pour que sa directive `dir` pointe vers `/opt/tls/root`, assurant que la CA Racine trouve correctement ses propres fichiers.
    *   Modification de `scripts/create_intermediate_cert.sh` pour que la directive `dir` dans les fichiers `openssl.cnf` des CA intermédiaires soit dynamiquement ajustée au chemin spécifique du périmètre (ex: `/opt/tls/intermediate/nom_perimetre`).
    *   `create_intermediate_cert.sh` accepte maintenant `ROOT_DOMAIN` comme argument et l'utilise pour rendre uniques les CN des certificats intermédiaires et OCSP (ex: `nom_perimetre.intermediate.example.com`).
    *   Correction des chemins de sortie pour la CRL et les fichiers OCSP (clé privée et CSR) dans `create_intermediate_cert.sh` pour utiliser `$INTERMEDIATE_CA_DIR` comme base.

2.  **Contrôleur PHP (PerimeterController.php):**
    *   Extraction dynamique du `ROOT_DOMAIN` à partir du CN du certificat de la CA Racine existante et passage de cette valeur au script `create_intermediate_cert.sh`.
    *   Utilisation d'une expression régulière plus robuste pour l'extraction du `ROOT_DOMAIN`.
    *   Passage des variables d'environnement `OCSP_URL` (depuis la configuration PHP) et `SAN` (vide) au script `create_intermediate_cert.sh` pour éviter les erreurs de "variable has no value" dans OpenSSL.

3.  **Initialisation (app/public/index.php):**
    *   Ajout de logs de débogage et d'une gestion d'erreur défensive pour s'assurer que `$_SESSION['init_root_domain']` est correctement défini avant d'être utilisé pour créer la CA Racine.

Ces changements combinés résolvent le problème initial de création de certificat intermédiaire et plusieurs autres problèmes découverts, menant à une création réussie des périmètres fonctionnels.
2025-06-15 17:12:51 +00:00

52 lines
1.9 KiB
Bash

#!/bin/bash
set -e
# Ce script crée le certificat Root CA (Certificate Authority) auto-signé.
# Il est destiné à être exécuté une seule fois, au premier lancement de l'application.
# Récupérer le domaine racine depuis le premier argument
ROOT_DOMAIN=$1
# Vérifier si ROOT_DOMAIN est fourni
if [ -z "$ROOT_DOMAIN" ]; then
echo "Erreur: Le domaine racine (ROOT_DOMAIN) doit être fourni en argument."
echo "Usage: $0 <votredomaine.com>"
exit 1
fi
ROOT_CA_DIR="/opt/tls/root"
ROOT_KEY="$ROOT_CA_DIR/private/ca.key.pem"
ROOT_CERT="$ROOT_CA_DIR/certs/ca.cert.pem"
ROOT_CNF="$ROOT_CA_DIR/openssl.cnf"
echo "Démarrage de la création du certificat Root CA dans $ROOT_CA_DIR..."
# Créer les dossiers nécessaires pour la PKI Root
mkdir -p "$ROOT_CA_DIR/certs" "$ROOT_CA_DIR/crl" "$ROOT_CA_DIR/newcerts" "$ROOT_CA_DIR/private" "$ROOT_CA_DIR/csr"
chmod 777 "$ROOT_CA_DIR/certs" "$ROOT_CA_DIR/crl" "$ROOT_CA_DIR/newcerts" "$ROOT_CA_DIR/private" "$ROOT_CA_DIR/csr"
# Copier le fichier de configuration OpenSSL pour la CA Racine
cp /opt/scripts/configs/root-openssl.conf "$ROOT_CNF"
# Initialiser les fichiers requis par OpenSSL pour une CA
touch "$ROOT_CA_DIR/index.txt"
echo 1000 > "$ROOT_CA_DIR/serial" # Numéro de série initial pour les certificats
echo 1000 > "$ROOT_CA_DIR/crlnumber" # Numéro de série initial pour la CRL
# Générer la clé privée du Root CA (2048 bits, sans passphrase pour la simplicité)
openssl genrsa -out "$ROOT_KEY" 4096
#
chmod 400 "$ROOT_KEY" # Permissions strictes pour la clé privée
# Générer le certificat Root CA auto-signé
openssl req -x509 -new -nodes -key "$ROOT_KEY" -sha256 -days 3650 -out "$ROOT_CERT" \
-subj "/C=FR/ST=NORD/L=ROUBAIX/O=IT/OU=IT/emailAddress=sec@tips-mine.com/CN=ca.$ROOT_DOMAIN/" \
-config "$ROOT_CNF" -extensions v3_ca
chmod 444 "$ROOT_CERT" # Permissions en lecture seule pour le certificat
echo "Certificat Root CA créé avec succès : $ROOT_CERT"