Certificat Let's Encrypt - installation et renouvellement pour votre nom de domaine

Alors voilà, j’avais le renouvellement de mon Certificat Let’s Encrypt à faire et j’ai galéré un maximum hier après midi pour le faire car je ne retrouvais rien de complet et simple.

C’est pour ça que je me permet de vous proposer ce Tuto dans lequel j’ai ajouté le renouvellement automatique.
A noter : pour le renouvellement, je ne saurais que dans 60 jours si ça fonctionne vraiment bien (mais je ne vois pas pourquoi ça ne fonctionnerait pas)

Celui-ci existe peut-être déjà, mais moi, je ne suis pas tombé dessus, alors voici mon Tuto :

Let’s Encrypt installation et renouvellement pour votre nom de domaine

[Installation]
1 - Avoir un nom de domaine ou de sous domaine pointant vers l’ip extérieur de votre connexion internet.
(NB : ne pas être sur un partage d’adresse IP, c’est mieux je pense)

2 - Installer le module complémentaire Let’s Encrypt

3 - Paramétrer Let’s Encrypt
Dans l’onglet configure renseigner :

  • le nom de domaine (MonNomDomaine.fr) ou sous domaine (HomeAssistant.MonNomDomaine.fr)
  • une adresse mail où vous recevrez les alertes en cas d’expiration de votre certificat
  • Le nom du fichier clé de certificat (privkey.pem : pourquoi le changer ?)
  • Le nom du fichier certificat (fullchain.pem : pourquoi le changer ?)
  • la challenge: cocher http (dns serait probablement pour un domaine que vous ne géré pas vous même - exemple : domaine Freebox Os)
    (à ce moment là cliquer sur le bouton Enregistrer de la partie « Options » si ça fait quelque chose, c’est pas grave)
  • Dans la partie réseau, laisser 80 (c’est la partie que le n’aime pas, mais je n’ai pas trouvé comment changer çà pour que ça fonctionne)
    (Si besoin cliquer sur le bouton Enregistrer de la partie « Réseau »)

4 - Rerouter les ports 8123 et 80 vers votre machine Home Assistant (çà dépend de votre fournisseur d’accès internet)
(un redémarrage de votre box internet est peut-être nécessaire)
(NB : je souhaitais ne pas rerouter le port 80, mais à chaque fois que j’ai tenté, ceci bloquait le transfert des fichiers .pem et donc bloquait la création du certificat)

5 - démarrer le module complémentaire Let’s Encrypt

6 - Vérifier la création du certificat en allant sur l’onglet journal et en cliquant régulièrement sur « Actualiser »
(En lisant les lignes vous devriez voir que votre certificat est créé)
(Ceci veut dire que les fichiers privkey.pem et fullchain.pem sont bien présents dans le répertoire /ssl)

7 - Paramétrer Home Assistant en ajoutant les lignes suivantes dans le fichier configuration.yaml

http:
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem

De plus si vous souhaitez vous protéger des intrusions, vous pouvez paramétrer le bannissement d’adresses avec ces lignes :
ip_ban_enabled: true
login_attempts_threshold: 10

Parfois, on vous parle des lignes suivantes :
homeassistant:
external_url: https://HomeAssistant.MonNomDomaine.fr:8123
internal_url: http://homeassistant.local:8123
Mais, je n’ai toujours pas compris à quoi ça servait donc pour moi, il ne faut pas les mettre,
surtout que ceci bloque les paramètres dans HAOS : Paramètres > Système > Général

8 - Redémarrer Home Assistant

9 - Vérifier dans votre explorateur préféré votre nouvelle adresse : https://HomeAssistant.MonNomDomaine.fr:8123
(En fonction de votre navigateur, une fois connecté, vérifier la date de fin de certification de votre adresse)

[Renouvellement]

1 - Installer l’intégration « Expiration du certificat » pour récupérer la date d’expiration du certificat
En allant sur la page Certificate Expiry - Home Assistant

2 - Cliquer sur le bouton bleu « Add intégration to » pour installer l’intégration dans Home Assistant
(renseigner votre adresse HomeAssistant.MonNomDomaine.fr et le port 8123)

3 - Installer le blueprint « Renew Let’s Encrypt Certificate » pour paramétrer le renouvellement,
En allant sur la page Blueprint for automatic renewal of a Let's Encrypt certificate - Blueprints Exchange - Home Assistant Community

4 - Cliquer sur le bouton bleu « Import Blueprint » et continuer à valider les différents écrans

5 - Dans Paramètres > Automatisations et scènes puis onglet Blueprint,
cliquer sur la ligne « Renew Let’s Encrypt Certificate » et renseigner les informations :
Entité : (c’est là que vous allez récupérer les informations de l’intégration « Expiration du certificat » en cliquant sur la flèche vers le bas)
Certificate renewal date : nombre de jours avant la date d’expiration où sera fait le renouvellement
Certificate check time : l’heure à laquelle sera effectuée le renouvellement (attention si vous envoyez un message sur votre smartphone prévoir une heure à laquelle ça ne vous dérangera pas et aussi que le redémarrage de home assistant à cette heure ne vous embête pas)
Restart Home Assistant : laisser cocher (un redémarrage me semble nécessaire, mais attention )
Minutes untile restart : laisser à 5 (je n’en connais pas vraiment l’utilité mais autant laisser la valeur)
Send notification : à cocher si vous souhaitez avoir un sms sur votre téléphone mobile (comme ça ne se produira que tous les 2 ou 3 mois, ça semble intéressant d’être alerté pour au moins les premières fois aller vérifier que le renouvellement s’est bien passé, il faut aussi que ça fonctionne pour votre mobile)
Device to notify : votre téléphone mobile
Notification title : un titre
Notification message : le message que vous souhaitez recevoir

Puis cliquer sur enregistrer et donnez un titre à l’automatisation exemple : « Renouvellement HomeAssistant.MonNomDomaine.fr »

6 - Vérifier que c’est bien en place en allant dans Paramètres > Automatisations et Scènes puis onglet Automatisations
Dans la liste, vous retrouverez l’automatisation portant le titre que vous avez donné à votre Blueprint « Renew Let’s Encrypt Certificate »


[center]## System Information

version core-2024.2.2
installation_type Home Assistant Supervised
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.1
os_name Linux
os_version 5.4.180
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.33.0
Stage running
Available Repositories 1389
Downloaded Repositories 9
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Debian GNU/Linux 11 (bullseye)
update_channel stable
supervisor_version supervisor-2024.01.1
agent_version 1.4.1
docker_version 20.10.22
disk_total 14.3 GB
disk_used 5.5 GB
healthy true
supported true
supervisor_api ok
version_api ok
installed_addons File editor (5.8.0), FTP (5.0.1), Samba share (12.3.0), Terminal & SSH (9.9.0), Let’s Encrypt (5.0.15), SQLite Web (4.1.2)
Dashboards
dashboards 3
resources 4
views 33
mode storage
Recorder
oldest_recorder_run 8 février 2024 à 10:00
current_recorder_run 18 février 2024 à 14:32
estimated_db_size 542.23 MiB
database_engine sqlite
database_version 3.44.2
[/center]
3 « J'aime »

Salut ,

Pour ma part , j 'utilise un certif wildcard avec un reverse proxy sous synology .

si ca peut aider :

Minos

Merci pour le tuto
Je l’ai mis en place car j’avais un problème de certificat depuis un moment plus d’accès sur mon appli android et uniquement en http

Il est fait pour ça. Merci de me l’avoir dit, ça me fait plaisir de savoir que c’est utile. Petite question : Peux-tu me dire si c’était facile à suivre ?

Salut

Dans l’ensemble, le tutoriel est bien. Mais tu devrais revoir le format de certains paragraphes.
Tu devrais te documenter sur les passages que tu ne maitrises pas.

Voici quelques corrections que tu peux faire:

Non, au contraire avec Freebox Os, tu ne peux utiliser QUE le challenge http.

Tu ne peux pas changer le port 80. C’est dans la docmentation :


Il est possible d’utiliser le challenge DNS, si le fournisseur du nom de domaine le supporte.
Alors, tu n’as pas besoin d’ouvrir le port 80.

Il faut ouvrir le port 80 seulement lors de la génération du certificat. Mais en automatisant la génération, il doit toujours rester ouvert.

Tu devrais indenter correctement ces parties en utilisant du texte préformaté.

Tu peux supprimer ta configuration, et recatégoriser dans Tutoriel.

1 « J'aime »

super tuto, je me demandais comment automatiser le renew… 5min top chrono ça fait du bien quand tu viens de passer 24h à faire fonctionner alexa :smiley:

1 « J'aime »

Salut,
j’ai créer un sensor expiration de certificat ( a installer dans intégration ) et j’ai fais c’est automatisation.
21 jours avant la fin du certificat le dimanche a 3h00, ca relancera let’s encrypt pour le renouveller.

alias: Certificat SSL Renouvellement
description: Démarrage de let's encrypt
trigger:
  - platform: time
    at: "03:00:00"
condition:
  - condition: time
    weekday:
      - sun
  - condition: template
    value_template: >-
      {{ (states('sensor.dyndns_xxxxxx_fr_expiration_du_certificat') |
      as_datetime or now()) - timedelta(days=21) < now()}}
action:
  - service: hassio.addon_start
    metadata: {}
    data:
      addon: core_letsencrypt
mode: single

Edit:
je passe par le DNS Challenge, pas besoin du port 80.

2 « J'aime »

A noter : pour le renouvellement automatique, il faut laisser la redirection sur le port 80, ce qui ne me satisfait pas. Je n’ai donc pas dit mon dernier mot.
Avant de finaliser le tuto, je vais essayer de trouver une méthode. C’est peut être impossible, mais je cherche.
Si tu as bien mis ton tel et ton adresse mail tu devrais être alerté si par hasard tu l’as supprimé avant et dans ce cas tu auras juste à réactiver la redirection et ça devrait fonctionner.

Pourrais tu détaillé ton système de dns svp ? Mon port 80 est malheureusement occupé par une appli pro

J’ai un NDD chez OVH et j’ai configurer comme expliquer dans la doc.

Merci WarC0zes, de mon côté, j’étudierai ce que tu as indiqué pour compléter au maximum le tuto

1 « J'aime »

Vu mon niveau je peux te dire que c’est facile a suivre
merci

1 « J'aime »

Bonjour,

Pour ceux qui utilise freeboxos en nom de domain avez vous un retour pour Certificate expiry ?

Bonjour,
J’utilise freeboxos avant la manip de ce sujet, j’ai pu au départ accéder sans souci au nom de domaine. Après quelques mois j’ai eu certificat expiré je pouvais par l’intermédiaire de navigateur accéder à home assistant mais plus accès avec l’application android. Le tuto de ce sujet à réglé mon problème

Bonsoir,

Vois tu une date d’expiration de ton certificat avec certificate expiry?

Bonjour,

Merci OncBen pour ton tuto simple à mettre en place.
J’ai mis en place le Blueprint conformément au tuto mais j’ai une question concernant Let’s Encrypt.
Habituellement, une fois mon certificat renouvelé manuellement, j’arrêtais l’adon Let’s Encrypt.
Pour que l’automatisation fonctionne doit-on laisser Let’s Encrypt actif ou l’on peut le fermer aussi ?

Bonjour, sauf erreur, l’adon Let’s Encrypt devrait s’arrêter de lui-même (chez moi, il est inactif), il ne démarre qu’au redémarrage de Home assistant puis s’arrête. On laisse donc comme ça. Ceci dit c’est une bonne question car l’adon Let’s Encrypt doit être coché actif « Lancer au démarrage » (je crois que c’est par défaut).

Salut,
moi j’ai désactiver lancer au démarrage, j’en vois pas l’intérêt.
J’ai fais une automatisation, qui lancera l’addon si besoin de renouveller le certificat.

Salut à tous.

Moi c’est ce point qui me dérange dans ta méthode. Je ne me suis pas embêté à mettre du https pour laisser le port 80 ouvert…

Comme beaucoup ci dessus, j’ai donc un sensor pour le renouvellement du certificat.

Je l’utilise dans mon dashboard pour indiquer la durée restante de validité du certificat et pour des notifications qui arrivent sur mon tel tous les jours les 15 derniers jours avant qu’il périme…

Ca me laisse donc 15j pour me poser 5 min et faire:

  • redirection du port 80 vers HA
  • lancer lets encripts
  • vérifier que les certificats sont renouvelés
  • arrêter la redirection du port 80

=> 5 min à tout casser, mais il faut être à la maison pour la partie redirection de port.

Bref tous les 3 mois je me dit qu’il faut que je trouve une solution… et 5min après je me dit que je le regarderai dans 3 mois… :rofl:

  • Si quelqu’un trouve comment automatiser la redirection de port de la freebox dans HA (ouverture puis fermeture du port 80), je passe dans la minute sur une solution automatique…

  • Autre solution, passer par un nom de domaine différent (comme @WarC0zes qui a un ndd OVH) pour utiliser la mise à jour dns qui ne nécessite pas d’ouverture de port

A noter que la solution lets_encript laisse toujours ouvert le port https (en général le 443) qui reste le point faible de ce type d’accès. Si on veut sécuriser mieux, il faut changer de type d’acces distant:

  • passer par un VPN comme wireguard/cloudflare etc. comme beaucoup le préconisent sur le forum. Personnellement je me tâte… Mais on ne peut plus accéder sur n’importe quelle machine/telephone, il faut le VPN installé.

  • passer par NabuCasa, certes payant, mais semble techniquement la meilleure solution, la moins prise de tête, qui gére bien les assistant vocaux, et qui supporte financièrement HA…

Oui. par contre la mise à jour du sensor n’est pas immédiate (1 fois par jour je crois). typiquement quand je renouvelle il ne me met jamais la nouvelle date, il faut attendre le lendemain.

On peut voir la carte" validité https" en vert sur ma vue home assistant, avec le nombre de jour restant:

bonjour et merci pour ta contribution. je me suis inspiré du code sur ce fil pour créer un sensor de validité de mon certificat avec le code suivant:

- sensor:
    - name: "validité HTTPS"
    #   unit_of_measurement: "jj"
      state_class: measurement
      unique_id: jour_https
      state: >-
        {{ (states('sensor.xxxxxx_freeboxos_fr_8123_expiration_du_certificat') | as_datetime or now()) - timedelta(days=21) < now()}}

PB: je souhaite donc afficher le nombre de jour restant. le sensor crée affiche « false ». j’ai donc mis en commentaire la rubrique « unit of measurement » car je pense qu’elle est fausse (je ne sais pas afficher les jours…" cependant j’obtiens toujours le m^me résultat.
une idée sur ce qui ne va pas?? merci