Erneuern Sie Domains mit certbot und DNS-Challenge

9

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 renewalALLE Domänen im Verzeichnis:

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?

Merc
quelle

Antworten:

4

Aktualisierte Antwort (siehe Originalantwort unten)

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

Wie cdhowie und bobpaul in den Kommentaren angeben: certbot renewist ein nicht interaktiver Modus, bei dem Sie in Verbindung mit der DNS-Herausforderung ein Skript über den --manual-auth-hookParameter bereitstellen müssen . Das Skript muss in der Lage sein, einen TXTDatensatz zu erstellen . Sie können auch ein anderes Skript bereitstellen, um es anschließend über den --manual-cleanup-hookParameter zu bereinigen .

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 gute Option, da der certonlyBefehl die aktuellen Zertifikate / Konfigurationen nicht betrachtet und stattdessen die Domänennamen entweder über den -dParameter oder im interaktiven Modus angeben muss.


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

TL; DR: Ja, das sollte es.

Schauen wir uns die Dokumentation von certbot an :

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 certbotich 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, renewwirkt auf mehreren Zertifikaten und berücksichtigt immer , ob jeder in der Nähe Ablauf ist.

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


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

Was ist los mit dem Befehl, den Sie zu Beginn Ihres Beitrags gepostet haben? certbot -d example.com --manual --preferred-challenges dns certonlyerwirbt ein Zertifikat für example.com mithilfe der DNS-Herausforderung.

Die Schritte zum Erstellen eines Zertifikats sind:

  • Führen Sie den von certbotIhnen geposteten Befehl aus
  • Warten Sie, bis der Befehl einen DNS-TXT-Eintrag anzeigt
  • Erstellen Sie diesen TXT-Datensatz
  • Setzen Sie den certbotBefehl fort
  • Holen Sie sich ein Zertifikat für die angegebene Domain
  • Löschen Sie den TXT-Datensatz (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 .

malte
quelle
Fantastisch, werden Sie wissen lassen, ob es in ein paar Monaten funktioniert!
Merc
Ja, also im Allgemeinen nicht verwenden --manual. Der gesamte Zweck von --manualbesteht darin, den interaktiven Modus zu erzwingen. Sie können DNS-Plugins wie aws oder digitalocean jedoch certonlyohne diese --manualOption verwenden und sie werden automatisch vor 90 Tagen erneuert.
Bobpaul
Vielen Dank für die Eingabe, ich habe die Antwort aktualisiert.
Malte