mirror of
https://github.com/tips-of-mine/gestion-certificats2.git
synced 2025-06-28 06:58:43 +02:00
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.
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
default_ca = CA_default # The default ca section
|
||||
|
||||
[ CA_default ]
|
||||
dir = /opt/tls # Where everything is kept
|
||||
dir = /opt/tls/root # Where everything is kept for the Root CA
|
||||
certs = $dir/certs # Where the issued certs are kept
|
||||
database = $dir/index.txt # database index file.
|
||||
# several certs with same subject.
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Ce script crée un certificat CA intermédiaire signé par le Root CA.
|
||||
# Il est appelé par l'application PHP lors de la création d'un nouveau "périmètre fonctionnel".
|
||||
@ -6,14 +7,21 @@
|
||||
# Arguments :
|
||||
# $1: Nom du périmètre fonctionnel (utilisé comme nom du dossier et dans le CN du certificat)
|
||||
# $2: (Optionnel) Phrase secrète pour la clé privée de l'intermédiaire
|
||||
# $3: Domaine racine (ex: exemple.com)
|
||||
|
||||
FUNCTIONAL_PERIMETER_NAME="$1"
|
||||
INTERMEDIATE_KEY_PASSPHRASE="$2" # Optionnel
|
||||
INTERMEDIATE_KEY_PASSPHRASE="$2" # Optional, can be empty string if no passphrase
|
||||
ROOT_DOMAIN="$3"
|
||||
|
||||
if [ -z "$FUNCTIONAL_PERIMETER_NAME" ]; then
|
||||
echo "Usage: $0 <functional_perimeter_name> [key_passphrase]"
|
||||
if [ -z "$FUNCTIONAL_PERIMETER_NAME" ] || [ -z "$ROOT_DOMAIN" ]; then
|
||||
echo "Usage: $0 <functional_perimeter_name> <key_passphrase|EMPTY_STRING> <root_domain>"
|
||||
echo "Error: Functional perimeter name and root domain are required."
|
||||
exit 1
|
||||
fi
|
||||
# If INTERMEDIATE_KEY_PASSPHRASE is the literal "EMPTY_STRING", set it to an actual empty string.
|
||||
if [ "$INTERMEDIATE_KEY_PASSPHRASE" == "EMPTY_STRING" ]; then
|
||||
INTERMEDIATE_KEY_PASSPHRASE=""
|
||||
fi
|
||||
|
||||
ROOT_CA_DIR="/opt/tls/root"
|
||||
INTERMEDIATE_CA_DIR="/opt/tls/intermediate/$FUNCTIONAL_PERIMETER_NAME"
|
||||
@ -32,6 +40,12 @@ echo "Démarrage de la création du certificat Intermédiaire pour '$FUNCTIONAL_
|
||||
# Créer les dossiers nécessaires pour la PKI Intermédiaire
|
||||
mkdir -p "$INTERMEDIATE_CA_DIR/certs" "$INTERMEDIATE_CA_DIR/crl" "$INTERMEDIATE_CA_DIR/newcerts" "$INTERMEDIATE_CA_DIR/private" "$INTERMEDIATE_CA_DIR/csr"
|
||||
|
||||
# Copier le fichier de configuration OpenSSL pour l'intermédiaire
|
||||
cp /opt/scripts/configs/intermediate-openssl.conf "$INTERMEDIATE_CNF"
|
||||
|
||||
# Adjust the 'dir' variable in the copied OpenSSL config to point to the specific intermediate CA directory
|
||||
sed -i "s|^dir\s*=\s*/opt/tls/intermediate.*|dir = $INTERMEDIATE_CA_DIR|" "$INTERMEDIATE_CNF"
|
||||
|
||||
# Initialiser les fichiers requis par OpenSSL pour une CA intermédiaire
|
||||
chmod 700 "$INTERMEDIATE_CA_DIR/private"
|
||||
touch "$INTERMEDIATE_CA_DIR/index.txt"
|
||||
@ -55,7 +69,7 @@ chmod 400 "$INTERMEDIATE_KEY"
|
||||
openssl req -new -sha256 \
|
||||
-key "$INTERMEDIATE_KEY" $([ -n "$INTERMEDIATE_KEY_PASSPHRASE" ] && echo "-passin pass:\"$INTERMEDIATE_KEY_PASSPHRASE\"") \
|
||||
-out "$INTERMEDIATE_CSR" \
|
||||
-subj "/C=FR/ST=NORD/L=ROUBAIX/O=IT/OU=IT/emailAddress=sec@tips-mine.com/CN=intermediate-cert.$ROOT_DOMAIN/" \
|
||||
-subj "/C=FR/ST=NORD/L=ROUBAIX/O=IT/OU=IT/emailAddress=sec@tips-mine.com/CN=$FUNCTIONAL_PERIMETER_NAME.intermediate.$ROOT_DOMAIN/" \
|
||||
-config "$INTERMEDIATE_CNF" # Utilise le CNF de l'intermédiaire pour la création de la CSR
|
||||
|
||||
# Signer la CSR de l'Intermédiaire avec le Root CA
|
||||
@ -70,16 +84,16 @@ cat "$INTERMEDIATE_CERT" "$ROOT_CERT" > "$INTERMEDIATE_CHAIN"
|
||||
chmod 444 "$INTERMEDIATE_CHAIN"
|
||||
|
||||
# Create a Certificate revocation list of the intermediate CA
|
||||
openssl ca -config "$INTERMEDIATE_CNF" -gencrl -out "$INTERMEDIATE_CNF/crl/intermediate.crl.pem"
|
||||
openssl ca -config "$INTERMEDIATE_CNF" -gencrl -out "$INTERMEDIATE_CA_DIR/crl/intermediate.crl.pem"
|
||||
|
||||
# Create OSCP key pair
|
||||
openssl genrsa -out "$INTERMEDIATE_CNF/private/ocsp.key.pem" 4096
|
||||
openssl genrsa -out "$INTERMEDIATE_CA_DIR/private/ocsp.key.pem" 4096
|
||||
|
||||
# Create the OSCP CSR
|
||||
openssl req -new -sha256 \
|
||||
-key "$INTERMEDIATE_CA_DIR/private/ocsp.key.pem" \
|
||||
-out "$INTERMEDIATE_CNF/crl/intermediate.crl.pem" -nodes \
|
||||
-subj "/C=FR/ST=NORD/L=ROUBAIX/O=IT/OU=IT/emailAddress=sec@tips-mine.com/CN=ocsp-cert.$ROOT_DOMAIN/"\
|
||||
-out "$INTERMEDIATE_CA_DIR/csr/ocsp.csr.pem" -nodes \
|
||||
-subj "/C=FR/ST=NORD/L=ROUBAIX/O=IT/OU=IT/emailAddress=sec@tips-mine.com/CN=$FUNCTIONAL_PERIMETER_NAME.ocsp.$ROOT_DOMAIN/"\
|
||||
-config "$INTERMEDIATE_CNF"
|
||||
|
||||
echo "Certificat Intermédiaire CA pour '$FUNCTIONAL_PERIMETER_NAME' créé : $INTERMEDIATE_CERT"
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/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.
|
||||
@ -25,6 +26,9 @@ mkdir -p "$ROOT_CA_DIR/certs" "$ROOT_CA_DIR/crl" "$ROOT_CA_DIR/newcerts" "$ROOT_
|
||||
|
||||
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"
|
||||
|
||||
|
Reference in New Issue
Block a user