Blog de Florent Appointaire

Blog sur les technologies Microsoft (Windows Server, System Center, Azure, Windows Azure Pack/Azure Stack, etc;)

[GitHub Enterprise] Renouveller le certificat rapidement avec Let's Encrypt

Le problème du Github Enterprise est que c'est une black box. C'est à dire, que vous ne pouvez rien modifier sur la VM, sinon l'application ne fonctionnera plus.

Du coup, si vous souhaitez utiliser un certificat signé publiquement, et ne pas payer (+/- 1500€ pour 2 ans avec tous les noms DNS à rajouter...), il reste la méthode Let's Encrypt. Seulement, le certificat est valable que 3 mois... et vous devez ajouter les enregistrements DNS de type TXT, à la main, sur votre hébergeur DNS. Pas très pratique, et pas très intéressant.

Après quelques recherches, je suis tombé sur le projet Dehydrated, qui permet d'automatiser la chose:

https://github.com/lukas2511/dehydrated

Ce tool vous permet de mettre à jour vos DNS sur votre hébergeur, de façon automatique, avec Let's Encrypt, et le protocole ACME-Server. J'ai trouvé une liste qui supporte plusieurs hébergeurs, et qui fonctionne avec ce projet:

https://github.com/lukas2511/dehydrated/wiki/Examples-for-DNS-01-hooks

Pour ma part, mon hébergeur est Azure, j'ai donc utilisé ce projet: https://github.com/jangins101/letsencrypt-azuredns-hook

Ce que je vais expliquer maintenant sera toujours pareil,pour n'importe quel hébergeur (il faudra juste adapter le nom). Utilisant Azure, je vais installer Azure CLI sur mon serveur Debian (étant donné que je ne peux rien installer sur mon serveur Github, j'utilise un serveur séparé), ainsi que le logiciel dehydrated, certbot (qui permet d'utiliser Let's Encrypt pour générer le certificat):

echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ wheezy main" | sudo tee /etc/apt/sources.list.d/azure-cli.list
curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-key adv --keyserver packages.microsoft.com --recv-keys 417A0893
sudo apt-get install apt-transport-https
sudo apt-get update && sudo apt-get install nodejs-legacy git dehydrated letsencrypt certbot jq
sudo apt-get install libssl1.0.0=1.0.1t-1+deb8u6 libssl-dev nodejs-dev node-gyp npm
sudo npm install -g azure-cli

Nous allons ensuite récupérer les sources de notre hébergeur (Azure pour moi):

sudo mkdir /var/scripts/letsencrypt
cd /var/scripts/letsencrypt
sudo git clone https://github.com/jangins101/letsencrypt-azuredns-hook.git

Si vous n'avez pas créé de SPN pour vous connecter à Azure, éditez le fichier createSPN.sh et créez ce dernier ou utilisez la version manuel

Une fois ceci terminé, éditez le fichier config.sh pour utiliser la CA de production, et non de staging et modifiez le chemin BASEDIR avec le chemin où sera stocké les certificats:

sudo vi /var/scripts/letsencrypt/letsencrypt-azuredns-hook/config.sh

Il faut maintenant modifier le fichier azure.hook.sh avec les informations que vous avez récupéré lors de la création du SPN (nom de votre Azure AD, le nom d'utilisateur SPN et le mot de passe, le groupe de resource où est stocker la zone DNS, le nom de la zone DNS et la TTL):

sudo vi /var/scripts/letsencrypt/letsencrypt-azuredns-hook/azure.hook.sh

Le script va se connecter et mettre à jour les DNS avec la valeur TXT qu'il aura récupéré de Let's Encrypt. J'ai ensuite fait un petit script, qui va faire la demande du certificat, et mettre à jour le certificat automatiquement, via l'API Github Enterprise. Vous devez adapter la valeur où se trouve le script, ainsi que le nom DNS de votre Github Enterprise. Le script est disponible ici:

https://github.com/Flodu31/Bash/blob/master/GithubRenewCert.sh

Pour l'exécuter, utilisez la commande suivante, et fournissez le mot de passe de l'administration du Github:

sudo bash /var/scripts/GithubRenewCert.sh

Comme vous le voyez, le script va tout faire de façon automatique et après quelques minutes, votre certificat sera à jour:

  

Si vous avez des questions, n'hésitez pas 

Facebook Like
Anonymous