0

Let's Encrypt Unifi


Let's Encrypt est une Autorité de Certification gratuite et automatisée. Le client le plus utilisé est Certbot, un outil entièrement automatisé édité par l'EFF.

Unifi est une solution de WiFi d'entreprise que j'utilise chez moi. La solution fonctionne autour d'un contrôleur centralisé accessible par une interface web. Ce contrôleur est accessible en HTTPS, par défaut avec un certificat autosigné. Heureusement il est possible d'utiliser son propre certificat, et dans cet article je vais vous montrer comment utiliser les certificats de Let's Encrypt qui se renouvellent automatiquement.

Installation de Certbot

Pour installer Certbot, référez-vous à la documentation très complète sur le site de Certbot.

Mon installation est telle que le client certbot est situé en /root/certbot-auto. Vous devrez peut-être adapter les commandes s'il est installé différemment chez vous.

Les certificats Let's Encrypt ne sont valables que 90 jours. Pour les renouveller automatiquement, n'oubliez pas de créer une tâche cron :

# crontab -e
00 04 * * * /root/certbot-auto renew --quiet

Premier certificat

Dans tout cet article et ses scripts, on supposera que votre contrôleur Unifi est accessible à l'adresse http//unifi.example.com. Nous allons donc générer un certificat pour unifi.example.com qui doit pointer sur votre serveur.

Certbot détecte automatiquement la méthode la plus appropriée de signer le certificat avec la commande suivante :

./certbot-auto certonly --domain unifi.example.com

Suivez simplement les instructions du logiciel. Si vous n'avez pas de serveur web, utilisez l'option standalone.

Vous pouvez vérifier que les certificats ont été créés dans /etc/letsencrypt/live/unifi.example.com/

Script de déploiement automatique

Créez le script /root/certbot-renew-hook.sh :

# editor /root/certbot-renew-hook.sh
#!/bin/bash

# This script is run after a successful renewal

set -e

for domain in $RENEWED_DOMAINS; do
        case $domain in
        unifi.example.com)
            {
            unifi_root=/var/lib/unifi
            umask 077
            rm -f "$unifi_root/cert_and_key.p12" "$unifi_root/keystore"
            openssl pkcs12 -export -in "$RENEWED_LINEAGE/fullchain.pem" -inkey "$RENEWED_LINEAGE/privkey.pem" -out "$unifi_root/cert_and_key.p12" -name tomcat -CAfile "$RENEWED_LINEAGE/chain.pem" -caname root -password pass:aaa
            keytool -importkeystore -srcstorepass aaa -deststorepass aircontrolenterprise -destkeypass aircontrolenterprise -srckeystore "$unifi_root/cert_and_key.p12" -srcstoretype PKCS12 -alias tomcat -keystore "$unifi_root/keystore"
            keytool -import -trustcacerts -alias unifi -deststorepass aircontrolenterprise -file "$RENEWED_LINEAGE/fullchain.pem" -noprompt -keystore "$unifi_root/keystore"
            chown unifi:root "$unifi_root/keystore"
            service unifi restart
            } &> /dev/null
            ;;
        esac
done

Et n'oubliez pas de rendre ce script exécutable :

# chmod a+x /root/certbot-renew-hook.sh

Renouveller avec le script

Même si ce n'est pas recommandé de faire trop de requêtes auprès des services ACME de Let's Encrypt, le plus simple pour installer les certificats et vérifier que le renouvellement automatique fonctionnera comme prévu est tout de même de forcer le renouvellement.

Exécutez la commande suivante :

# ./certbot-auto renew --cert-name unifi.example.com --force-renewal --renew-hook /root/certbot-renew-hook.sh

S'il n'y a pas de message d'erreur, vous pouvez vous connecter à votre contrôleur Unifi et vérifier le certificat SSL ! Remarquez que le script renew-hook a été ajouté à la configuration de certbot (vous pouvez vérifier dans /etc/letsencrypt/renewal/unifi.example.com.conf), il n'est donc pas nécessaire d'adapter la commande cron.

Enjoy !

Disponible également en : English