Files
gestion-certificats2/scripts/create_cert.sh
2025-06-14 19:03:54 +02:00

55 lines
2.3 KiB
Bash

#!/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 <subdomain_or_cn_name> <functional_perimeter_name>"
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: <subdomain_or_cn_name>.<functional_perimeter_name>.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"