mirror of
https://github.com/tips-of-mine/gestion-certificats2.git
synced 2025-06-28 06:58:43 +02:00
Merge pull request #17 from tips-of-mine/fix/multiple-errors-after-perimeter
This commit addresses several issues:
This commit is contained in:
@ -142,8 +142,8 @@ if ($userCount === 0 || !$rootCertExists) {
|
|||||||
$expirationDate = $expirationTimestamp ? date('Y-m-d H:i:s', $expirationTimestamp) : (new DateTime('+10 years'))->format('Y-m-d H:i:s');
|
$expirationDate = $expirationTimestamp ? date('Y-m-d H:i:s', $expirationTimestamp) : (new DateTime('+10 years'))->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
// Enregistrer le certificat root dans la base de données
|
// Enregistrer le certificat root dans la base de données
|
||||||
$stmt = $dbInstance->prepare("INSERT INTO certificates (name, type, common_name, expiration_date) VALUES (?, ?, ?, ?)");
|
$stmt = $dbInstance->prepare("INSERT INTO certificates (name, type, expiration_date) VALUES (?, ?, ?)");
|
||||||
$stmt->execute(['ca.cert.pem', 'root', $_SESSION['init_root_domain'], $expirationDate]);
|
$stmt->execute(['ca.cert.pem', 'root', $expirationDate]);
|
||||||
} else {
|
} else {
|
||||||
echo "<p style=\"color: red;\">Erreur lors de la création du certificat Root CA. Veuillez vérifier les logs PHP et Docker.</p>";
|
echo "<p style=\"color: red;\">Erreur lors de la création du certificat Root CA. Veuillez vérifier les logs PHP et Docker.</p>";
|
||||||
echo "<pre>" . htmlspecialchars($output) . "</pre>";
|
echo "<pre>" . htmlspecialchars($output) . "</pre>";
|
||||||
|
@ -51,6 +51,7 @@ class PerimeterController
|
|||||||
$errorMessage = $_SESSION['error'] ?? null;
|
$errorMessage = $_SESSION['error'] ?? null;
|
||||||
unset($_SESSION['error']);
|
unset($_SESSION['error']);
|
||||||
|
|
||||||
|
$userRole = $this->authService->getUserRole(); // Définir $userRole
|
||||||
require_once APP_ROOT_DIR . '/src/Views/perimeters/index.php';
|
require_once APP_ROOT_DIR . '/src/Views/perimeters/index.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,11 +164,12 @@ class PerimeterController
|
|||||||
if (strpos($output, "Certificat Intermédiaire CA pour '$perimeterName' créé") !== false) {
|
if (strpos($output, "Certificat Intermédiaire CA pour '$perimeterName' créé") !== false) {
|
||||||
// Enregistrer le périmètre dans la base de données
|
// Enregistrer le périmètre dans la base de données
|
||||||
$stmt = $this->db->prepare("INSERT INTO functional_perimeters (name, intermediate_cert_name) VALUES (?, ?)");
|
$stmt = $this->db->prepare("INSERT INTO functional_perimeters (name, intermediate_cert_name) VALUES (?, ?)");
|
||||||
$intermediateCertFileName = "intermediate.cert.pem"; // Nom générique du fichier pour l'intermédiaire
|
$intermediateCertFileName = $perimeterName . "_intermediate.cert.pem"; // Nom unique pour la BDD
|
||||||
$stmt->execute([$perimeterName, $intermediateCertFileName]);
|
$stmt->execute([$perimeterName, $intermediateCertFileName]);
|
||||||
$perimeterId = $this->db->lastInsertId();
|
$perimeterId = $this->db->lastInsertId();
|
||||||
|
|
||||||
// Enregistrer le certificat intermédiaire dans la table des certificats
|
// Enregistrer le certificat intermédiaire dans la table des certificats
|
||||||
|
// Le nom de fichier sur le disque reste "intermediate.cert.pem" dans son dossier de périmètre.
|
||||||
$fullCertPath = INTERMEDIATE_CA_PATH_BASE . "/{$perimeterName}/certs/intermediate.cert.pem";
|
$fullCertPath = INTERMEDIATE_CA_PATH_BASE . "/{$perimeterName}/certs/intermediate.cert.pem";
|
||||||
$expirationDate = (new \DateTime('+5 years'))->format('Y-m-d H:i:s'); // Valeur par défaut
|
$expirationDate = (new \DateTime('+5 years'))->format('Y-m-d H:i:s'); // Valeur par défaut
|
||||||
if (file_exists($fullCertPath)) {
|
if (file_exists($fullCertPath)) {
|
||||||
@ -178,6 +180,7 @@ class PerimeterController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Utiliser $intermediateCertFileName (qui est maintenant unique) pour l'enregistrement en BDD dans la table 'certificates'
|
||||||
$stmt = $this->db->prepare("INSERT INTO certificates (name, type, functional_perimeter_id, expiration_date) VALUES (?, ?, ?, ?)");
|
$stmt = $this->db->prepare("INSERT INTO certificates (name, type, functional_perimeter_id, expiration_date) VALUES (?, ?, ?, ?)");
|
||||||
$stmt->execute([$intermediateCertFileName, 'intermediate', $perimeterId, $expirationDate]);
|
$stmt->execute([$intermediateCertFileName, 'intermediate', $perimeterId, $expirationDate]);
|
||||||
|
|
||||||
@ -185,7 +188,13 @@ class PerimeterController
|
|||||||
$this->logService->log('info', "Périmètre fonctionnel '$perimeterName' créé avec succès et certificat intermédiaire généré.", $userId, $ipAddress);
|
$this->logService->log('info', "Périmètre fonctionnel '$perimeterName' créé avec succès et certificat intermédiaire généré.", $userId, $ipAddress);
|
||||||
$_SESSION['success'] = $this->langService->__('perimeter_create_success');
|
$_SESSION['success'] = $this->langService->__('perimeter_create_success');
|
||||||
} else {
|
} else {
|
||||||
$_SESSION['error'] = $this->langService->__('perimeter_create_error', ['output' => htmlspecialchars($output)]);
|
// Check for specific error message
|
||||||
|
$specificErrorMessage = "Erreur : Le répertoire pour le périmètre '$perimeterName' existe déjà.";
|
||||||
|
if (strpos($output, $specificErrorMessage) !== false) {
|
||||||
|
$_SESSION['error'] = $this->langService->__('perimeter_create_error_directory_exists', ['perimeterName' => $perimeterName]);
|
||||||
|
} else {
|
||||||
|
$_SESSION['error'] = $this->langService->__('perimeter_create_error', ['output' => htmlspecialchars($output)]);
|
||||||
|
}
|
||||||
$this->logService->log('error', "Échec création périmètre '$perimeterName': $output", $userId, $ipAddress);
|
$this->logService->log('error', "Échec création périmètre '$perimeterName': $output", $userId, $ipAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,13 @@ fi
|
|||||||
|
|
||||||
ROOT_CA_DIR="/opt/tls/root"
|
ROOT_CA_DIR="/opt/tls/root"
|
||||||
INTERMEDIATE_CA_DIR="/opt/tls/intermediate/$FUNCTIONAL_PERIMETER_NAME"
|
INTERMEDIATE_CA_DIR="/opt/tls/intermediate/$FUNCTIONAL_PERIMETER_NAME"
|
||||||
|
|
||||||
|
# Vérifier si le répertoire de la CA intermédiaire existe déjà
|
||||||
|
if [ -d "$INTERMEDIATE_CA_DIR" ]; then
|
||||||
|
echo "Erreur : Le répertoire pour le périmètre '$FUNCTIONAL_PERIMETER_NAME' existe déjà. Veuillez le supprimer ou choisir un autre nom."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
INTERMEDIATE_KEY="$INTERMEDIATE_CA_DIR/private/intermediate.key.pem"
|
INTERMEDIATE_KEY="$INTERMEDIATE_CA_DIR/private/intermediate.key.pem"
|
||||||
INTERMEDIATE_CSR="$INTERMEDIATE_CA_DIR/csr/intermediate.csr.pem"
|
INTERMEDIATE_CSR="$INTERMEDIATE_CA_DIR/csr/intermediate.csr.pem"
|
||||||
INTERMEDIATE_CERT="$INTERMEDIATE_CA_DIR/certs/intermediate.cert.pem"
|
INTERMEDIATE_CERT="$INTERMEDIATE_CA_DIR/certs/intermediate.cert.pem"
|
||||||
|
@ -31,8 +31,10 @@ cp /opt/scripts/configs/root-openssl.conf "$ROOT_CNF"
|
|||||||
|
|
||||||
# Initialiser les fichiers requis par OpenSSL pour une CA
|
# Initialiser les fichiers requis par OpenSSL pour une CA
|
||||||
touch "$ROOT_CA_DIR/index.txt"
|
touch "$ROOT_CA_DIR/index.txt"
|
||||||
|
chmod 666 "$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/serial" # Numéro de série initial pour les certificats
|
||||||
|
chmod 666 "$ROOT_CA_DIR/serial"
|
||||||
echo 1000 > "$ROOT_CA_DIR/crlnumber" # Numéro de série initial pour la CRL
|
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é)
|
# Générer la clé privée du Root CA (2048 bits, sans passphrase pour la simplicité)
|
||||||
|
Reference in New Issue
Block a user