Let's Encrypt
Ligne 1 : | Ligne 1 : | ||
− | |||
− | |||
− | |||
− | |||
== Installation sur un ESXi == | == Installation sur un ESXi == | ||
Version du 6 juin 2019 à 12:37
Sommaire
Installation sur un ESXi
Au regard de la complexité d'installation de cerbot et de ses dépendances sur un ESXi, il a été décidé de s'appuyer sur le package Acme du routeur/pare-feu pfSense pour générer le certificat et sur un script shell pour rapatrier ledit certificat sur l'ESXi.
Créer les clés SSH
ssh-keygen n'étant pas présent sur le serveur ESXi, nous allons lancer la commande suivante sur un autre serveur Linux :
ssh-keygen -t rsa
Cela génère une clé privée .ssh/id_rsa et une clé publique .ssh/id_rsa.pub.
Editer la clé publique .ssh/id_rsa.pub, modifier le nom d'utilisateur et le nom d'hôte afin que cela corresponde avec l'utilisateur et le nom de l'ESXi.
Sur le serveur Linux, copier les clés SSH précédemment générées et les déposer sur le serveur ESXi dans un dossier .ssh créé à la racine du dossier home de l'utilisateur de l'ESXi.
Sur le serveur ESXi, sécuriser l'accès au dossier .ssh :
chmod 700 .ssh chmod 600 .ssh/*
Au niveau du routeur/pare-feu pfSense, mettre en place les règles nécessaires afin de n'ajouter l'autorisation de connexion SSH qu'au serveur ESXi seulement.
Sur le routeur/pare-feu pfSense, se connecter en SSH en tant que root et créer un dossier .ssh à la racine du dossier home :
mkdir ~/.ssh
Editer un fichier ~/.ssh/authorized_keys et ajouter le contenu de la clé publique id_rsa.pub précédemment créée.
Sécuriser l'accès au dossier .ssh du routeur/pare-feu pfSense :
chmod 700 .ssh chmod 600 .ssh/*
Depuis le serveur ESXi, faire un test de connexion SSH vers le routeur/pare-feu pfSense, la connexion devrait être fonctionnelle et ne pas demander de mot de passe.
Sauvegarde des certificats par défaut
Sur le serveur ESXi, sauvegarder la clé privée et le certificat existants :
mv /etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.crt_sav20180618 mv /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.key_sav20180618
Automatisation de la récupération du certificat SSL
Grâce à l'authentification par clé SSH précédemment réalisée, le script suivant permet la récupération automatique du certificat SSL d'une part, et la mise à jour de ce dernier sur le serveur ESXi si nécessaire d'autre part.
#!/bin/sh # Définition des variables LOG_DIR=/var/log/ssl_cert SCRIPT_NAME=$(echo $0|awk -F"/" '{print $NF}'|awk -F"." '{print $1}') LOG_FILE=$LOG_DIR/$SCRIPT_NAME$(date +"_%Y-%d-%m_%H-%M").log TEMP_DIR=/tmp REMOTE_HOST=xxxxxxxx REMOTE_USER=xxxxxxx REMOTE_DIR=xxxxxxxxxxxxxxxxxxxxxxxxxx REMOTE_CERT=xxxxxxxxxxxxxxxxxxxx.cer LOCAL_DIR=/etc/vmware/ssl LOCAL_CERT=rui.crt # Récupération du certificat scp $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/$REMOTE_CERT $TEMP_DIR/ >> $LOG_FILE 2>&1 ERROR_CODE_SCP=$? if [ $ERROR_CODE_SCP -eq 0 ] # Le SCP s'est bien déroulé then echo $(date "+%F %T ")"Le code erreur scp est "$ERROR_CODE_SCP". Suite du script." >> $LOG_FILE 2>&1 # Comparaison des certificats diff $TEMP_DIR/$REMOTE_CERT $LOCAL_DIR/$LOCAL_CERT >> $LOG_FILE 2>&1 ERROR_CODE_DIFF=$? if [ $ERROR_CODE_DIFF -eq 0 ] # Le diff ne remonte aucune différence then echo $(date "+%F %T ")"Le code erreur diff est "$ERROR_CODE_DIFF". Le diff ne remonte aucune différence. Arrêt normal du script." >> $LOG_FILE 2>&1 exit 0 elif [ $ERROR_CODE_DIFF -eq 1 ] # Le diff remonte une différence then echo $(date "+%F %T ")"Le code erreur diff est "$ERROR_CODE_DIFF". Suite du script." >> $LOG_FILE 2>&1 # Sauvegarde de l'ancien certificat mv $LOCAL_DIR/$LOCAL_CERT $LOCAL_DIR/$LOCAL_CERT$(date +"_sav%Y%d%m") >> $LOG_FILE 2>&1 ERROR_CODE_MV1=$? if [ $ERROR_CODE_MV1 -eq 0 ] # Le mv1 s'est bien déroulé then echo $(date "+%F %T ")"Le code erreur mv1 est "$ERROR_CODE_DIFF". Suite du script." >> $LOG_FILE 2>&1 # Mise en place du nouveau certificat mv $TEMP_DIR/$REMOTE_CERT $LOCAL_DIR/$LOCAL_CERT >> $LOG_FILE 2>&1 ERROR_CODE_MV2=$? if [ $ERROR_CODE_MV2 -eq 0 ] # Le mv2 s'est bien déroulé then echo $(date "+%F %T ")"Le code erreur mv2 est "$ERROR_CODE_DIFF". Suite du script." >> $LOG_FILE 2>&1 # Relance des services de l'ESXi pour prise en compte du nouveau certificat /bin/services.sh >> $LOG_FILE 2>&1 exit 0 else # Le mv2 rencontre une erreur echo $(date "+%F %T ")"Le code erreur mv2 est "$ERROR_CODE_DIFF". Arrêt prématuré du script." >> $LOG_FILE 2>&1 exit 1 fi else # Le mv1 rencontre une erreur echo $(date "+%F %T ")"Le code erreur mv1 est "$ERROR_CODE_DIFF". Arrêt prématuré du script." >> $LOG_FILE 2>&1 exit 1 fi else # Le diff rencontre une erreur echo $(date "+%F %T ")"Le code erreur diff est "$ERROR_CODE_DIFF". Arrêt prématuré du script." >> $LOG_FILE 2>&1 exit 1 fi else # Le SCP a rencontré une erreur echo $(date "+%F %T ")"Le code erreur scp est "$ERROR_CODE_SCP". Arrêt prématuré du script." >> $LOG_FILE 2>&1 exit 1 fi