AlternC, la suite logicielle de gestion de serveur qu’Octopuce aide à maintenir et utilise au quotidien, dispose depuis quelques temps d’une API (peu formalisée à ce jour) qui permet de piloter à distance diverses fonctions, comme la gestion des noms de domaines, des comptes FTP, des boites mails etc.
Avec l’arrivée de Letsencrypt, service permettant d’obtenir des certificats SSL/TLS de manière automatique, et surtout l’arrivée de la version 2 du protocole ACME associé, il est désormais possible d’obtenir des certificats SSL/TLS Wildcard (*.mondomaine.fr) facilement, avec une simple validation DNS.
Nous avons donc, pour faciliter la vie des administrateurs système, développé 2 scripts de « hook » pour Letsencrypt / Certbot, qui permettent de piloter le DNS d’AlternC et d’obtenir ainsi facilement un certificat wildcard à distance.
Etape 1 : obtention d’un token d’Api
Pour obtenir un token d’API pour votre compte AlternC, assurez-vous d’avoir le package alternc-api daté du 21/03/2019 ou après, soit la version 3.2.11 pour Wheezy ou 3.3.11 pour Jessie / Stretch. Une fois le package installé, vous pouvez demander un token en utilisant votre login / mot de passe ainsi :
https://votrepanel.alternc.org/api/auth/login?login=comptealternc&password=motdepasse&duration=3650
Cette url (en remplaçant le nom de domaine et le login/mot de passe par vos paramètres). Notez qu’il faut utiliser le compte AlternC sur lequel le domaine pour lequel vous souhaitez obtenir des certificats à distance est configuré. Ainsi vous obtenez un token d’API valable 10 ans. Notez le dans un coin, il ressemble à un truc comme « oWfv8QEgHf79xduKSVQyV85ztRkG1Gzv »
Une fois le token obtenu, il faut configurer certbot sur le serveur où vous souhaitez obtenir vos certificats.
Etape 2 : configuration de certbot sur le serveur distant
Sur le serveur où vous avez besoin d’obtenir des certificats, installez certbot et php-cli (en vous assurant que vous avez bien une version compatible avec ACME v2, typiquement Certbot 0.20 minimum). Ensuite, Installez (par exemple dans /usr/local/lib/ les 2 scripts suivants : certbot-auth.php & certbot-cleanup.php
ensuite, il faut configurer ces plugins de la manière suivante : dans /etc/letsencrypt/alternc-plugin.conf mettez un json comme suit :
{
"votredomaine.fr": {
"server": "https://votrepanel.alternc.org",
"token": "oWfv8QEgHf79xduKSVQyV85ztRkG1Gzv"
}
}
Le json doit préciser, pour chaque domaine pour lequel vous souhaitez obtenir un certificat (normal ou wildcard, y compris pour des sous-sous-domaines), l’adresse du serveur alternc, et le token d’API à utiliser.
Une fois ce fichier de configuration créé, vous pouvez obtenir un certificat avec une simple commande certbot comme suit :
certbot certonly
--server https://acme-v02.api.letsencrypt.org/directory
--manual --manual-public-ip-logging-ok --preferred-challenges=dns
--manual-auth-hook /usr/local/lib/certbot-auth.php
--manual-cleanup-hook /usr/local/lib/certbot-cleanup.php
-d *.votredomaine.fr
Cette commande demande à Certbot d’utiliser les hooks auth & cleanup qui appellent l’API de votre AlternC pour ajouter puis supprimer le sous-domaine acme-challenge requis pour prouver la propriété du nom de domaine (N’hésitez pas à ajouter « -d votredomaine.fr » sans le *. pour avoir un certificat AUSSI valable pour le domaine vide ;) )
Si vous avez des questions sur ce système, n’hésitez pas à nous contacter ;)