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?

Haravikk
źródło

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.

rubinorails
źródło
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
sanmai
źródło
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