Provisionnement de certificats TLS via Let's Encrypt sur NAS Synology

Validation DNS-01 face aux contraintes réseau

Lorsque les infrastructures domiciliares ou les FAI filtrent le trafic entrant sur les ports standards (TCP/80 et TCP/443 passifs), la méthode HTTP-01 échoue systématiquement. Le challenge DNS-01 s'impose alors comme la seule approche viable : il requiert uniquement la publication transitoire d'une entrée TXT sous le nom de domaine, confirmant la maîtrise du résolveur sans exposer aucun service applicatif.

Préparation de l'infrastructure DNS

Un hébergeur compatibles avec les API REST est indispensable pour automatiser la manipulation des records. Cloudflare fournit un environnement stable et une documentation précise. Après transfert des NS vers leurs plateformes, générez un jeton d'API via le tableau de bord utilisateur. Appliquez le modèle « Edit Zone DNS » en mode lecture-écriture et restreignez son périmètre à la zone cible afin de limiter la surface d'attaque potentielle.

Synchronisation de l'adresse IP dynamique

Les cnonexions résidentielles attribuées en DHCP nécessitent une mise à jour récursive de l'interface WAN. Sur le système DSM, accédez au Gestionnaire de paquets et déployez un client léger de mise à jour DNS (comme ddns-updater ou un binaire compilé équivalent). Configurez les champs suivants :

  • Founrisseur : Cloudflare
  • Jeton d'identification : le secret API généré précédemment
  • Hôte virtuel : le sous-domaine concerné par le chiffrement
  • A type : IPv4 (A) ou IPv6 (AAAA) selon votre allocation

Exécutez un test manuel pour valider la résolution, puis configurez le lancement au démarrage du NAS. Cela garantit qu'une rotation d'adresse IP ne break pas le parcours SSL ultérieur.

Déploiement automatisé avec Acme.sh

Le cycle de vie des certifications doit être orchestré depuis un hôte Linux isolé (VM, VPS ou conteneur Docker). L'utilitaire acme.sh propose une syntaxe Bash native supportant les plugins DNS sans dépendances Python complexes :

curl https://get.acme.sh | sh -s -- selfupdate
export PATH="$HOME/.acme.sh:$PATH"

Rédigez un script de provisionnement. Cette version encapsule la mappage des credentials, oriente le client vers l'autorité officielle et injecte les variables d'environnement demandées par le moteur ACME :

#!/usr/bin/env bash
set -euo pipefail

# Mappage sécurisé des secrets vers les clés reconnues par le plugin
export CF_Token="${MY_CF_DNS_API_KEY}"
export CF_Zone_Id="${MY_CF_ZONE_IDENTIFIER}"

# Définition du serveur CA par défaut
acme.sh --set-default-ca --server letsencrypt.org

# Émission du certificat avec auto-injection du record TXT
acme.sh --issue \
  --dns dns_cf \
  --domain "${DESIRED_HOSTNAME}" \
  --force \
  --key-file /var/run/certs/server.key \
  --cert-file /var/run/certs/server.crt \
  --ca-file /var/run/certs/ca.bundle \
  --fullchain-file /var/run/certs/fullchain.pem

Rendez l'exécutable actif et planifiez une tâche cron régulière pour anticiper l'expiration à 90 jours :

0 3 1 */2 * root /opt/scripts/gen_tls_cert.sh >/dev/null 2>&1

Injection dans le contrôleur DSM

Ouvrez le centre de configuration du NAS, naviguez vers Sécurité et Certificats. Choisissez « Ajouter », validez « Importer des fichiers existants » et pointe vers les répertoires produits par le script. Associez le profil fraîchement créé au certificat par défaut et appliquez-le aux modules Web Station, SSHS et Proxy inverse. Le routageHTTPS pourra alors établir des sessions mutualisées TLS 1.3 sans blocage navigateurl.

Étiquettes: letsencrypt acme-sh dns-01-validation cloudflare-api synology-dsm

Publié le 18 septembre à 11h35