pour mon Homelab, j’utilise l’hyperviseur VMware ESXi. L’interface d’administration était jusqu’à présent accessible soit derrière un Reverse Proxy Apache pour un accès depuis le web, soit depuis mon réseau local avec son IP. C’est donc mon reverse proxy en « frontal » qui gérait la connexion en HTTPS avec un certificat Let’s Encrypt Wildcard.
je souhaite maintenant le rendre accessible en HTTPS directement sans passer par le reverse proxy. Le certificat auto-signé de base n’est donc plus suffisant, il faut que j’utilise un certificat SSL valide directement depuis l’hyperviseur VMware ESXi.
je décris dans cet article 2 méthodes:
- comment mettre en place un certificat Letsencrypt avec renouvellement automatique.
- comment mettre en place manuellement un certificat Letsencrypt wildcard obtenu d’un autre serveur.
Je me concentre ici sur les certificats LetsEncrypt, je passe les prérequis.
c’est à dire, suivant ton cas:
- Est-ce que le serveur doit/est accessible publiquement sur internet (nécessaire pour l’installation et le renouvellement automatique)
- Est-ce que les enregistrements DNS publics sont corrects pour le domaine/sous domaine (nécessaire pour l’installation et le renouvellement automatique)
- Est-ce que le routeur redirige les bons ports
- le nom de domaine et le sous domaine FQDN sont-ils bien défini dans la configuration du serveur VMware ESXi (Mise en réseau > Pile TCP/IP > Pile TCP/IP Par défaut > Modifier les paramètres )
Installation et renouvellement automatique d’un certificat LetsEncrypt sur un hyperviseur VMware ESXi
la documentation officielle de l’outil utilisé est ici
je me connecte en ssh
à mon serveur VMware ESXi et une fois connecté :
wget -O /tmp/w2c-letsencrypt-esxi.vib https://github.com/w2c/letsencrypt-esxi/releases/latest/download/w2c-letsencrypt-esxi.vib
si comme moi à la première étape tu rencontres des problèmes, c’est à dire qu’après une longue attente ça échoue avec :
Connecting to github.com (140.82.121.4:443)
wget: error getting response
c’est très certainement que tu n’as pas ouvert le firewall. pour le vérifier :
esxcli network firewall ruleset list | grep -E '^Name|^---|http'
Name Enabled
--------------------------- -------
httpClient false
donc le temps des manips, je l’autorise avec :
esxcli network firewall ruleset set --enabled=true --ruleset-id=httpClient
si je réexécute la commande :
esxcli network firewall ruleset list | grep -E '^Name|^---|http'
Name Enabled
--------------------------- -------
httpClient true
cette fois ci c’est bon, la connexion est autorisé mais j’ai toujours un soucis avec wget
, j’utilise alors l’option --no-check-certificate
:
wget --no-check-certificate -O /tmp/w2c-letsencrypt-esxi.vib https://github.com/w2c/letsencrypt-esxi/releases/latest/download/w2c-letsencrypt-esxi.vib
cette fois ci, c’est bon mon fichier est bien téléchargé!!
Connecting to github.com (140.82.121.4:443)
Connecting to github.com (140.82.121.4:443)
Connecting to objects.githubusercontent.com (185.199.108.133:443)
saving to '/tmp/w2c-letsencrypt-esxi.vib'
w2c-letsencrypt-esxi 100% |**********************************************************************************************************************************************| 29770 0:00:00 ETA '/tmp/w2c-letsencrypt-esxi.vib' saved
on peut continuer l’installation avec :
esxcli software vib install -v /tmp/w2c-letsencrypt-esxi.vib -f
bon… la première exécution, j’ai :
Remote end closed connection without response
admetons.. je réessaie (on ne sait jamais… peut être que la deuxième fois fonctionnera.. ) et là :
Installation Result
Message: Host is not changed.
Reboot Required: false
VIBs Installed:
VIBs Removed:
VIBs Skipped: web-wack-creations_bootbank_w2c-letsencrypt-esxi_1.1.0-0.0.0
Même si je suis alerté par VIBs Skipped
. sur la doc il est indiqué qu’il devrait être installed
mais le package est bien installé. Je vérifie avec :
esxcli software vib list | grep w2c
et j’ai bien :
w2c-letsencrypt-esxi 1.1.0-0.0.0 web-wack-creations CommunitySupported 2024-12-08
à l’installation, le script est censé se lancer une première fois. Je vérifie avec :
cat /var/log/syslog.log | grep w2c
Je retrouve bien les logs d’exécution, avec un success!!
2024-12-08T15:45:06Z /etc/init.d/w2c-letsencrypt: Running 'start' action
2024-12-08T15:45:06Z /opt/w2c-letsencrypt/renew.sh: Starting certificate renewal.
2024-12-08T15:45:06Z /opt/w2c-letsencrypt/renew.sh: Existing cert issued for localhost.localdomain but current domain name is esxi.anthony-jacob.com. Requesting a new one!
2024-12-08T15:45:25Z /opt/w2c-letsencrypt/renew.sh: Success: Obtained and installed a certificate from Let's Encrypt.
2024-12-08T15:45:26Z /etc/init.d/w2c-letsencrypt: Running 'install' action
je peux maintenant rétablir la règle firewall :
esxcli network firewall ruleset set --enabled=true --ruleset-id=httpClient
Et je fais également un extra test : je vais supprimer le certificat et relancer l’outil manuellement pour confirmer que la génération du certificat s’effectue bien. Décrit dans la documentation dans la partie Force Renewal
Pour ça je commence à supprimer le certificat :
rm /etc/vmware/ssl/rui.crt
et ensuite :
/etc/init.d/w2c-letsencrypt start
et tout vas bien dans le meilleur des mondes
Success: Obtained and installed a certificate from Let's Encrypt.
Installation manuelle d’un certificat LetsEncrypt
Je dirai que si la méthode automatique fonctionne, pourquoi s’en priver.
Si par contre, comme moi, à un moment donné tu as besoin de les installer manuellement (par exemple parce que le serveur est accessible dans un réseau local sur un sous domaine non déclaré sur des enregistrements DNS publics), la démarche est ci-dessous.
l’inconvénient étant la validité limité des certificat LetsEncrypt qui oblige à refaire la manipulation régulièrement ou à le scripter.
Il y a surement tout un tas d’outils géniaux quand on a une licence vSphere et tout les outils VMware à disposition. Malheureusement dans mon cas, je passe par la case installation à la dure. ssh, scp et compagnie
avant toute chose, je me connecte en ssh à mon serveur esxi et je fait un backup des certificats existants avec :
mv /etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.crt.bak
mv /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.key.bak
me voilà sécurisé, je peux maintenant me connecter cette fois ci, toujours en ssh, au serveur qui a mes certificat Letsencrypt Wildcard.
je commence par me faire un dossier de travail et je me positionne dedans :
mkdir cert-esxi && cd cert-esxi
je copie ensuite les fichiers dans ce dossier :
sudo cp /etc/letsencrypt/live/anthony-jacob.com/privkey.pem rui.key
sudo cp /etc/letsencrypt/live/anthony-jacob.com/fullchain.pem rui.crt
et je peux maintenant les envoyer directement sur le serveur ESXi (directement car j’ai fait un backup juste au dessus hein!!)
scp rui.crt rui.key MonUser@IPdeMonServeurEsxi:/etc/vmware/ssl/
Si les fichiers ont été correctement copié au bon emplacement, la touche finale c’est de retourner sur le serveur ESXi en ssh
et de redemarrer les services hostd
et vpxa
/etc/init.d/hostd restart
/etc/init.d/vpxa restart
et tadaaaamm!!! des certificat wildcard tout propre sur mon host Esxi
Voilà, si tu es arrivé ici j’espère que ça t’a aidé!! N’hésite pas à me faire un retour si ça t’a servi ou s’il y a une correction à apporter.
En attendant je te dis à bientôt pour de nouvelles aventures!!