120 lines
3.5 KiB
Bash
120 lines
3.5 KiB
Bash
#!/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"
|
|
|