Muss ich Nginx neu starten, wenn ich meine Sicherheitszertifikate erneuere?


33

Also richte ich einen Nginx-Server mit aktiviertem SSL mit einer Serverdefinition wie folgt ein:

server {
    listen :80;
    listen [::]:80;
    server_name example.org;
    root /foo/bar;

    ssl on;
    ssl_certificate /path/to/public/certificate;
    ssl_certificate_key /path/to/private/key;

    ...
}

Sie bekommen die Idee (bitte verzeihen Sie Tippfehler).

Wie auch immer, was ich mich wundere, ist; Gibt es eine Möglichkeit, meine Zertifikate zu installieren, wenn ich sie erneuere, ohne nginx neu starten zu müssen?

Wenn ich beispielsweise symbolische Links von meinen aktuellen Zertifikaten verwenden /path/to/public/certificateund auf diese /path/to/private/keyverweisen würde, müsste ich trotzdem neu starten, nginxwenn ich diese einfach ändern würde, um auf neue (erneuerte) Zertifikate zu verweisen? Gibt es Alternativen?

Antworten:


26

Ja, ich bin mir ziemlich sicher, dass Sie Nginx neu laden müssen, damit die erneuerten Zertifikate das richtige Ablaufdatum anzeigen, aber ein einfaches Leeren und Durchsuchen des Caches sollte es Ihnen ermöglichen, dies anzuzeigen.

Oder wenn Sie cli bevorzugen, können Sie immer den alten vertrauenswürdigen OpenSSL-Befehl verwenden:

echo | openssl s_client -connect your.domain.com:443 | openssl x509 -noout -dates

Das würde Ihnen die aktuellen Daten auf dem Zertifikat geben. In Ihrem Fall wäre der Port 80 statt 443.

Oft nginx -s reloadfunktioniert nicht wie erwartet. Auf vielen Systemen (Debian usw.) müssten Sie verwenden /etc/init.d/nginx reload.

Sie können die Konfigurationsdatei immer direkt angeben, wenn alles andere fehlschlägt nginx -c /path/to/nginx.conf.


Hoppla, diese Lauschangriffe hätten für Port 443 sein sollen, mein Schlimmes! Trotzdem danke für die tolle Antwort!
Haravikk,

8
nginx reloadund das Neustarten von Nginx sind zwei verschiedene Dinge: reloadNginx wird nicht neu gestartet, sondern es wird nur das SIGHUP-Signal gesendet. Ist das SIGHUP-Signal ausreichend?
Porton

11
Ja. Durch das Senden eines SIGHUP wechselt nginx zum aktualisierten Zertifikat.
Geschwindigkeit

Was ist die Funktion echo |in Ihrem Befehl? Wenn ich es weglasse, bekomme ich keine Rückmeldung. Ich möchte die Ausgabe notAfterüberprüfen und sie dann mit dem aktuellen Datum vergleichen, um mir ein paar Tage vor Ablauf des Zertifikats selbst Spam zu senden.
Amedee Van Gasse

@AmedeeVanGasse Die echoPipe bewirkt nur, dass die OpenSSL-Shell sauber nach Bash zurückkehrt und die Ausgabe wie gewohnt zurücksendet . Dies ist erforderlich, damit der Clean-Exit für die Verwendung in Skripten und für Automatisierungszwecke, wie es sich anhört, als würden Sie planen, verwendet werden kann. Ich habe zahlreiche Skripte implementiert, wie das, das Sie mit derselben Grundfunktionalität planen.
Rubynorails

21

Beim Empfang SIGHUPlädt nginx die aktualisierte Konfiguration neu, überprüft sie beim Öffnen der Protokolldateien und beim Lesen der SSL-Zertifikate und fährt anschließend die Arbeitsprozesse ordnungsgemäß herunter, wobei die vorherige Konfiguration zugrunde gelegt wird.

Wenn nginx einige SSL-Zertifikate nicht lesen kann, verwende ich weiterhin ältere Konfigurationen. Andernfalls funktioniert es weiterhin und verarbeitet Anforderungen, unabhängig davon, was Sie mit Ihren Konfigurationsdateien getan haben. Auch wenn sie kaputt sind, werden Ihre Websites immer noch geöffnet.

Also ja, Sie müssen nginx nicht neu starten und riskieren, Ihren Server länger als nur einige Sekunden offline zu schalten, wenn Sie möchten, dass nginx aktualisierte Zertifikate sieht. Es sollte reichen, um:

sudo service nginx reload

In den meisten aktuellen Distributionen mit standardmäßig verwendetem systemd können Sie nginx auch mit dem folgenden Befehl neu laden:

sudo systemctl reload nginx

3
Auf Ubuntu 16 , CentOS 7 und anderen Systemen, die systemdSie unterstützen , können Sie ebenfalls ausführen sudo systemctl reload nginx(was sudo service nginx reloadoben erwähnt ist, ist auf ausgerichtet).
Ville

@Ville Sie haben Recht, aber das ist ein weiterer Befehl, den Sie sich merken sollten. und es gibt nicht überall systemd
sanmai

Ich liebe es zu tun service nginx restart. Ich werde nie müde zu sehen, wie schnell es abgeschlossen ist. Wenn es sich jedoch um einen Cron-Job handelt und ich nichts davon sehe, würde ich lieber eine Art Neuladen durchführen, um zu vermeiden, dass eine dauerhafte Sitzung unterbrochen wird oder ein Vorgang ansteht, der möglicherweise noch andauert.
Rolf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.