- fix de la creation du .pfx & optimisation

This commit is contained in:
Frogg 2026-05-13 10:14:38 +02:00
parent d375f0ca4c
commit 1cbd7ce0c6
2 changed files with 34 additions and 55 deletions

View File

@ -2,12 +2,17 @@
# shellcheck disable=SC2034
# CA INSTALLATION
CONFIG_DEB_INSTALL_DEFAULT_CA_SERVER="192.168.0.110"
CONFIG_DEB_INSTALL_DEFAULT_CA_WILDCARD="*.server.home"
CONFIG_DEB_INSTALL_DEFAULT_CA_SERVICES="gitea nginx apache2 mysql postgresql jellyfin"
CONFIG_DEB_INSTALL_DEFAULT_CA_CRON="STEP-CA-RENEWAL"
CONFIG_DEB_INSTALL_DEFAULT_CA_STEP="step-cli_0.24.4_amd64.deb"
CONFIG_DEB_INSTALL_DEFAULT_CA_INSTALL_PATH="/etc/ssl/wildcard"
CONFIG_DEB_INSTALL_DEFAULT_CA_FILE_PFX="server.pfx"
CONFIG_DEB_INSTALL_DEFAULT_CA_FILE_CRT="server.crt"
CONFIG_DEB_INSTALL_DEFAULT_CA_FILE_KEY="server.key"
CONFIG_DEB_INSTALL_DEFAULT_CA_CRON="STEP-CA-RENEWAL"
# SCRIPT UPDATE INSTALLATION
CONFIG_DEB_INSTALL_CRON_UPDATE="CONFIG_DEB_INSTALL_CRON_UPDATE"
CONFIG_DEB_INSTALL_JSON='[

View File

@ -563,11 +563,20 @@ EOF"
do_deb_sys_cert_install(){
local ca_ip wildcard_domain ca_url ca_fingerprint base_domain marker root_crt input_ip step_path temp_root \
system_target inter_target server_crt cert_group load_state unit svc_user current_group \
local ca_ip wildcard_domain ca_url ca_fingerprint base_domain marker root_crt input_ip step_path \
system_target inter_target cert_group load_state unit svc_user current_group \
cert_dir cert_crt cert_key cert_key cert_pfx pfx_cmd pfx_input step_bin renew_cmd restart_cmd="" \
unit full_command cert_fullchain
# Fichiers de certificats
cert_dir="${CONFIG_DEB_INSTALL_DEFAULT_CA_INSTALL_PATH}"
cert_crt="${cert_dir}/${CONFIG_DEB_INSTALL_DEFAULT_CA_FILE_CRT}"
cert_key="${cert_dir}/${CONFIG_DEB_INSTALL_DEFAULT_CA_FILE_KEY}"
cert_pfx="${cert_dir}/${CONFIG_DEB_INSTALL_DEFAULT_CA_FILE_PFX}"
# Groupe utilisé pour l'accès aux certificats
cert_group="ssl-cert"
msg_info "=== Configuration Automatisée du Client PKI ==="
# 1. Saisie des informations de base
@ -577,10 +586,7 @@ do_deb_sys_cert_install(){
read -rp "Domaine Wildcard [${CONFIG_DEB_INSTALL_DEFAULT_CA_WILDCARD}] : " INPUT_DOMAIN
wildcard_domain=${INPUT_DOMAIN:-${CONFIG_DEB_INSTALL_DEFAULT_CA_WILDCARD}}
# Petit bonus : on s'assure que le ca_url est bien formé
#ca_url="https://$(echo "$ca_ip" | sed 's|https://||')"
echo -e "Configuration retenue : IP=$ca_ip | Domaine=$wildcard_domain"
msg_info "Configuration retenue : IP=$ca_ip | Domaine=$wildcard_domain"
ca_url="https://$ca_ip"
@ -614,17 +620,6 @@ do_deb_sys_cert_install(){
msg_error "Échec de l'installation du paquet ${CONFIG_DEB_INSTALL_DEFAULT_CA_STEP}"
return 1
fi
# On télécharge une version stable spécifique
#VERSION="0.24.4"
#URL="https://github.com/smallstep/cli/releases/download/v${VERSION}/step-cli_${VERSION}_amd64.deb"
#if wget -q $URL -O /tmp/step.deb; then
# dpkg -i /tmp/step.deb > /dev/null 2>&1
# rm /tmp/step.deb
#else
# msg_error "Échec du téléchargement du paquet .deb"
# return 1
#fi
else
msg_success "paquet Step CLI déjà installé"
fi
@ -641,13 +636,18 @@ do_deb_sys_cert_install(){
rm -rf "$step_path"
mkdir -p "$step_path"
# CRUCIAL : On dit à step d'utiliser ce dossier pour TOUTES ses opérations
export STEPPATH="$step_path"
# 2. Utilisation de la Fingerprint confirmée
#ca_fingerprint="4873b9eaeb8a7643475939b4035221bd1bc3acd0db00e94df5a76d771459f439"
root_ca_fingerprint=$(ssh "root@${ca_ip}" "step certificate fingerprint /var/lib/step-ca/.step/certs/root_ca.crt")
if [ -z "$root_ca_fingerprint" ]; then
msg_error " Impossible de récupérer le fingerprint."
return 1
msg_error " Impossible de récupérer le fingerprint."
return 1
else
msg_info "fingerprint récupéré : ${root_ca_fingerprint}"
fi
# 3. Liaison (Bootstrap)
@ -658,22 +658,11 @@ do_deb_sys_cert_install(){
# 4. Génération du Wildcard
mkdir -p "${CONFIG_DEB_INSTALL_DEFAULT_CA_INSTALL_PATH}"
base_domain=$(echo "$wildcard_domain" | sed 's/\*\.//')
echo "### THIS IS A TEST ###"
echo "### THIS IS A TEST ###"
echo "### THIS IS A TEST ### $base_domain"
base_domain="${wildcard_domain#*.}"
echo "### THIS IS A TEST ###"
echo "### THIS IS A TEST ###"
echo "### THIS IS A TEST ### $base_domain"
step ca certificate "$wildcard_domain" \
"${CONFIG_DEB_INSTALL_DEFAULT_CA_INSTALL_PATH}/server.crt" \
"${CONFIG_DEB_INSTALL_DEFAULT_CA_INSTALL_PATH}/server.key" \
"${cert_crt}" \
"${cert_key}" \
--ca-url "$ca_url" \
--root "$root_crt" \
--san "$wildcard_domain" \
@ -691,19 +680,15 @@ do_deb_sys_cert_install(){
# 1. Définition des chemins
# On s'assure de retrouver le fichier même si la variable a sauté
temp_root="/tmp/step-config/certs/root_ca.crt"
system_target="/usr/local/share/ca-certificates/step-ca-frogg.crt"
inter_target="/usr/local/share/ca-certificates/step-ca-intermediate-frogg.crt"
### --- SECTION INTERMEDIATE --- ###
# Chemins pour l'intermédiaire
server_crt="${CONFIG_DEB_INSTALL_DEFAULT_CA_INSTALL_PATH}/server.crt" # Ton cert généré par step
if [ -f "$server_crt" ]; then
if [ -f "$cert_crt" ]; then
# On extrait le DEUXIÈME certificat du fichier (l'intermédiaire)
# On utilise awk pour isoler le second bloc -----BEGIN...END-----
awk 'split($0,a,"-----END CERTIFICATE-----"){print a[1] "-----END CERTIFICATE-----"}' "$server_crt" | tail -n +2 | awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/' > "$inter_target"
awk 'split($0,a,"-----END CERTIFICATE-----"){print a[1] "-----END CERTIFICATE-----"}' "$cert_crt" | tail -n +2 | awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/' > "$inter_target"
if [ -s "$inter_target" ]; then
msg_success "Certificat intermédiaire extrait avec succès."
@ -713,15 +698,15 @@ do_deb_sys_cert_install(){
step ca root "$inter_target" --ca-url "$ca_url" --fingerprint "$ca_fingerprint" --force > /dev/null 2>&1
fi
else
msg_warn "server.crt introuvable, impossible d'extraire l'intermédiaire pour le moment."
msg_warn "${cert_crt} introuvable, impossible d'extraire l'intermédiaire pour le moment."
fi
### --- FIN SECTION INTERMEDIATE --- ###
if [ -f "$temp_root" ]; then
if [ -f "$root_crt" ]; then
# 2. On nettoie le certificat (format PEM pur) pour éviter l'erreur 'rehash'
# Cela extrait uniquement le certificat et ignore le texte inutile
openssl x509 -in "$temp_root" -out "$system_target"
openssl x509 -in "$root_crt" -out "$system_target"
# 3. Mise à jour du magasin (sans --fresh pour éviter les warnings inutiles)
if update-ca-certificates > /dev/null 2>&1; then
@ -730,27 +715,18 @@ do_deb_sys_cert_install(){
msg_error "Échec lors de la mise à jour des certificats système."
fi
else
msg_error "Source introuvable dans $temp_root. Vérifie que l'étape 3 a réussi."
msg_error "Source introuvable dans $root_crt. Vérifie que l'étape 3 a réussi."
fi
# ---(Cron & Nettoyage final) ---
# C'est seulement MAINTENANT qu'on peut supprimer
rm -rf "/tmp/step-config"
rm -rf "${step_path}"
# ==================================================================
# [5/7] ATTRIBUTION DES DROITS
# ==================================================================
msg_warning "[5/7] Finalisation des droits et redémarrage des services..."
# Fichiers de certificats
cert_dir="${CONFIG_DEB_INSTALL_DEFAULT_CA_INSTALL_PATH}"
cert_crt="${cert_dir}/server.crt"
cert_key="${cert_dir}/server.key"
cert_pfx="${cert_dir}/server.pfx"
# Groupe utilisé pour l'accès aux certificats
cert_group="ssl-cert"
# Création du groupe si nécessaire
groupadd -f "$cert_group"
@ -769,8 +745,6 @@ do_deb_sys_cert_install(){
# Parcours des services configurés pour ajouter l utilisateur au groupe ssl
for svc in $CONFIG_DEB_INSTALL_DEFAULT_CA_SERVICES; do
load_state unit svc_user
unit="${svc%.service}.service"
# Vérifie que l'unité existe réellement