it-swarm.com.de

Erneuern Sie Domains mithilfe von Certbot und DNS-Challenge

Ich habe mehrere SSL-Zertifikate für mehrere Domänen mithilfe der Standalone-Methode erstellt. Ich interessiere mich nur für die Zertifikate ohne Serverintegration.

Sie sind jetzt zur Erneuerung. Also rannte ich:

certbot -d example.com --manual --preferred-challenges dns certonly

Befolgen Sie die Anweisungen für jede Domain (fügen Sie den erforderlichen DNS-Eintrag für jede Domain hinzu). Auf diese Weise musste ich den Server nicht stoppen und bekam meine neuen Zertifikate.

Mein (vages) Verständnis von allem ist, dass es derzeit keine Möglichkeit gibt, Zertifikate mithilfe der DNS-Herausforderung automatisch zu erneuern. Oder können Sie Zertifikate für die "manuelle" Methode nicht automatisch erneuern?

Jedenfalls habe ich dieses Skript geschrieben:

#!/bin/bash

for i in renewal/*;do
  n=${i:8:-5};
  echo $n;
  # echo "\n" | certbot --text --agree-tos -d $n --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly;
done

Zu diesem Zeitpunkt haben ALLE Domänen im Verzeichnis renewal:

authentifikator = manuell

Und:

pref_challs = dns-01

Fragen:

  • Wenn ich "certbot erneuern" ausführe, werden dann alle automatisch erneuert, ohne mein Skript zu verwenden?

  • Wie erstelle ich tatsächlich ein neues Zertifikat mit der DNS-Herausforderung?

9
Merc

Aktualisierte Antwort (siehe Originalantwort unten)

In meiner ursprünglichen Antwort habe ich mich darauf konzentriert, dass das von Ihnen bereitgestellte Skript bei Verwendung des Befehls renew nicht erforderlich ist. Ich habe jedoch nicht sichergestellt, dass der Befehl renew in diesem Szenario tatsächlich anwendbar ist.

Als cdhowie und bobpaul in den Kommentaren heißt es: certbot renew ist ein nicht interaktiver Modus, bei dem Sie in Verbindung mit der DNS-Herausforderung ein Skript über --manual-auth-hook Parameter. Das Skript muss in der Lage sein, einen TXT -Datensatz festzulegen. Sie können auch ein anderes Skript bereitstellen, um es anschließend über --manual-cleanup-hook Parameter.

Wenn Sie diese Parameter angeben, wird der gesamte Prozess automatisch ohne Interaktion ausgeführt.

Wenn Sie diese Parameter nicht angeben, schlägt certbot fehl:

/opt/certbot # certbot renew --force-renewal
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/foobar.w9f.de.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',)

Wenn Sie Ihre Zertifikate über den manuellen Modus erneuern möchten, müssen Sie die Befehle, mit denen Sie die Zertifikate erworben haben, erneut ausführen. In diesem Fall ist Ihr Skript eine nette Option, da der Befehl certonly die aktuellen Zertifikate/Konfigurationen nicht betrachtet und stattdessen die Domänennamen entweder über -d Parameter oder im interaktiven Modus.


wenn ich "certbot erneuern" ausführe, werden alle automatisch erneuert, ohne mein Skript zu verwenden?

TL; DR: Ja, das sollte es.

Werfen wir einen Blick auf die Dokumentation von certbot :

Ab Version 0.10.0 unterstützt Certbot eine Erneuerungsaktion, um alle installierten Zertifikate auf bevorstehenden Ablauf zu überprüfen und zu versuchen, sie zu erneuern. Die einfachste Form ist einfach

certbot erneuern

So weit, ist es gut.

Dieser Befehl versucht, zuvor erhaltene Zertifikate zu erneuern, die in weniger als 30 Tagen ablaufen.

Dies sollte Ihre Frage beantworten. Achtung: Ich weiß nicht, wie gut certbot mit Situationen umgehen kann, in denen Sie die Zertifikate in verschiedene Verzeichnisse verschieben.

Später im selben Absatz:

Für den Erneuerungsversuch werden dieselben Plugins und Optionen verwendet, die zum Zeitpunkt der ursprünglichen Ausstellung des Zertifikats verwendet wurden, sofern Sie keine anderen Plugins oder Optionen angeben. Im Gegensatz zu certonly wirkt renew auf mehrere Zertifikate und berücksichtigt immer, ob jedes Zertifikat fast abgelaufen ist.

Also ja; certbot sollte alle Ihre Zertifikate ohne die Hilfe Ihres Skripts erneuern.


Wie erstelle ich tatsächlich ein neues Zertifikat mit der DNS-Herausforderung?

Was ist falsch an dem Befehl, den Sie zu Beginn Ihres Beitrags gepostet haben? certbot -d example.com --manual --preferred-challenges dns certonly erwirbt mithilfe der DNS-Challenge ein Zertifikat für example.com.

Die Schritte zum Erstellen eines Zertifikats sind:

  • Führen Sie den von Ihnen geposteten Befehl certbot aus
  • Warten Sie, bis der Befehl einen DNS TXT-Eintrag) anzeigt
  • Erstellen Sie diesen TXT Datensatz)
  • Setzen Sie den Befehl certbot fort
  • Holen Sie sich ein Zertifikat für die angegebene Domain
  • Löschen Sie den Datensatz TXT (da Sie ihn nur für die Erstellung und einen neuen für die Erneuerung benötigen).

Wenn Sie diesen vollständigen Prozess automatisieren möchten, sollten Sie sich ein Tool wie lego ansehen, das einige DNS-Anbieter unterstützt.

4
malte