#!/bin/bash # Script pour extraire le certificat CA root et le mettre à jour dans le ConfigMap # Usage: ./extract-ca-root-cert.sh [--context CLUSTER_CONTEXT] [--output FILE] set -e CONTEXT="${KUBECTL_CONTEXT:-cluster-ops}" NAMESPACE="certificates-ops" SECRET_NAME="ca-root-secret" CONFIGMAP_NAME="ca-root-certificate" OUTPUT_FILE="" # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --context) CONTEXT="$2" shift 2 ;; --output) OUTPUT_FILE="$2" shift 2 ;; *) echo "Usage: $0 [--context CLUSTER_CONTEXT] [--output FILE]" echo " --context: Contexte kubectl (défaut: cluster-ops)" echo " --output: Fichier de sortie pour le certificat (optionnel)" exit 1 ;; esac done echo "=== Extraction du certificat CA root ===" echo "Cluster: $CONTEXT" echo "Namespace: $NAMESPACE" echo "" # Vérifier que kubectl est disponible if ! command -v kubectl &> /dev/null; then echo "❌ kubectl n'est pas installé" exit 1 fi # Vérifier l'accès au cluster if ! kubectl --context="$CONTEXT" cluster-info &> /dev/null; then echo "❌ Impossible d'accéder au cluster $CONTEXT" exit 1 fi # Vérifier que le secret existe if ! kubectl --context="$CONTEXT" get secret "$SECRET_NAME" -n "$NAMESPACE" &> /dev/null; then echo "❌ Le secret $SECRET_NAME n'existe pas dans le namespace $NAMESPACE" echo " Assurez-vous que la CA root a été générée :" echo " kubectl get certificate ca-root-certificate -n $NAMESPACE --context=$CONTEXT" exit 1 fi # Extraire le certificat echo "📋 Extraction du certificat depuis le secret..." CA_CERT=$(kubectl --context="$CONTEXT" get secret "$SECRET_NAME" -n "$NAMESPACE" \ -o jsonpath='{.data.tls\.crt}' | base64 -d) if [ -z "$CA_CERT" ]; then echo "❌ Impossible d'extraire le certificat du secret" exit 1 fi # Sauvegarder dans un fichier si demandé if [ -n "$OUTPUT_FILE" ]; then echo "$CA_CERT" > "$OUTPUT_FILE" echo "✅ Certificat sauvegardé dans: $OUTPUT_FILE" else TEMP_FILE=$(mktemp) echo "$CA_CERT" > "$TEMP_FILE" OUTPUT_FILE="$TEMP_FILE" echo "✅ Certificat extrait dans un fichier temporaire" fi # Afficher les informations du certificat echo "" echo "📜 Informations du certificat CA root:" echo "$CA_CERT" | openssl x509 -text -noout | grep -E "Subject:|Issuer:|Not Before|Not After|X509v3 Subject Alternative Name" || true # Mettre à jour le ConfigMap echo "" echo "🔄 Mise à jour du ConfigMap $CONFIGMAP_NAME..." # Créer ou mettre à jour le ConfigMap kubectl --context="$CONTEXT" create configmap "$CONFIGMAP_NAME" \ --from-file=ca.crt="$OUTPUT_FILE" \ -n "$NAMESPACE" \ --dry-run=client -o yaml | \ kubectl --context="$CONTEXT" apply -f - if [ $? -eq 0 ]; then echo "✅ ConfigMap mis à jour avec succès" else echo "❌ Erreur lors de la mise à jour du ConfigMap" exit 1 fi # Nettoyer le fichier temporaire si créé if [ -n "$TEMP_FILE" ] && [ -f "$TEMP_FILE" ]; then rm "$TEMP_FILE" fi echo "" echo "=== Résumé ===" echo "✅ Certificat CA root extrait" echo "✅ ConfigMap $CONFIGMAP_NAME mis à jour dans le namespace $NAMESPACE" echo "" echo "📋 Prochaines étapes:" echo "1. Distribuer le certificat CA root aux clients (navigateurs, machines)" echo "2. Voir docs/PKI-INTERNE.md pour les instructions détaillées" echo "" echo "Pour extraire le certificat dans un fichier:" echo " $0 --output ca-root.crt"