linux_ejbca

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
linux_ejbca [2024/03/21 12:39] – [Utilisateur] nekanlinux_ejbca [2024/03/26 16:53] (Version actuelle) – [L'état des différents containers] nekan
Ligne 1: Ligne 1:
 ====== EJBCA - Installation d'une infrastructure à clés publiques (PKI) ====== ====== EJBCA - Installation d'une infrastructure à clés publiques (PKI) ======
  
-<label type="success">Création</label>  --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2024/03/19 10:29// +<label type="success">Création</label>  --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2024/03/19 10:29// \\ 
-<label type="info">Modification</label>  --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2024/03/21 11:28//+<label type="info">Modification</label>  --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2024/03/26 16:26//
  
 Une infrastructure à clés publiques ou PKI (//**P**ublic **K**ey **I**nfrastructure//) est un ensemble de services permettant de gérer des clés publiques et se faisant, permettant l'authentification d'un service, système ou utilisateur. Une infrastructure à clés publiques ou PKI (//**P**ublic **K**ey **I**nfrastructure//) est un ensemble de services permettant de gérer des clés publiques et se faisant, permettant l'authentification d'un service, système ou utilisateur.
Ligne 135: Ligne 135:
         echo "Script de gestion du service EJBCA"         echo "Script de gestion du service EJBCA"
         echo ""         echo ""
-        echo "Usage : ./manage-ejbca-daemon.sh [start|stop|restart|status|help]"+        echo "Usage : ./manage-ejbca-daemon.sh [backup|help|restart|start|status|stop|upgrade]"
         echo ""         echo ""
-        echo "start                     Démarre l'instance." +        echo "backup                    Sauvegarde la base de données." 
-        echo "stop                      Arrête l'instance."+        echo "help                      Affiche cette aide."
         echo "restart                   Redémarre l'instance."         echo "restart                   Redémarre l'instance."
 +        echo "start                     Démarre l'instance."
         echo "status                    Affiche l'état de l'instance."         echo "status                    Affiche l'état de l'instance."
-        echo "help                      Affiche cette aide."+        echo "stop                      Arrête l'instance." 
 +        echo "upgrade                   Met à jour l'instance."
 } }
  
Ligne 149: Ligne 151:
  
 case $1 in case $1 in
-        "start"|"restart"|"stop"|"status")+        "start"|"restart"|"stop"|"status"|"upgrade"|"backup")
                 ACTION="$1"                 ACTION="$1"
                 ;;                 ;;
Ligne 287: Ligne 289:
                                 ;;                                 ;;
                 esac                 esac
 +                ;;
 +        "backup")
 +                # Vérification de l'état et action
 +                case $STATUS in
 +                        0)
 +                                # Démarré
 +                                echo "Sauvegarde en cours..."
 +                                Version=$(curl -k -s https://localhost/ejbca/ejbca-rest-api/v1/certificate/status | jq .revision | awk '{print $2}')
 +                                UserName=$(grep 'MYSQL_USER' $WRKDIR/docker-compose.yml | cut -d'=' -f2)
 +                                PassWord=$(grep 'MYSQL_PASSWORD' $WRKDIR/docker-compose.yml | cut -d'=' -f2)
 +                                cd $WRKDIR && docker compose exec $EJBDB mysqldump ejbca -u${UserName} -p${PassWord} > ejbca-${Version}-backup-$(date +%Y%m%d_%H%M_%Z).sql
 +                                if [[ $? -eq 0 ]]; then
 +                                        # Sauvegarde réussie
 +                                        echo "Sauvegarde réussie"
 +                                        CODE=0
 +                                else
 +                                        # Sauvegarde raté
 +                                        echo "Sauvegarde en échec"
 +                                        CODE=2
 +                                fi
 +                                ;;
 +                        *)
 +                                # Autres
 +                                echo "L'instance n'est pas correctement démarrée. Sauvegarde impossible."
 +                                CODE=2
 +                                ;;
 +                esac
 +                ;;
 +        "upgrade")
 +                # On arrête l'instance
 +                echo "Arrêt de l'instance"
 +                cd $WRKDIR && docker compose down
 +
 +                # Mise à jour
 +                echo "Téléchargement de la dernière version"
 +                cd $WRKDIR && docker image pull keyfactor/ejbca-ce:latest
 +
 +                # Redémarrage de l'instance
 +                echo "Redémarrage et mise à jour"
 +                cd $WRKDIR && docker compose up -d
                 ;;                 ;;
         *)         *)
Ligne 439: Ligne 481:
  
 <callout type="info" title="Bot" icon="true">Voilà, on dispose désormais d'un utilisateur authentifié avec un certificat et un mot de passe et disposant de droits limités.</callout> <callout type="info" title="Bot" icon="true">Voilà, on dispose désormais d'un utilisateur authentifié avec un certificat et un mot de passe et disposant de droits limités.</callout>
 +
 +===== Supervision =====
 +
 +Pour la supervision dans ''Nagios'', nous allons contrôler 4 éléments :
 +  * L'état du service ''docker''.
 +  * L'état des différents containers.
 +  * L'état de santé de la PKI.
 +  * La présence de mises à jour.
 +
 +Ci-dessous, je dépose les scripts que j'utilise pour les différents contrôles
 +
 +==== L'état du service docker ====
 +
 +On se base sur les plugins de ''nagios'' avec la commande :
 +<sxh bash>/usr/lib/nagios/plugins/check_procs -w 1:1 -c 0: -C dockerd</sxh>
 +
 +==== L'état des différents containers ====
 +
 +J'utilise le script de Tim Laurence (Source : [[https://github.com/timdaman/check_docker/blob/master/check_docker/check_docker.py|GitHub]]) pour contrôler l'état des containers. Une fois le script installé, il suffit de lancer la commande suivante :
 +<sxh bash>/usr/lib/nagios/plugins/check_docker.py --no-ok --status running --containers ejbca ejbca-database</sxh>
 +
 +==== L'état de santé de la PKI ====
 +
 +La PKI réalise une vérification automatique de son état de santé. Son rapport est affiché à l'URI ''/ejbca/publicweb/healthcheck/ejbcahealth''. Le script suivant interroge cette adresse et renvoie l'information au format ''NRPE'' :
 +<sxh bash>#!/bin/bash
 +
 +# Adresse du serveur
 +ServerAddress="localhost"
 +
 +# URI de l'état de santé
 +Uri="/ejbca/publicweb/healthcheck/ejbcahealth"
 +
 +# Requête
 +Request=$(curl -k -s https://${ServerAddress}${Uri})
 +
 +# Traitement du résultat de la requête
 +if [ "$Request" == "ALLOK" ]; then
 +        # Tout va bien
 +        Status="GOOD"
 +        ExitCode=0
 +else
 +        # PKI en erreur
 +        Status="CRIT"
 +        ExitCode=2
 +fi
 +
 +# Renvoi des informations
 +echo "$Status - Health status : $Request"
 +exit $ExitCode</sxh>
 +
 +==== La présence de mises à jour ====
 +
 +On vérifie la présence de mise à jour en comparant le hash de la version actuelle de notre PKI avec le hash de la dernière version.
 +<sxh bash>#!/bin/bash
 +
 +# Adresse du serveur
 +ServerAddress="localhost"
 +
 +# Uri du status
 +ServerUri="/ejbca/ejbca-rest-api/v1/certificate/status"
 +
 +# Nom du container
 +Container="keyfactor/ejbca-ce"
 +
 +# Récupération de la version actuelle
 +Actual=$(curl -k -s https://${ServerAddress}${ServerUri} | jq .revision | awk '{print $2}')
 +
 +# Récupération du hash de la version actuelle
 +ActualHash=$(docker manifest inspect ${Container}:${Actual} | jq .config.digest)
 +
 +# Récupération du hash de la dernière version
 +LatestHash=$(docker manifest inspect ${Container}:latest | jq .config.digest)
 +
 +# Test et retour
 +if [ "$ActualHash" == "$LatestHash" ]; then
 +        # Les hash sont les mêmes, on est à jour
 +        echo "GOOD - up-to-date"
 +        exit 0
 +else
 +        # Une mise à jour est disponible
 +        echo "WARN - update available"
 +        exit 1
 +fi</sxh>
  
 ===== Conclusion ===== ===== Conclusion =====
  • linux_ejbca.1711021166.txt.gz
  • Dernière modification : 2024/03/21 12:39
  • de nekan