Bonjour à tous,
Je propose de plus en plus de services à bases de Docker et Traefik sur notre réseau local. Mon prochain service est un gestionnaire de mots de passes et tous (à juste titre) réclame un certificat tls. Jusque là rien d'anomale.
J'ai juste une galère car pour mettre en place letsencrypt avec traefik il faut que les hôtes soient accessible depuis internet. Chose pas possible dans mon cas.
Est-ce qu'il y a un moyen de contourner le problème ?
Merci d'avance.
# utiliser une machine qui a acces à internet
Posté par NeoX . Évalué à 5.
generer un certificat letsencrypt ne requiert pas que la machine utilisatrice finale soit exposée sur internet
juste que le domaine soit connu d'internet et que la machine correspondante au domaine le soit aussi.
évidemment si tu gères uniquement en interne, je te dirais que letsencrypt n'est pas LA solution, mais que par contre tu peux gérer des certificats internes à ton organisation, ton asso, ta société.
[^] # Re: utiliser une machine qui a acces à internet
Posté par Philippe M (site web personnel) . Évalué à 2.
Comme c'est un domaine interne il n'est pas connu de l'extérieur et n'a pas vocation à l'être.
Il faut que j'achète un certificat à un organisme ? Je n'y connais pas grand chose sur le sujet :(
Born to Kill EndUser !
[^] # Re: utiliser une machine qui a acces à internet
Posté par NeoX . Évalué à 5.
si c'est purement interne, non, pas besoin d'acheter un certificat à un organisme, tu peux creer ta propre autorité.
il te faudra alors installer d'abord cette autorité sur toutes les machines qui auront acces à tes services.
puis avec cette autorité, tu signes des certificats que tu as génèrés pour chacun de tes services/domaines…
et tu utilises ce certificat signé dans ton service de mot de passe, site web, email, etc
l'intérêt d'acheter une signature à un organisme tiers, c'est justement pour :
- ne pas avoir à passer sur toutes les machines qui vont se connecter à ton service pour installer ton autorité
- rassurer le chaland car c'est un organisme tiers qui a signé
NOTE : tu dois pouvoir générer une autorité intermédiaire, signée elle par un tiers officiel, puis signer tes certificats "internes" par cette autorité intermédiaire.
tu résoudrais alors le double probleme
- avoir une autorité externe qui a validé le certificat
- gérer tous les certificats suivant et leur signature par toi meme.
[^] # Re: utiliser une machine qui a acces à internet
Posté par benja . Évalué à 2.
Peut-être qu'il ne faut pas aller aussi loin que mettre en place une pki, un self-signed devrait suffire. Et si c'est pour faire du self-signed, autant demander à Traefik itself :P
Cf. https://doc.traefik.io/traefik/https/tls/ «If no default certificate is provided, Traefik generates and uses a self-signed certificate.»
N'ayant aucune expérience avec traefik, je ne suis pas en mesure de vous aider plus loin…
[^] # Re: utiliser une machine qui a acces à internet
Posté par benja . Évalué à 1.
PS: Pour info, c'est quoi le gestionnaire de mdp utilisé ?
[^] # Re: utiliser une machine qui a acces à internet
Posté par Philippe M (site web personnel) . Évalué à 3.
Pour le moment j'ai testé passbolt et vaultwarden qui un fork de Bitwarden.
Born to Kill EndUser !
[^] # Re: utiliser une machine qui a acces à internet
Posté par NeoX . Évalué à 3.
les certificats auto-signés, ca génère des erreurs dans les navigateurs à la premiere connexion, il faut alors ajouter une exception pour que le navigateur ne râle plus.
en entreprise, c'est plutot moyen quand meme.
[^] # Re: utiliser une machine qui a acces à internet
Posté par Philippe M (site web personnel) . Évalué à 3.
Surtout quand tu as expliqué aux utilisateurs qu'un site qui affiche ce message n'est pas sécurisé et qu'il ne faut pas y aller…
Born to Kill EndUser !
[^] # Re: utiliser une machine qui a acces à internet
Posté par Philippe M (site web personnel) . Évalué à 2.
Je suis le coup du DNS challenge moyennant une petite modification de mon côté sans impact pour mon DNS : https://www.grottedubarbu.fr/traefik-dns-challenge-ovh/
Born to Kill EndUser !
[^] # Re: utiliser une machine qui a acces à internet
Posté par benja . Évalué à 2.
Ah ben ça a l'air parfait ça :) Ça n'était pas clair que tu utilisais un domaine publique pour ton réseau interne (je connais des entreprises qui utilisent un ".local"…). Sinon je te l'aurais recommandé directement car j'utilise aussi le dns challenge pour mes services, c'est vraiment le top.
PS: Merci pour les noms, la réimplemenation de bitwarden en rust est un truc que je dois tester aussi (je l'ai déjà vu mentionné ici). Je peux recommander le client CLI "rbw", aussi en rust, qui a l'énorme avantage d'être super rapide (le client officiel utilise nodejs, ça prend un peu de temps à démarrer…) et d'avoir un agent.
[^] # Re: utiliser une machine qui a acces à internet
Posté par Philippe M (site web personnel) . Évalué à 2.
En fait non j'ai un domaine public en .fr et un domaine local. Sur mon DNS local j'ai une zone pour ma zone local.
Pour le cas traefik et let's encrypt j'ai créé une zone pour mon domaine public qui contient les NS d'OVH (le domaine est hébergé par OVH).
Dans le fichier zone il y a quelques CNAME et ensuite un
De cette manière les utilisateurs de mon réseau local accède à un service docker par l'url : service.dompublic.fr*.dompublic.fr. A IP_SERVER_DOCKER
Ils sont redirigés vers traefik et le service correspond grâce au label Host('service.dompublic.fr'). Jusque là tout est ok, sauf que je n'arrive pas à faire en sorte que traefik créé le certificat lorsque je passe en https. Pourtant j'ai ajouté l'enregistrement TXT acme-challenge, j'ai créé les clés d'accès à l'API ovh pour que traefik communique directement (j'ai testé ces même codes en php est cela me créé bien les enregistrements dans le dns d'ovh).
Dans les logs de traefik j'ai
Et bien sûr rien côté dns ovh.
/etc/traefik/traefik2.yml
docker-compose.yml de traefik
docker-compose.yml de vaultwarden
Si tu as une idée de la provenance du problème je suis preneur.
Born to Kill EndUser !
[^] # Re: utiliser une machine qui a acces à internet
Posté par benja . Évalué à 2.
J'ai regardé s'il y avait moyen d'ajouter du debug à lego/ovh, je n'ai rien vu. Idem pour la lib go-ovh, pas de bol que les logs ne soient pas hyper instructifs…
Vu qu'il y a exactement 10 minutes entre la fin du délais et la fin du check, ça ressemble à un time-out. Ça n'est pas clair si lego essaye de terminer la commande même si la vérification ne passe pas. À la vue de ton log, je dirais qu'il n'essaye même pas de terminer la commande. Essaye d'utiliser lego directement ( https://go-acme.github.io/lego/usage/cli/ ) , essaye aussi d'augmenter ton delais avant d'entamer la période de check. Qui sait? Pour être sûr, continue à lire ;)
Essaye de mesurer le temps de réplication DNS toi même. Fais un changement avec ton code php ou la web-if (pour etre sûr), ensuite tu check combien de temps ça met (dig @ns _acme-challenge.xxx.xx txt). Vérifie bien tous les différents NS, commence par essayer de trouver le master ovh, puis les réplicas ovh (=> teste tous les NS de la SOA), ensuite localement dans ton docker! Dis-toi bien que LE va utiliser les NS de ta zone (in fine), mais il ne va peut-être pas utilisé le "master" à jour. En d'autres mots, il se peut que la vérif locale fonctionne (tu as du bol, ton résolveur tombe sur le réplica à jour) mais que LE n'y arrive pas. Inversément, il se peut que ça ne fonctionne pas chez toi (genre un dns docker ou dans ton lan qui cache trop longtemps? -> pense aussi à réduire le ttl) alors que le record est bel et bien publié, ce qui fait que lego n'essaye pas de terminer la commande.
Idées: regarde s'il y a un réglage pour désactiver la vérification de lego, et base toi sûr le délais uniquement (pas top qd même), regarde si tu peux forcer le dns que lego utilise pour la vérification et utilise un dns public style google, voir ceux ovh directement.
Perso, j'utilise uacme avec de la glue custom (btw, je ne comprends pas pourquoi lego n'a juste pas un provider "shell" où tu peux scripter ce que tu veux… c'est tellement plus facile à débugger. Il faut croire que go is the new shell :'(). Aussi, vu que les secondaires de ma zone durent très très longtemps à se synchroniser, j'utilise des cname sur le _acme-challenge qui pointent dans une autre zone qui n'a qu'un seul NS que je controle directement avec ma glue. Tu peux essayer ça aussi, avec un cname qui pointe vers une zone contrôlé par un autre provider dns, genre un qui a l'air de mieux fonctionner avec traefik/lego. Éventuellement, regarde les différents github des providers legos, ça en dit surement quelque chose sur la qualité du truc (genre essaye de trouver un provider qui logge ce qu'il fait… genre pas ovh quoi :p ca coûtera tjrs moins cher qu'un certificat commercial) :D
[^] # Re: utiliser une machine qui a acces à internet
Posté par benja . Évalué à 2. Dernière modification le 14 octobre 2021 à 02:41.
PS: avoir un zone dédiée aux challenges LE permet aussi d'éviter un désastre si ton application key venait à fuiter (ou lego de déconner).
[^] # Re: utiliser une machine qui a acces à internet
Posté par benja . Évalué à 1. Dernière modification le 14 octobre 2021 à 03:25.
visiblement il faut aussi mettre LEGO_EXPERIMENTAL_CNAME_SUPPORT=true https://github.com/go-acme/lego/blob/83c626d9a1889fa499bc9c97bc2fdea965307002/docs/content/dns/_index.md#experimental-features
[^] # Re: utiliser une machine qui a acces à internet
Posté par Philippe M (site web personnel) . Évalué à 2.
Salut, ce matin un petit test et cette phrase m'a traversé l'esprit : "Mais qu'elle est cette magie !?" Car ce matin sans rien de plus cela marche sans problème.
Le certificat est bien reconnu par firefox et plus d'erreur dans les logs de traefik.
En tout cas merci pour ton aide.
Born to Kill EndUser !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.