Certbot-DNS-Autorisierung mit mehreren API-Konten verwenden?

Certbot-DNS-Autorisierung mit mehreren API-Konten verwenden?

Ich verwende den EFF Certbot ACME-Client, um ein einzelnes TLS-Zertifikat auf meinem Webserver zu generieren, der mehrere Domänen mit Subject Alternative Names (SAN) hostet. Bis jetzt wurden alle Domänen in einem bestimmten Digital Ocean-Team gehostet, und ich habe Certbot mit dem Digital Ocean DNS-Plugin konfiguriert und ein persönliches Zugriffstoken für dieses Team erstellt, um ein Zertifikat mit mehreren Domänen (einschließlich Wildcard-Domänen) zu generieren.

Jetzt möchte ein Kunde, dass ich auch eine Domäne bediene, über die er die volle Kontrolle behalten möchte. Also haben wir ein neues Digital Ocean-Team erstellt und meinem Konto, auf dem der persönliche DO-Zugriffstoken erstellt wurde, wurde Zugriff gewährt. Leider habe ich auch herausgefunden, dass persönliche Zugriffstoken für ein Team erstellt werden und nicht mit einem anderen Team verwendet werden können.

Ich habe die Certbot-Dokumente durchgesehen, konnte jedoch nicht herausfinden, wie unterschiedliche DO-Anmeldeinformationen für unterschiedliche Domänen für dasselbe SAN-Zertifikat konfiguriert werden können. Ist das überhaupt möglich?

Wenn nicht, welche anderen Alternativen würden Sie zur Umsetzung dieses Anwendungsfalls vorschlagen?

Antwort1

Dies wird anscheinend von keinem integrierten Authentifizierungs-Plugin unterstützt, kann aber gelöst werden, indem ein „manueller Hook“ verwendet wird, um die Herausforderungen zu skripten und so für jede zu verifizierende Domäne die beste Methode zum Generieren des Verifizierungstokens auszuwählen.

Ich habe ein manuelles Hook-Skript geschrieben, das die Überprüfung von Domänen in mehreren Digital Ocean-Teams/-Benutzern unterstützt, vorausgesetzt, Sie haben für jeden ein persönliches Zugriffstoken.Das Skript ist hier verfügbar: https://gist.github.com/guss77/01f095623a1d2fd00869784554d3e1a5.

Um es zu verwenden, stellen Sie sicher, dass Sie das Digital Ocean CLI- doctlTool irgendwo installiert haben (und konfigurieren Sie es im Skript) und richten Sie auch Ihre persönlichen Zugriffstoken im Skript ein (das Skript benötigt außerdem digeinige gängige POSIX-Shell-Tools, die vermutlich überall zu finden sind, aber außerhalb von Linux möglicherweise nicht gut funktionieren).

Verwenden Sie dann anstelle eines der --dns*Plugins:

--preferred-challenges=dns --manual \
--manual-auth-hook /path/to/certbot-hook.sh \
--manual-cleanup-hook /path/to/certbot-hook.sh

Beim Authentifizierungsversuch ruft Certbot dieses Skript auf, um die DNS-Einträge für jede zu verifizierende Domäne zu erstellen. Dazu verwendet das Skript das doctlTool, nachdem es die Liste der mit jedem persönlichen Zugriffstoken verfügbaren Domänen gescannt und die richtige „Zone“ zum Erstellen des Eintrags ausgewählt hat.

Ich habe jedoch manchmal Probleme mit diesem Ansatz, insbesondere im Zusammenhang mit der DNS-Ausbreitungszeit – certbot unterstützt benutzerdefinierte Wartezeiten für die DNS-Ausbreitung für DNS-Plugins, jedoch nicht für den manuellen Modus, und es gibt keine gute Möglichkeit, dies anderweitig nachzuahmen.

Antwort2

Ich glaube, Sie können dies tun, indem Sie einfach unterschiedliche Konfigurationsdateien angeben.

Gemäß dercertbot-dns-digitaloceanPlugin-Dokumentationdie Anmeldeinformationen werden in einer INI-Datei bereitgestellt:

--dns-digitalocean-credentials INI-Datei mit DigitalOcean-Anmeldeinformationen. (Erforderlich)

Die INI-Datei enthält etwa Folgendes:

dns_digitalocean_token = 0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff

Wenn Sie für Ihre unterschiedlichen Anmeldeinformationen unterschiedliche Dateien erstellen würden, könnten Sie das Plug-In durch Angabe dieser unterschiedlichen Dateien dazu bringen, unterschiedliche Anmeldeinformationen zu verwenden.

D.h. so etwas wie

certbot certonly \
  --dns-digitalocean \
  --dns-digitalocean-credentials ~/.secrets/certbot/digitalocean-foo.ini \
  -d domain1.example

Und

certbot certonly \
  --dns-digitalocean \
  --dns-digitalocean-credentials ~/.secrets/certbot/digitalocean-bar.ini \
  -d domain2.example

würde die Anmeldeinformationen aus zwei separaten Dateien verwenden.

verwandte Informationen