Lua-resty-auto-ssl: Certificats génériques

CrĂ©Ă© le 10 oct. 2017  Â·  16Commentaires  Â·  Source: auto-ssl/lua-resty-auto-ssl

Salut,
Vous vous demandez simplement combien de temps il faudra pour mettre à jour l'émission de jokers en janvier ? Vous pensez que c'est un grand changement ?

enhancement

Commentaire le plus utile

D'aprÚs ce que je comprends du code, ce n'est pas possible. Nous pourrions facilement ajouter les vérifications suivantes dans l'interface de stockage, pour chaque sub.domain.tld :

  • sub.domain.tld:latest — courant
  • *.domain.tld:latest
  • *.sub.domain.tld:latest

De cette façon, nous pourrions faire un premier pas vers les caractÚres génériques, ne prenant en charge que les certificats générés précédemment pour l'instant. AprÚs cela, nous pourrions passer à autre chose et décider d'une maniÚre agréable de prendre en charge la génération de certificats génériques, si nous décidons de le faire.

Edit : Je serais heureux de gratter une implémentation de ce qui précÚde.

Tous les 16 commentaires

Je ne suis pas responsable du dépÎt mais je dois dire que ce n'est pas quelque chose de facile à ajouter. Les certificats génériques LE nécessiteront une validation DNS, et actuellement lua-resty-auto-ssl utilise la validation http.

La validation DNS serait bien d'avoir, mĂȘme sans tenir compte des caractĂšres gĂ©nĂ©riques. Quelques rĂ©flexions :

  • nous devons d'abord attendre dĂ©shydratĂ© pour obtenir le support ACMEv2 : dĂ©shydratĂ© # 420
  • dehydrated prend dĂ©jĂ  en charge le challenge (ACMEv1) dns-01 . Le dĂ©fi dns-01 dans le brouillon ACMEv2 actuel me semble identique ou presque identique.
  • le crochet deploy_challenge de dĂ©shydratĂ© fournit un domaine et un jeton Ă  Ă©crire dans un enregistrement TXT.
  • puisque nous ne savons pas comment les utilisateurs gĂšrent leurs enregistrements DNS, cette partie doit ĂȘtre gĂ©nĂ©rique.

    1. prend en charge les API DNS populaires. Nous devrions au moins ajouter une infrastructure pour supporter les API "standard" comme celle fournie par PowerDNS, CloudFlare ou mĂȘme nsupdate. Dans ce cas, seule une sorte de jeton d'authentification est nĂ©cessaire dans nos paramĂštres.

    2. Les utilisateurs incontournables auront besoin d'une solution personnalisĂ©e pour dĂ©finir ces enregistrements, comme parler Ă  une API propriĂ©taire ou mĂȘme appeler des scripts shell sales. Nous devrions fournir un crochet gĂ©nĂ©rique pour ces cas :

      -- Define a function to store the validation tokens for DNS verification -- by let's encrypt in your DNS setup. auto_ssl:set("deploy_dns_challenge", function(domain, token) -- talk to your DNS-API to create a new TXT record _acme-challenge.$domain with value $token end)

  • la couche de stockage suppose actuellement qu'elle peut utiliser le domaine complet comme clĂ© pour obtenir le certificat. Cela ne sera plus vrai. Ma premiĂšre idĂ©e est de stocker les caractĂšres gĂ©nĂ©riques sous la forme parentdomain.com:wildcard:latest et de faire en sorte que la couche de stockage vĂ©rifie cette clĂ© si un certificat concret n'est pas trouvĂ©.

Des questions:

  1. comment savoir s'il faut générer un certificat normal ou générique ? une nouvelle fonction définie par l'utilisateur is_wildcard_domain ? Une nouvelle valeur de retour pour le allow_domain ?
  2. prenons-nous en charge la validation DNS (pour les caractĂšres gĂ©nĂ©riques) et HTTP (pour les certificats normaux) en mĂȘme temps, ou uniquement DNS pour les deux ? Notez que HTTP peut ĂȘtre beaucoup plus rapide, puisque nous contrĂŽlons toutes les piĂšces mobiles.

Pour votre information : un point de terminaison de staging ACMEv2 est désormais disponible. :)

Le défi dns-01 dans le brouillon ACMEv2 actuel me semble identique ou presque identique.

Vous avez raison :-) Rien n'a changé dans le challenge DNS-01 entre les API V1 et V2.

Pour votre information : au moins la version de dĂ©veloppement de Dehydrated prend dĂ©sormais en charge ACMEv2 ainsi que les certificats gĂ©nĂ©riques. Au cas oĂč quelqu'un voudrait commencer Ă  travailler dessus, c'est maintenant votre chance ;)

Je pense que resty-auto-ssl faisant la validation DNS est complÚtement hors de portée.
Cependant, il devrait nous ĂȘtre possible de faire en sorte que resty-auto-ssl se replie sur un certificat gĂ©nĂ©rique configurĂ© "hors bande".
Par exemple, je vais configurer mon service en utilisant bind9 et certbot pour créer un certificat générique pour un domaine. Pour le moment, je ne pense pas pouvoir dire à resty-auto-ssl d'utiliser ce certificat générique au lieu d'essayer d'en générer un.

EDIT: eh bien, ce n'est pas si hors de portĂ©e. Je ne savais pas que dĂ©shydratĂ© pouvait ĂȘtre configurĂ© avec des scripts manuels pour se connecter Ă  une API DNS personnalisĂ©e...

Existe-t-il un moyen de stocker un certificat LE générique généré manuellement dans Redis afin que resty-auto-ssl puisse l'utiliser ?

D'aprÚs ce que je comprends du code, ce n'est pas possible. Nous pourrions facilement ajouter les vérifications suivantes dans l'interface de stockage, pour chaque sub.domain.tld :

  • sub.domain.tld:latest — courant
  • *.domain.tld:latest
  • *.sub.domain.tld:latest

De cette façon, nous pourrions faire un premier pas vers les caractÚres génériques, ne prenant en charge que les certificats générés précédemment pour l'instant. AprÚs cela, nous pourrions passer à autre chose et décider d'une maniÚre agréable de prendre en charge la génération de certificats génériques, si nous décidons de le faire.

Edit : Je serais heureux de gratter une implémentation de ce qui précÚde.

@akalipetis avez-vous essayé de voir si le réglage

ssl_options.fullchain_der
ssl_options.privkey_der

fonctionnerait dans allow_domain ?
Si c'est possible, vous pouvez faire une requĂȘte redis dans allow_domain et les dĂ©finir.

Pour mémoire, je viens de rencontrer ce problÚme, j'utilise lua-resty-auto-ssl pour générer des certificats pour les pages d'état de domaine personnalisées sur mon service de surveillance et la plupart des gens utiliseraient mes propres domaines comme xxxx.status.updown.io pour lesquels c'est beaucoup plus efficace pour utiliser un certificat générique.

J'y suis parvenu en utilisant le lambda allow_domain pour ignorer la génération de certificats pour *status.updown.io :

auto_ssl:set("allow_domain", function(domain)
  return not ngx.re.match(domain, "status.updown.io$", "ijo")
end)

Et ensuite fourni le caractÚre générique comme certificat de secours par défaut :

ssl_certificate /etc/letsencrypt/live/status.updown.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.updown.io/privkey.pem;

J'ai généré le certificat manuellement en utilisant le défi DNS avec :

sudo certbot certonly --manual -d *.status.updown.io --agree-tos --no-bootstrap --manual-public-ip-logging-ok

Je ne suis pas sûr que cela vaille la peine de passer mon temps à automatiser cela car cela semble compliqué avec le défi DNS. C'est low tech mais ça marche comme prévu :)

C'est une bonne solution de contournement, et qui s'applique Ă  de nombreux cas d'utilisation.
Cependant, sachez que le défi DNS a été rendu trÚs facile avec https://github.com/AnalogJ/lexicon !
Il fonctionne bien et prend en charge de nombreux fournisseurs. J'en ai mĂȘme ajoutĂ© un et le processus est ridiculement facile.

@kapouer merci pour le conseil sur lexicon , je le garderai Ă  l'esprit si je veux automatiser ;)

Pour mémoire, je viens de rencontrer ce problÚme, j'utilise lua-resty-auto-ssl pour générer des certificats pour les pages d'état de domaine personnalisées sur mon service de surveillance et la plupart des gens utiliseraient mes propres domaines comme xxxx.status.updown.io pour lesquels c'est beaucoup plus efficace pour utiliser un certificat générique.

J'y suis parvenu en utilisant le lambda allow_domain pour ignorer la génération de certificats pour *status.updown.io :

auto_ssl:set("allow_domain", function(domain)
  return not ngx.re.match(domain, "status.updown.io$", "ijo")
end)

Et ensuite fourni le caractÚre générique comme certificat de secours par défaut :

ssl_certificate /etc/letsencrypt/live/status.updown.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.updown.io/privkey.pem;

J'ai généré le certificat manuellement en utilisant le défi DNS avec :

sudo certbot certonly --manual -d *.status.updown.io --agree-tos --no-bootstrap --manual-public-ip-logging-ok

Je ne suis pas sûr que cela vaille la peine de passer mon temps à automatiser cela car cela semble compliqué avec le défi DNS. C'est low tech mais ça marche comme prévu :)

Je fais Ă©galement le mĂȘme type de vĂ©rification de domaine pour notre application. Si l'hĂŽte du portail de l'utilisateur contient l'un de nos "propres" domaines, nous revenons simplement Ă  l'utilisation de certificats gĂ©nĂ©riques d'une autoritĂ© de certification statique. Mais j'aime votre idĂ©e de toujours utiliser LE et de gĂ©nĂ©rer les caractĂšres gĂ©nĂ©riques manuellement.

Je vais tester ça.

Mettre Ă  jour
D'accord, c'est la solution qui fait vraiment ce que je veux. Le plug-in cloudflare. Les docs sont plutĂŽt bien. Je l'ai fait fonctionner en une heure ou deux.

https://certbot-dns-cloudflare.readthedocs.io/en/stable/

@jarthod une autre solution de contournement pour automatiser cela ? Se souvenir de renouveler le joker tous les 3 mois est en fait pénible.

@jarthod une autre solution de contournement pour automatiser cela ? Se souvenir de renouveler le joker tous les 3 mois est en fait pénible.

Pas de mon cÎté, je l'utilise toujours et je renouvelle le manuel tous les 3 mois. La mémorisation n'est pas un problÚme pour moi car j'utilise mon service (updown.io) pour surveiller le point de terminaison et il m'alerte lorsque le certificat est sur le point d'expirer.

Je suis également utilisateur de votre service. Quoi qu'il en soit, je suis allé de l'avant et j'ai obtenu le SSL générique traditionnel d'un an.

Maintenant votre service a du boulot pour me rappeler l'annĂ©e prochaine 😄

Le 03-oct-2020, Ă  22h30, Adrien Rey-Jarthon [email protected] a Ă©crit :

En tant que
@jarthod une autre solution de contournement pour automatiser cela ? Se souvenir de renouveler le joker tous les 3 mois est en fait pénible.

Pas de mon cÎté, je l'utilise toujours et je renouvelle le manuel tous les 3 mois. La mémorisation n'est pas un problÚme pour moi car j'utilise mon service (updown.io) pour surveiller le point de terminaison et il m'alerte lorsque le certificat est sur le point d'expirer.

—
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, consultez-le sur GitHub ou désabonnez-vous.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

ronaldgetz picture ronaldgetz  Â·  10Commentaires

ronaldgrn picture ronaldgrn  Â·  8Commentaires

kshnurov picture kshnurov  Â·  3Commentaires

prionkor picture prionkor  Â·  11Commentaires

arya6000 picture arya6000  Â·  11Commentaires