Dois-je redémarrer Nginx si je renouvelle mon / mes certificat (s) de sécurité?

33

Je configure donc un serveur nginx avec SSL activé avec une définition de serveur ressemblant à ceci:

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;

    ...
}

Vous avez l'idée (veuillez pardonner les fautes de frappe).

Quoi qu'il en soit, ce que je me demande c'est; si je renouvelle mon ou mes certificats, y a-t-il un moyen de les installer sans avoir à redémarrer nginx?

Par exemple, si je devais utiliser des liens symboliques à partir de /path/to/public/certificateet /path/to/private/key, indiquant mes certificats actuels, aurais-je encore besoin de redémarrer nginxsi je devais simplement les modifier pour pointer vers de nouveaux certificats (renouvelés)? Y a-t-il des alternatives?

Haravikk
la source

Réponses:

26

Oui, je suis presque certain que vous devrez recharger Nginx pour que les certificats renouvelés affichent la date d'expiration correcte, mais une simple suppression du cache et une navigation devraient vous permettre de les visualiser.

Ou, si vous préférez cli, vous pouvez toujours utiliser l'ancienne commande OpenSSL:

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

Cela vous donnerait les dates actuelles sur le certificat. Dans votre cas, le port serait 80 au lieu de 443.

Plusieurs fois, nginx -s reloadcela ne fonctionne pas comme prévu. Sur de nombreux systèmes (Debian, etc.), vous devrez utiliser/etc/init.d/nginx reload .

Vous pouvez toujours spécifier le fichier de configuration directement si tout le reste échoue, par nginx -c /path/to/nginx.conf.

rubynorails
la source
Oups, ces écoutes auraient dû être pour le port 443, mon mal! Quoi qu'il en soit, merci pour la bonne réponse!
Haravikk
8
nginx reloadet redémarrer Nginx sont deux choses différentes: reloadne redémarre pas Nginx mais envoie seulement le signal SIGHUP. Le signal SIGHUP est-il suffisant?
Porton
11
Oui. L'envoi d'un SIGHUP amènera nginx au certificat mis à jour.
Rspeed
Quelle est la fonction de echo |dans votre commande? Si je le laisse de côté, je ne reçois pas d'invite. Je voudrais grp la sortie pour notAfteret ensuite comparer cela à la date actuelle, pour m'envoyer un spam quelques jours avant l'expiration du certificat.
Amédée Van Gasse
@AmedeeVanGasse le echotuyau oblige simplement la sortie du shell OpenSSL à revenir à Bash et renvoie la sortie normalement. Cela est nécessaire pour que la sortie propre puisse être utilisée dans les scripts et à des fins d'automatisation, comme si vous aviez planifié. J'ai implémenté de nombreux scripts, comme celui que vous envisagez d'utiliser avec les mêmes fonctionnalités de base.
rubynorails
21

À la réception, SIGHUPnginx rechargera la configuration mise à jour, la vérifiera lors de l’ouverture des fichiers journaux et de la lecture des certificats SSL , puis fermera en douceur les processus de travail en s’appuyant sur la configuration précédente.

S'il s'avère que nginx ne peut pas lire certains certificats SSL, je continuerai à fonctionner avec une configuration plus ancienne. Autrement dit, il continuera à fonctionner et à traiter les requêtes, peu importe ce que vous avez fait dans vos fichiers de configuration. Même s'ils sont cassés, vos sites Web seront toujours ouverts.

Alors oui, vous n'avez pas besoin de redémarrer nginx et vous risquez de mettre votre serveur hors ligne pendant plus de quelques secondes si vous souhaitez que nginx affiche les certificats actualisés. Il devrait suffire de:

sudo service nginx reload

Dans la plupart des distributions actuelles avec systemd utilisé par défaut, vous pouvez également recharger nginx avec la commande suivante:

sudo systemctl reload nginx
Sanmai
la source
3
Sur Ubuntu 16 , CentOS 7 et autres systèmes prenant en charge systemdvous pouvez également exécuter sudo systemctl reload nginx(ce qui est sudo service nginx reloadmentionné ci-dessus est un alias).
Ville
@Ville vous avez raison, mais c'est une commande de plus à retenir; et n'y est pas partout
sanmai
J'aime faire service nginx restart. Je ne me lasse pas de voir à quelle vitesse cela se termine. Cependant, s'il s'agit d'un travail cron, et que je ne le verrai pas, je préférerais procéder à un rechargement pour éviter toute interruption d'une session ou d'une opération en attente qui pourrait être en cours.
Rolf