¿Debo reiniciar Nginx si renuevo mis certificados de seguridad?

33

Así que estoy configurando un servidor nginx con SSL habilitado con una definición de servidor similar a:

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;

    ...
}

Entiendes la idea (perdona cualquier error tipográfico).

De todos modos, lo que me pregunto es; si renuevo mis certificados, ¿hay alguna forma de instalarlos sin tener que reiniciar nginx?

Por ejemplo, si tuviera que usar enlaces simbólicos desde /path/to/public/certificatey /path/to/private/key, apuntando a mis certificados actuales, ¿aún tendría que reiniciar nginxsi simplemente cambiara estos para señalar nuevos certificados (renovados)? ¿Hay alternativas?

Haravikk
fuente

Respuestas:

26

Sí, estoy bastante seguro de que necesitará volver a cargar Nginx para que los certificados renovados muestren la fecha de vencimiento correcta, pero una simple limpieza y exploración de caché debería permitirle ver esto.

O si prefiere cli, siempre puede usar el antiguo comando OpenSSL confiable:

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

Eso le daría las fechas actuales en el certificado. En su caso, el puerto sería 80 en lugar de 443.

Muchas veces nginx -s reloadno funciona como se esperaba. En muchos sistemas (Debian, etc.), necesitaría usar /etc/init.d/nginx reload.

Siempre puede especificar el archivo de configuración directamente si todo lo demás falla, por nginx -c /path/to/nginx.conf.

rubynorails
fuente
¡Vaya, esas escuchas deberían haber sido para el puerto 443, mi mal! De todos modos, gracias por la gran respuesta!
Haravikk
8
nginx reloady reiniciar Nginx son dos cosas diferentes: reloadno reinicia Nginx sino que solo le envía la señal SIGHUP. ¿La señal SIGHUP es suficiente?
Porton
11
Sí. Enviar un SIGHUP hará que nginx cambie al certificado actualizado.
rspeed
¿Cuál es la función de echo |tu comando? Si lo dejo afuera, no recibo un aviso de regreso. Me gustaría obtener el resultado notAftery luego compararlo con la fecha actual, para enviarme un correo no deseado un par de días antes de que caduque el certificado.
Amedee Van Gasse el
@AmedeeVanGasse, la echotubería simplemente hace que el shell de OpenSSL salga limpiamente de nuevo a Bash y devuelva la salida de forma normal. Esto es necesario para que la salida limpia se use en scripts y para fines de automatización, como parece que está planeando. He implementado numerosas secuencias de comandos como la que está planeando usar esa misma funcionalidad básica.
rubynorails 01 de
21

Al recibir, SIGHUPnginx volverá a cargar la configuración actualizada, la verificará mientras abre los archivos de registro y lee los certificados SSL , luego cerrará con gracia los procesos de trabajo que dependen de la configuración anterior.

Si sucede que nginx no puede leer algunos certificados SSL, continuaré ejecutándome con una configuración anterior. De lo contrario, seguirá funcionando y procesando solicitudes sin importar lo que haya hecho con sus archivos de configuración. Incluso si están rotos, sus sitios web aún se abrirán.

Entonces, sí, no tiene que reiniciar nginx y arriesgarse a poner su servidor fuera de línea por más de unos segundos si desea que nginx vea certificados actualizados. Debería ser suficiente para:

sudo service nginx reload

En la mayoría de las distribuciones actuales con systemd usado por defecto, también puede recargar nginx con el siguiente comando:

sudo systemctl reload nginx
sanmai
fuente
3
En Ubuntu 16 , CentOS 7 y otros sistemas compatibles systemdtambién puede ejecutar sudo systemctl reload nginx(lo que se sudo service nginx reloadmenciona anteriormente es alias).
Ville
@Ville tienes razón, pero ese es un comando más para recordar; y no está allí SystemD todas partes
sanmai
Me gusta hacer service nginx restart. Nunca me canso de ver qué tan rápido se completa. Sin embargo, si está en un trabajo cron, y no veré nada de eso, prefiero hacer algún tipo de recarga para evitar interrumpir cualquier tipo de sesión persistente u operación pendiente que pueda estar en curso.
Rolf