Qnap [Tuto] Renouveler automatiquement son certificat Let's Encrypt

Mikiya

Chevalier Jedi
25 Octobre 2016
440
0
0
Salut à tous
Depuis peu, QNAP accepte de base l'utilisation des certificats Let's Encrypt. Pour ceux qui connaissent pas, en gros c'est ce qui permet d'avoir du HTTPS, et sans avoir un gros message d'erreur comme avec le certificat par défaut, lui est "officiel".
Pour le demander, je vais pas m'attarder, c'est simple, ça se passe dans Panneau de contrôle=>Système=>Sécurité=>Clé privée et certificat, bouton "Remplacer le certificat", puis "Obtenir un certificat par Let's Encrypt". On doit simplement fournir un nom à enregistrer (le nom du DDNS en général, celui de la barre d'adresse en haut genre "chezmoi.ddns.net"), son mail, et c'est parti. A noter qu'il faut bien que le port 80 soit ouvert vers le NAS.
Tout ça c'est top mais le certificat est valide 3 mois ... c'est court, et QNAP n'a pas (encore ?) introduit le renouvellement auto :(
Suite à un petit soucis je me suis donc mis à chercher comment le faire quand même, d’où ce petit tuto :D

Prérequis :
- Avoir bien configuré un certificat avec l'outil QNAP comme indiqué plus haut
- Avoir accès en SSH

L'outil QNAP pour ça se trouve dans /mnt/ext/opt/QcloudSSLCertificate/bin.
Donc il faut juste l'appeler comme il faut.
Pour ma part j'ai ce script :

Code:
#!/bin/sh
cd /mnt/ext/opt/QcloudSSLCertificate/bin
rm ../log/*
/bin/sh generate_letsencrypt_csr.sh 1 "ADRESSE" "MAIL" "http"

if [ -f "../log/acme_error_code" ]; then
        echo "Error in renew process"
        exit 1
fi

cat ../cert/key ../cert/cert > ../cert/stunnel

/etc/init.d/stunnel.sh stop

cp ../cert/stunnel /etc/stunnel/stunnel.pem
cp ../cert/intermediate.pem /etc/stunnel/uca.pem

/etc/init.d/stunnel.sh start
/etc/init.d/Qthttpd.sh restart

# Optionnel, pour garder une copie complète utilisable par d'autres services tels que Caddy
cat ../cert/cert ../cert/intermediate.pem > /share/homes/admin/domain.full.cert.pem
cp ../cert/key /share/homes/admin/domain.key

Si on le lance un coup, on devrait avoir un peu d'attente puis voir deux gros pavés de texte, c'est que c'est bon :cool:

En écrivant ça dans un petit fichier, on peut ensuite automatiser.

Admettons que le code plus haut soit enregistrer dans /share/homes/admin/renew_auto_certif.sh (par exemple), et que ce fichier soit exécutable avec
Code:
chmod 750 /share/homes/admin/renew_auto_certif.sh

Le but est d'appeler avec CRON le script comme vous l'avez fait au début avec les 2 gros pavés de textes automatiquement tout les 1er du mois à 1h.

On pourrait l'ajouter manuellement au cron sauf ... que à la première mise à jour firmware le cron est remis à plat ...

Donc dernier point, il faut lancer ce script au démarrage pour reprogrammer si nécessaire le cron :

Code:
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local/bin

#Wait for boot 
sleep 300

crontab -l|grep -q "renew_auto_certif"

if [ $? -ne 0 ]
then
        echo "Add renew cron entry"
        echo "0 1 1 * * /share/homes/admin/renew_auto_certif.sh" >> /etc/config/crontab
        crontab /etc/config/crontab && /etc/init.d/crond.sh restart
fi

Admettons que le code plus haut soit enregistrer dans /share/homes/admin/watchcron.sh (par exemple), et que ce fichier soit exécutable avec
Code:
chmod 750 /share/homes/admin/watchcron.sh

Il faut appeler "/share/homes/admin/watchcron.sh" au démarrage du système, avec la technique du autorun (https://techlightup.blogspot.fr/2013/08/qnap-automatically-run-script-at-startup.html) ou avec BashIT (https://www.forum-nas.fr/viewtopic.php?f=21&t=2020&p=16572&hilit=autorun#p16572)
 
Voila update avec quelques commandes manquantes avec stunnel et l'ajout du cron fait automatiquement au boot si nécessaire (surtout après update).
Testé et validé pour ma part :)
 
Dans l'application myQNAPcloud, tu peux activer le renouvellement automatique ! :geek:



Je l'ai testé depuis la beta de QTS en 4.3 et tout fonctionne correctement, le certificat s'est renouvelé tout seul au bout de 3 mois.

@+
 
Oui mais quand tu es en direct avec un DDNS configuré sur une adresse et que tu veux pas passer par le myqnapcloud de QNAP (j'aime pas trop le concept, ça simplifie mais t'as moins la main) tu peux pas, l'outil de certificat dans les paramètres n'a pas d'options sur le renouvellement :?
 
Mikiya a dit:
Oui mais quand tu es en direct avec un DDNS configuré sur une adresse et que tu veux pas passer par le myqnapcloud de QNAP (j'aime pas trop le concept, ça simplifie mais t'as moins la main) tu peux pas, l'outil de certificat dans les paramètres n'a pas d'options sur le renouvellement :?

Ok je comprends mieux ! C'est vrai que je ne me suis pas pris la tête, le DDNS de myqnapcloud répondant à mon besoin...
 
Je rencontre un problème avec le script lorsque je tente d'exécuter ./renew_auto_certif.sh

J'obtiens :

-sh: ./renew_auto_certif.sh: /bin/sh^M: bad interpreter: No such file or directory

J'ai pourtant fais un copier coller de ton fichier et j'ai bien vérifier qu'il n'y à pas de caractère bizarre dedans :)
 
Si t'es sur que il n'y a pas de copié foireux, essaye de faire un coup de dos2unix du fichier au cas ou.
PS : j'ai rajouté une copie du fichier clé aussi rajoutes la ligne de fin si tu veux t'en servir pour caddy.
 
Tosh a dit:
-sh: ./renew_auto_certif.sh: /bin/sh^M: bad interpreter: No such file or directory

^M est un problème de copier coller de windows au format UNIX donc effectivement un dos2unix devrai résoudre le problème.
 
Salut à tous
et merci pour le tuto ça m'ade beaucoup !!!
Question un peu bête mais je vois pas comment faire si admettons je tape https://domain.ltd:8081 là j'ai mon certificat maintenant si je tape https://domain.ltd:8855 j'ai plus de certificats il y a une solution pour ça ?
merci d'avance
 
Serait-il possible de faire en sorte dans le script d'ouvrir le port 80 du firewall juste avant, puis de le fermer juste apres ? Ça éviterait une opération manuelle, après je ne sais pas du tout si c'est faisable par contre