2016-07-11 9 views
1

Ich versuche, neue Zertifikate für meine Domains zu erhalten, die für Web- und E-Mail-Dienste verwendet werden.Ist es möglich, ein Zertifikat für Apache- und E-Mail-Dienste zu erneuern, ohne sie neu zu starten?

Dazu benutze ich Certbot, das als Client-seitiges Programm verwendet wird, um eine Verbindung zu LetsEncrypt herzustellen, das Zertifikate erstellt.

Jedes Tutorial, das ich gesehen habe, identifiziert keine Methode, um Zertifikate zu erneuern, ohne Web (wie Apache) oder E-Mail-Dienste neu zu starten.

Weiß jemand, wie man das macht?

Antwort

2

Die certbot Dokumentation beschreibt ein Verfahren zur Herstellung eines Zertifikats ohne den Webserver neu starten zu müssen, das Webroot-Plugin: https://certbot.eff.org/docs/using.html#webroot

Um es zusammenzufassen, Sie in ein paar zusätzliche Argumente an die certbot Befehl für Ihre Erneuerung übergeben müssen : certonly, --webroot und --webroot-path oder -w. So ist der volle Befehl würde wie folgt aussehen:

certbot renew certonly --webroot -w /var/www/example/ -d www.example.com 

Nach der Dokumentation:

Die Webroot-Plugin funktioniert, indem eine temporäre Datei für jede Ihrer angeforderten Domains in $ Erstellen von {Webroot-path} /.well-known/acme-challenge. Dann überprüft der Validierungsserver Let's Encrypt HTTP-Anforderungen, um zu überprüfen, ob der DNS für jede angeforderte Domäne auf dem Server ausgeführt wird, auf dem certBot ausgeführt wird.

Dies ermöglicht Lassen Sie uns Encrypt die Domain-Bestätigung, ohne zu stoppen Apache auf Port 80, 443, usw.

+0

Nach einiger Zeit bekomme ich diese Antwort. Aber jetzt bekomme ich einige Probleme: Ich will meine Webseiten nicht über HTTP. Und Webroot muss die Herausforderung über HTTP durchführen. Kennen Sie eine alternative Möglichkeit, die Herausforderung mithilfe von HTTPS auszuführen, ohne Apache zu stoppen oder neu zu starten? –

+0

@HugoFonseca Wenn ich Ihre Frage richtig verstehe, sollte es möglich sein, nur HTTP-Verbindungen zu den temporären Dateien in $ {webroot-path} /. Well-known/acme-challenge zuzulassen, während HTTPS für den Rest Ihrer Site weiterhin benötigt wird . Ich kann mir einige Möglichkeiten vorstellen, dies in der Server-Konfiguration zu tun, vielleicht ist die einfachste Regel eine URL-Rewrite-Regel in einer .htaccess-Datei. Es hängt davon ab, wie Sie HTTPS für den Rest Ihrer Site erzwingen wollen, aber im Wesentlichen würden Sie nur eine Ausnahme für dieses Verzeichnis erstellen. –

2

Für Apache 2.4: "Apachectl graceful" (aka "reload") lädt die Zertifikate für mich neu (getestet mit Ubuntu 16.04 mit 2.4.18-2ubuntu3). Der Vorbehalt: Es gibt eine Menge Informationen im Internet, die sagen, Apache benötigt einen vollständigen Neustart statt eines Neuladens, um neue Zertifikate zu akzeptieren. Da für mich ein anmutiges Nachladen ausreichend war würde ich sagen, dass es möglich ist, vielleicht sogar wahrscheinlich, dass für ältere Apache-Versionen einmal mehr als ein Nachladen benötigt wurde?

Sie könnten ein Skript erstellen, das zuerst die Erneuerung des Zertifikats durchführt und dann apachectl anmutig. Oder eben 2 Cronjobs, wo die apachectl anmutig nach dem certbot cronjob passiert.

Dieses Problem ist nicht so schlimm, aber IMHO: Letsencrypt wird die Zertifikate bis zu 30 Tage vor Ablauf erneuern. Persönlich starte ich meine Server öfter neu, weil mein wöchentliches ubuntu-autoupdater in "/etc/apt/apt.conf.d/50unattended-upgrades" mit "Unattended-Upgrade :: Automatic-Reboot" ";" und die Chance, dass es kein Update gibt, das es für volle 30 Tage neu starten will, ist ziemlich niedrig.

Wenn Sie keine Neustarts wünschen, müssen Sie Ihre anderen Dienste überprüfen (Postfix, Dovecot kommen Ihnen in den Sinn, wenn Sie Mail auf dem Server haben), was sie benötigen, um ein neues Zertifikat zu akzeptieren Ihr Skript, das "certbot renew" startet.

1

Certbot hat ein Kommando gebaut zu binden, führen Sie alle Ihre Zertifikate zu erneuern:

certbot renew certonly --webroot -w /var/www/example/ -d www.example.com 

Wenn Sie die Konfiguration nur neu laden möchten, nachdem Sie bereits ein Zertifikat erstellt haben, führen Sie einfach sudo service nginx reload oder sudo service apache2 reload aus.Dadurch wird die Konfiguration neu geladen, ohne dass Ihre Website neu gestartet werden muss (also ohne Ausfallzeiten).

Ich verwende diese Methode, um mein Let's Encrypt SSL-Zertifikat automatisch über Cronjob zu erneuern, aber es wird auch für certbot funktionieren. Für weitere Details siehe Automatically renew Let's Encrypt SSL certificate

+0

Beim erneuten Laden des Apache werden die neuen Zertifikate nicht verwendet. Sie müssen neu gestartet werden. – magnetik

Verwandte Themen