#!/bin/bash # Ce script crée un certificat simple (d'entité finale) signé par le CA intermédiaire # du périmètre fonctionnel spécifié. # Il est appelé par l'application PHP. # Arguments : # $1: Nom du sous-domaine (ex: www, api) ou nom commun # $2: Nom du périmètre fonctionnel (pour identifier le CA intermédiaire à utiliser) SUBDOMAIN_OR_CN_NAME="$1" FUNCTIONAL_PERIMETER_NAME="$2" if [ -z "$SUBDOMAIN_OR_CN_NAME" ] || [ -z "$FUNCTIONAL_PERIMETER_NAME" ]; then echo "Usage: $0 " exit 1 fi INTERMEDIATE_CA_DIR="/opt/tls/intermediate/$FUNCTIONAL_PERIMETER_NAME" INTERMEDIATE_CNF="$INTERMEDIATE_CA_DIR/openssl.cnf" # Vérifier si le CA intermédiaire existe if [ ! -f "$INTERMEDIATE_CA_DIR/certs/intermediate.cert.pem" ]; then echo "Erreur: Le certificat intermédiaire pour le périmètre '$FUNCTIONAL_PERIMETER_NAME' n'existe pas." exit 1 fi # Nom de fichier pour le nouveau certificat et sa clé # Le nom du certificat sera au format: ..cert.pem CERT_BASE_NAME="${SUBDOMAIN_OR_CN_NAME}.${FUNCTIONAL_PERIMETER_NAME}" KEY_FILE="$INTERMEDIATE_CA_DIR/private/${CERT_BASE_NAME}.key.pem" CSR_FILE="$INTERMEDIATE_CA_DIR/csr/${CERT_BASE_NAME}.csr.pem" CERT_FILE="$INTERMEDIATE_CA_DIR/certs/${CERT_BASE_NAME}.cert.pem" echo "Démarrage de la création du certificat '$SUBDOMAIN_OR_CN_NAME' pour le périmètre '$FUNCTIONAL_PERIMETER_NAME'..." # Générer la clé privée pour le certificat (2048 bits, sans passphrase) openssl genrsa -out "$KEY_FILE" 2048 chmod 400 "$KEY_FILE" # Permissions strictes # Générer la CSR (Certificate Signing Request) pour le certificat # Le Common Name (CN) est important pour les certificats SSL/TLS openssl req -new -sha256 -key "$KEY_FILE" -out "$CSR_FILE" \ -subj "/C=FR/ST=Hauts-de-France/L=Roubaix/O=GestionCertif/OU=${FUNCTIONAL_PERIMETER_NAME}/CN=${SUBDOMAIN_OR_CN_NAME}.cert-gestion.local" \ -reqexts usr_cert -config "$INTERMEDIATE_CNF" # Utilise le CNF de l'intermédiaire et ses extensions usr_cert # Signer la CSR avec le CA intermédiaire openssl ca -batch -config "$INTERMEDIATE_CNF" -extensions usr_cert -days 365 -notext -md sha256 \ -in "$CSR_FILE" \ -out "$CERT_FILE" chmod 444 "$CERT_FILE" # Permissions en lecture seule echo "Certificat '$CERT_BASE_NAME' créé avec succès : $CERT_FILE"