Certificat Let’s Encrypt dans Home Assistant challenge DNS avec OVH.
Le : 30 août 2024
Afin d'utiliser certaines fonctionnalités de Home Assistant, il est indispensable d’acquérir un certificat SSL. La solution utilisée est le challenge DNS. Aucun port n'a besoin d’être ouvert. Dans ce tuto, nous n'utiliserons pas le port 80 car il peut ne pas être disponible (déjà redirigé vers une autre machine ou partagé avec plusieurs box). Pour information, ne pas confondre IP statique/dynamique et partage d'IP.
Si vous pouvez ouvrir et rediriger le port 80 vers votre Home Assistant, je ne vous conseil pas d'utiliser ce tuto. Une autre solution plus simple (challenge http) est recommandée.
Je suis partie d'une nouvel installation de Home Assistant mais peu importe.
Création des autorisations de l'API d'OVH:
Documentation : https://certbot-dns-ovh.readthedocs.io/en/stable/
Vous avez besoin maintenant que les serveurs de Let’s Encrypt valident votre autorité à contrôler votre domaine détenu chez OVH. Grace à ces autorisations, add-on va créer un enregistrement TXT dans les DNS du domaine, puis vérifier cet enregistrement pour enfin créer votre certificat. Cet enregistrement TXT sera dans les 2 minutes enlevé de vos enregistrements de votre zone DNS. Il est important de comprendre, que vous donnez un accès vers votre compte OVH. En conséquence, le jeton créé ci-après doit être gardé dans un lieux sécurisé.
Ajouter comme suit (pour ajouter une nouvelle ligne, cliquez sur '+')
- Sélectionner GET et ajouter: /domain/zone/*
- Sélectionner PUT et ajouter: /domain/zone/*
- Sélectionner POST et ajouter: /domain/zone/*
- Sélectionner DELETE et ajouter: /domain/zone/*
Si votre compte OVH gère plusieurs domaines, je vous conseille de limité l'autorisation au domaine concerné. Remplacer /domain/zone/* par /domain/zone/<REQUIRED_DOMAIN>/* et ajouter un "GET /domain/zone/"
Conserver application_key, application_secret et votre consumer_key.
Installation de Let’s Encrypt:
    - Dans Paramètre, Modules complémentaires, ajouter le module Let’s Encrypt en cliquant sur "Boutique des modules complémentaires" et chercher l'add-on Let's Encrypt (j'avais la version 5.1.3). Cliquer sur INSTALLER. Ne pas démarrer Let’s Encrypt.
    - Dans l'onglet Configuration de Let's Encrypt, entrer votre nom de domaine (ou vos noms de domaine), votre email et enfin, cliquez sur DNS (Challange DNS).
    - Sous DNS entrez les accès de votre apli OVH:
provider: dns-ovh
ovh_endpoint: ovh-eu
ovh_application_key: votre_key_sauvegardé_plus_haut
ovh_application_secret: votre_secret_sauvegardé
ovh_consumer_key: votre_consumer_key_sauvegardé
    Uniquement maintenant, vous pouvez démarrer Let’s Encrypt. Sous l'onglet Info, cliquer sur DÉMARRER. Il n'est pas nécessaire de cocher : "Lancer au démarrage". Cela est inutile et économisera de la ressource.
Configurer Home Assistant pour utiliser les certificats:
Chercher votre certificat dans Home Assistant (J'utilise l'add-on File editor qui est léger et simple). Le certificat est composé de deux fichiers, le certificat et sa clef. Dans la configuration de Let's Encrypt, j'avais laissé par défaut les champs Private key File et Certificate File. Je trouve donc sous le répertoire /SSL les deux fichiers privkey.pem et fullchain.pem. Si vous ne voyez pas le répertoire SSL à la racine du disque, vérifier que votre add-on File editor ait l'autorisation de visualiser le disque en entier (décocher Enforce Basepath dans la configuration de File editor).
Modifier le fichier configuration.yaml
    - Sous le répertoire /homeassistant dans configuration.yaml, renseigner le chemin de votre certificat. Attention faite le que si les deux fichiers de votre certificat sont bien présents (privkey.pem et fullchain.pem).
Le fichier "configuration.yaml" par défaut :
# Loads default set of integrations. Do not remove.
default_config:
# Load frontend themes from the themes folder
frontend:
themes: !include_dir_merge_named themes
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
Modifier comme cela :
# Loads default set of integrations. Do not remove.
default_config:
http:
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem
# Load frontend themes from the themes folder
frontend:
themes: !include_dir_merge_named themes
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
    Enregistrer, puis sous Outils de développement, vérifier la configuration et redémarrer le système.
vous ne pouvez plus utiliser l’ancienne adresse en http://votre-domaine.com:8123.
Utiliser maintenant HTTPS https://votre-domaine.com:8123. Votre port, n'a pas changé.
Reconnectez vous avec la nouvelle URL: https://votre-domaine.com:8123
Renouvellement du certificat dans ce TUTO