Czy muszę zrestartować Nginx, jeśli odnowię moje certyfikaty bezpieczeństwa?


33

Więc konfiguruję serwer nginx z włączoną obsługą SSL z definicją serwera, taką jak:

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;

    ...
}

Masz pomysł (proszę wybaczyć literówki).

W każdym razie zastanawiam się; jeśli odnówię moje certyfikaty, czy istnieje sposób na ich zainstalowanie bez konieczności ponownego uruchamiania nginx?

Na przykład, jeśli miałbym korzystać z dowiązań symbolicznych /path/to/public/certificatei /path/to/private/key, wskazując na mój bieżący certyfikat (certyfikaty), czy nadal musiałbym restartować, nginxjeśli po prostu zmieniłem je, aby wskazywały nowe (odnowione) certyfikaty? Czy są alternatywy?

Odpowiedzi:


26

Tak, jestem prawie pewien, że będziesz musiał ponownie załadować Nginx, aby odnowione certyfikaty wyświetlały prawidłową datę ważności, ale proste wyczyszczenie pamięci podręcznej i przeglądanie powinny pozwolić ci to zobaczyć.

Lub jeśli wolisz cli, zawsze możesz użyć starej sprawdzonej komendy OpenSSL:

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

To dałoby ci aktualne daty na certyfikacie. W twoim przypadku port wynosiłby 80 zamiast 443.

Wiele razy nginx -s reloadnie działa zgodnie z oczekiwaniami. W wielu systemach (Debian itp.) Należy użyć /etc/init.d/nginx reload.

Zawsze możesz określić plik konfiguracyjny bezpośrednio, jeśli wszystko inne zawiedzie, przez nginx -c /path/to/nginx.conf.


Ups, te słuchania powinny być na porcie 443, moje złe! W każdym razie dzięki za świetną odpowiedź!
— Haravikk,

8
nginx reloadi restartowanie Nginx to dwie różne rzeczy: reloadnie restartuje Nginx, a jedynie wysyła sygnał SIGHUP. Czy sygnał SIGHUP jest wystarczający?
— porton

11
Tak. Wysłanie SIGHUP spowoduje, że nginx przełączy się na zaktualizowany certyfikat.
— rspeed

Jaka jest funkcja echo |twojego polecenia? Jeśli to pominę, nie otrzymam z powrotem monitu. Chciałbym prześledzić wyniki, notAftera następnie porównać je z bieżącą datą, aby spamować się na kilka dni przed wygaśnięciem certyfikatu.
— Amedee Van Gasse

@AmedeeVanGasse echopotok po prostu sprawia, że ​​powłoka OpenSSL wychodzi z powrotem do Bash i zwraca dane wyjściowe jak zwykle. Jest to konieczne w celu czystego wyjścia do użycia w skryptach i do celów automatyzacji, tak jakby to brzmiało jak planujesz. Wdrożyłem wiele skryptów, takich jak ten, który planujesz, używając tej samej podstawowej funkcjonalności.
— rubynorails

21

Po otrzymaniu SIGHUPnginx przeładuje zaktualizowaną konfigurację, zweryfikuje ją podczas otwierania plików dziennika i odczytywania certyfikatów SSL , a następnie z wdziękiem zamyka procesy robocze oparte na poprzedniej konfiguracji.

Jeśli zdarzy się, że nginx nie może odczytać niektórych certyfikatów SSL, będę nadal działać przy użyciu starszej konfiguracji. W przeciwnym razie będzie nadal działać i przetwarzać żądania bez względu na to, co zrobiłeś z plikami konfiguracyjnymi. Nawet jeśli są zepsute, Twoje strony będą nadal otwarte.

Więc tak, nie musisz ponownie uruchamiać nginx i ryzykować przełączenie serwera w tryb offline na dłużej niż kilka sekund, jeśli chcesz, aby nginx zobaczył zaktualizowane certyfikaty. Powinno wystarczyć:

sudo service nginx reload

W większości bieżących dystrybucji z domyślnie używanym systemd możesz również ponownie załadować nginx za pomocą następującego polecenia:

sudo systemctl reload nginx

3
W systemie Ubuntu 16 , CentOS 7 i innych systemach obsługujących systemdmożna również wykonać sudo systemctl reload nginx(do którego sudo service nginx reloadwspomniano powyżej, jest on przypisany).
— Ville

@Ville masz rację, ale to jeszcze jedno polecenie do zapamiętania; i nie wszędzie jest system
— sanmai

Uwielbiam to robić service nginx restart. Nigdy nie męczy mnie widok, jak szybko się kończy. Jeśli jednak jest to zadanie cron i nie zobaczę żadnego z nich, wolałbym wykonać jakieś przeładowanie, aby uniknąć przerwania jakiejkolwiek trwałej sesji lub trwającej operacji.
— Rolf
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.