#!/bin/bash # 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. 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" # 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 # Créer le fichier openssl.cnf pour le Root CA cat < "$ROOT_CNF" [ ca ] default_ca = CA_default [ CA_default ] dir = $ROOT_CA_DIR # Répertoire où tout est stocké certs = \$dir/certs # Répertoire des certificats émis crl_dir = \$dir/crl # Répertoire des CRL (Listes de révocation de certificats) database = \$dir/index.txt # Fichier d'index de la base de données (pour OpenSSL) new_certs_dir = \$dir/newcerts # Emplacement par défaut pour les nouveaux certificats certificate = \$dir/certs/ca.cert.pem # Le certificat CA lui-même serial = \$dir/serial # Le numéro de série actuel crlnumber = \$dir/crlnumber # Le numéro de CRL actuel crl = \$dir/crl.pem # Le fichier CRL lui-même private_key = \$dir/private/ca.key.pem # La clé privée du CA RANDFILE = \$dir/private/.rand # Fichier de nombres aléatoires privé x509_extensions = v3_ca # Extensions X509 à ajouter au certificat name_opt = ca_default # Options de nom de sujet cert_opt = ca_default # Options de certificat default_days = 3650 # Durée de validité par défaut des certificats (10 ans) default_crl_days = 30 # Durée avant la prochaine mise à jour CRL default_md = sha256 # Utiliser SHA-256 par défaut preserve = no # Conserver l'ordre des DN passé policy = policy_strict # Politique stricte pour le Root CA [ policy_strict ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ v3_ca ] # Extensions pour le certificat CA Root subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true # C'est une CA, peut signer d'autres certificats keyUsage = critical, digitalSignature, cRLSign, keyCertSign # Ajout de l'URL OCSP au certificat Root CA # IMPORTANT: Remplacez ocsp.cert-gestion.local par votre vrai nom de domaine OCSP authorityInfoAccess = OCSP;URI:http://ocsp.cert-gestion.local/ EOF # Générer la clé privée du Root CA (2048 bits, sans passphrase pour la simplicité) openssl genrsa -out "$ROOT_KEY" 2048 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=Hauts-de-France/L=Roubaix/O=GestionCertif/CN=GestionCertif Root CA" \ -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"