letsencrypt dns-01 OVH – créer un certificat sans devoir ouvrir Jeedom sur internet

Ce petit tuto a pour but de vous expliquer comment créer un certificat letsencrypt via la méthode DNS.
Pour faire simple, nous allons créer une valeur spécifique (TXT value) dans le DNS OVH sur laquelle letsencrypt va se baser pour créer le certificat.


Le gros avantage de cette méthode, c’est que l’on ne doit jamais ouvrir la box, VM ou Pi sur internet de manière temporaire ou permanente.

Pre-requis: 
– avoir le DNS hébergé chez OVH. Je me suis personnellement créé un OVH pour 1€ HTVA la première année puis 3€ HTVA les années suivantes. C’est leur premier prix.
– Jeedom installé sur un debian 9 (certaines dépendances nécessaires sont déjà installées par Jeedom).

Je me suis moi-même basé sur ces différents tutos/sujets pour créer celui-ci:
http://www.g-rom.info/2017/06/creer-des … ns-de-ovh/
https://www.digitalocean.com/community/ … r-debian-8
https://jeedom.github.io/documentation/howto/fr_FR/letsencrypt.mise_en_place

Cette procédure a été testée sur une VM sous Proxmox. Cette VM est un debian 9.2 à jour à la date de ce post 

Ici, le but est de partager une méthode (p-e pas la meilleure) qui fonctionne.

toutes les commandes ont été faite en root.

Bon, fini avec la mise en bouche, parlont code maintenant.
Connectez vous en SSH sur votre seurveur et tapez les commandes suivantes:

on se place dans le dossier opt et on télécharge les fichiers nécessaires a la création du certificat et on installe les dépendances pour OVH

cd /opt
git clone https://github.com/letsencrypt/letsencrypt
git clone https://github.com/antoiner77/letsencrypt.sh-ovh
apt-get install python-pip
pip install ovh

Si vous avez une erreur avec la commande pip install ovh, essayez de mettre ces 2 commandes avant:

apt-get python-setuptools
apt-get python-wheel

Ces applications ne sont pas présentes sur certain OS (merci a Seki)

On rassemble tous les fichiers au même endroit (/opt/letsencrypt) et on donne les droits de s’exécuter au script.

cd letsencrypt.sh-ovh
mv * /opt/letsencrypt 
cd ..
rm -Rf letsencrypt.sh-ovh/
cd /opt/letsencrypt
chmod 700 manual-auth-hook.py
chmod 700 manual-cleanup-hook.py
mv ovh.conf.demo ovh.conf
chmod 700 ovh.conf


ensuite, aller sur https://eu.api.ovh.com/createToken/ sur votre PC
le but, maintenant est de créer les valeurs pour utiliser l’API de OVH

Account ID or email address: votre compte ovh
Password: son password
Script name: un petit nom pour votre script
Script description: et une petite description
Validity: Unlimited – permet d’utiliser le script sur une longue durée
Rights – les droits a donner au script:
GET on /domain
POST on /domain
PUT on /domain
DELETE on /domain
GET on /domain/*
POST on /domain/*
PUT on /domain/*
DELETE on /domain/*

une fois que c’est validé, vous récupérez 3 valeurs (a créer pour chaque site a securiser):

La partie sur le site de OVH est finie. On retourne sur le serveur Jeedom en SSH dans le dossier /opt/letsencrypt

nano ovh.conf

On renseigne les différentes clés (App Key, App Secret et Cons Key) et on sauve le fichier.

On active le SSL sur l’apache:

a2enmod ssl
a2ensite default-ssl.conf
systemctl restart apache2

Maintenant, on va lancer le processus de création du certificat dans le dossier /opt/letsencrypt. Remplacez le host jeedom.XXxxXxxX.ovh par le votre.
si vous n’avez que un seul Host a définir, il suffit de retirer le dernier -d jeedom-vm.XXxxXxxX.ovh

./certbot-auto certonly --preferred-challenges dns-01 --manual --manual-auth-hook ./manual-auth-hook.py --manual-cleanup-hook ./manual-cleanup-hook.py -d jeedom.XXxxXxxX.ovh -d jeedom-vm.XXxxXxxX.ovh

A la première fois, il vous sera demandé de fournir votre adresse mail, Si vous acceptez les « règles »(Agree), si vous voulez partager votre adresse mail (No) et si vous autorisez que votre ip soit loguée (Yes).

A la fin, vous devez recevoir un Congratulations!.

En cas de problème, par défaut, les logs de cette installation se trouvent ici: /var/log/letsencrypt/letsencrypt.log


On va maintenant lier ce certificat a apache

nano /etc/apache2/sites-enabled/default-ssl.conf

On ajoute le champ

ServerName jeedom.XXxxXxxX.ovh:443

on modifie les champs SSLCertificateFile et SSLCertificateKeyFile avec les nouveaux fichiers.

SSLCertificateFile	/etc/letsencrypt/live/jeedom.XXxxXxxX.ovh/fullchain.pem
SSLCertificateKeyFile	/etc/letsencrypt/live/jeedom.XXxxXxxX.ovh/privkey.pem

et on redémarre

systemctl restart apache2

Etape suivante, automatisez la chose. J’ai pas encore eu l’occasion de valider cette partie. je l’ai reprise d’un des sites sources.

crontab -e

Le serveur demande avec quel programme, vous voulez ouvrir le fichier.

Le contenu:

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

ajouter la ligne:

42 6 * * * /opt/letsencrypt/certbot-auto renew --no-self-upgrade --post-hook "systemctl restart apache2"

si le nouveau certificat n’a pas été pris en compte, faites un petit redémarrage du service apache

systemctl restart apache2

Je vous met en plus la méthode manuelle a faire dans le dossier /opt/letsencrypt:

cd /opt/letsencrypt
./certbot-auto renew --no-self-upgrade
systemctl restart apache2

Et voila, votre jeedom devrait avoir un beau certificat valable pour 3 mois et renouvelé automatiquement.
De plus, ce que j’ai fait, chez moi. J’ai mis en place un petit serveur DNS avec ma zone XXxxXxxX.ovh et ajouté jeedom.XXxxXxxX.ovh dedans avec mon IP locale. Je ferais un petit tuto expliquant comment faire.

Bonne lecture

18 comments

  1. jerome Reply

    Salut merci pour ton tuto, je vais me faire ça cette semaine 🙂

    Je reviens vers toi pour te dire si tout est OK

  2. Jérôme Reply

    Bonjour,

    lGET on /domain
    POST on /domain
    PUT on /domain
    DELETE on /domain
    GET on /domain/*
    POST on /domain/*
    PUT on /domain/*
    DELETE on /domain/*

    Ne fonctionne pas en l’état il faut élever les espaces ? mais pour le coup si je fais aucune redirection de port 443 ca fonctionne pas.

    avec la redirection le certificat est a actif, mais la n’est pas le but, j’aimerais que ça marche sans redirection de port

    pourriez vous m’aider ?

    MERCI

    • Hervé Fouquet Post authorReply

      j’ai remis les images, cela devrait t’aider 🙂

  3. Jérôme Reply

    Bonjour, merci pour la photo ça confirme le non fonctionnement de la création 🙂

    mais je n’ai toujours pas accès a mon jeedom sans ouvrir le port 443 sur son IP

    J’ai modifié ovh.conf pour noté l’api recrée, généré un nouveau certificat

    redémarre apache

    une idée ?

    MERCI

    • Hervé Fouquet Post authorReply

      Bonjour,
      Si je comprends bien, le certificat est créé ?
      Tu bloqué a quelle étape ?

  4. Jérôme Reply

    J’ai une erreur :
    mv: impossible d’évaluer ‘ovh.conf.demo’: Aucun fichier ou dossier de ce type

    ca peut etre ca ?

  5. Jérôme Reply

    Je suis sous PROXMOX en VM, j’ai remis un Snapshop propre et recommencer la procédure depuis le début, même résultat sans port ouvert aucun accès, avec redirection de port ça fonctionne.

    Je sèche un peu

  6. Jérôme Reply

    J’ai chercher 2 bonnes heures, et je trouve rien d’anormal, en ouvrant le port 443 impeccable certificat valable.

    en fermant le 443 je ne joins pas ma box.

    Dommage niveau sécurité cette version du SSL est vraiment top

    Si tu trouve le temps de me filler un coup de main via Messanger / Mail ca serait cool

    Merci en tout cas

  7. Jérôme Reply

    Dommage que cette méthode n’attire pas plus de monde, elle serait bien plus sécurise que d’ouvrir le port 443 a son jeedom.

    si quelqu’un passe par la, j’aimerais bien la mettre en place.

    Merci

  8. Jérôme Reply

    Je pense avoir trouvé mon erreur je restais sur un DNS A vers mon IP

    dans le debut du TUTO tu note : (TXT value) dans le DNS OVH

    j’ai supprimer mon sous domaine et recrée un sous domaine du même nom jeedom.xxxmondomainexx.ovh avec le DNS TXT, en valeur que dois je mettre ? mon domaine ?

    j’ai crée 5 certificats je dois attendre 5 jours 🙂 pour la réponse merci

  9. Hervé Fouquet Post authorReply

    Je cherche à comprendre où est ton problème, tu viens avec plein d’erreurs différentes. Ce tuto permet de donner accès a l’API du dns de OVH. Il écrit automatiquement une entrée txt pour valider le certificat. On lié le certificat a apache. Mais il faudra toujours ouvrir le port si tu veux avoir accès de l’extérieur. Perso. J’ai limité les IP de mon boulot a pouvoir avoir accès. D’où ce tuto

  10. Jérôme Reply

    Bonjour,

    Merci pour la réponse,

    Quand tu note :
    que l’on ne doit jamais ouvrir la box, VM ou Pi sur internet de manière temporaire ou permanente.

    Quel intérêt de lier l api et de faire tout cette procédure pour au final ouvrir le port de l extérieur ?

    C est d avoir du https en interne ?

    Au vu du descriptif pour moi tu lie l api et grâce à lui il retrouve ton jeedom.

    C est pour ca que ca ne fonctionne pas Mdr. Si je dois ouvrir le port 443 de l extérieur ca fonctionne, mais j ai le même résultat qu un tuto basic pour installer le SSL

    • Hervé Fouquet Post authorReply

      Comme je l’ai mis sur le forum, oui cela bloqué l’accès mais après, tien qu’à toi de n’ouvrir que pour certaines IP comme telegram par exemple.

      Un autre avantage, si tu n’utilises pas le port standard, cela permet de générer un certificat quand même.

  11. Jérôme Reply

    Merci pour ces info

    Connexion depuis smart Phone avec 4g donc l ip change 😏

  12. Jérôme Reply

    Je viens de changer de sous domaine pour recrée un certificat.
    Si je crée pas de DNS associé le certificat ne passe pas a CONGRATULATION !
    Je crée donc un DND TXT nomé : domotique.mondomaine.ovh
    Si je ne met pas de valeur, je ne peut pas enregistrer la DNS, donc elle ne peut pas etre remplis seul par la création du certificat.

    Je suis toujours au même endroit.

    Soit je suis une brelle, soit il manque un bout sur le tuto, le début est vraiment pas clair.

    C’est pas une critique bien au contraire, les tuto present sur la toile fonctionne parfaitement et c’est clair du début a la fin.

    Ici la fin est très clair, mais le début est a se poser des questions ?

    en attendant merci d’avoir pris le temps de me répondre.

  13. Jerome Reply

    Je t embête h.fouquet, c est surtout la partie création du sous domaine si tu peut regarder.

    J ai une il fixe

    Si je met vers A monip

    Ou TXT et quelle valeur ? Puisque sans valeur je ne peut pas créé la DNS.

    Mais au final cette méthode sert à créé un certificat sans ouvrir les ports.

    La méthode standard faut les ouvrir.

    Donc ça doit fonctionner puisque si je redirige ma jeedom vers 443 et DNS OVH A xxx.xxx.xxx.xxx ( mon ip fixe ) ca fonctionne.

    Moi je croyais que ça allait fonctionner comme la dns jeedom sans ouvrir de port depuis l extérieur.

    Au final à quoi sert l api ? Juste pour la créations ?

    Merci

Leave a Reply to Jérôme Cancel reply

Your email address will not be published. Required fields are marked *