Preciso reiniciar o Nginx se renovar meus certificados de segurança?

33

Então, eu estou configurando um servidor nginx com SSL ativado com uma definição de servidor algo como:

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;

    ...
}

Você entendeu (por favor, perdoe qualquer erro de digitação).

Enfim, o que eu quero saber é; se eu renovar meus certificados, existe uma maneira de instalá-los sem precisar reiniciar o nginx?

Por exemplo, se eu usasse links simbólicos /path/to/public/certificatee /path/to/private/key, apontando para o (s) meu (s) certificado (s) atual (is), ainda precisaria reiniciar nginxse eu simplesmente os alterasse para apontar para novos (renovados) certificados? Existem alternativas?

Haravikk
fonte

Respostas:

26

Sim, tenho certeza de que você precisaria recarregar o Nginx para que os certificados renovados exibissem a data de validade correta, mas uma simples limpeza de cache e navegação devem permitir que você visualize isso.

Ou, se você preferir cli, sempre poderá usar o antigo e confiável comando OpenSSL:

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

Isso daria as datas atuais no certificado. No seu caso, a porta seria 80 em vez de 443.

Muitas vezes nginx -s reloadnão funciona como esperado. Em muitos sistemas (Debian, etc.), você precisaria usar /etc/init.d/nginx reload.

Você sempre pode especificar o arquivo de configuração diretamente se tudo mais falhar, por nginx -c /path/to/nginx.conf.

rubynorails
fonte
Opa, essas escutas deveriam ter sido para a porta 443, meu mal! De qualquer forma, obrigado pela ótima resposta!
Haravikk
8
nginx reloade reiniciar o Nginx são duas coisas diferentes: reloadnão reinicia o Nginx, mas apenas envia o sinal SIGHUP. O sinal SIGHUP é suficiente?
Porton
11
Sim. Enviar um SIGHUP fará com que o nginx mude para o certificado atualizado.
usar o seguinte comando
Qual é a função do echo |seu comando? Se eu deixar de fora, não recebo um aviso de volta. Gostaria de saudar a saída notAftere compará-la com a data atual, para enviar spam alguns dias antes do vencimento do certificado.
Amedee Van Gasse
@AmedeeVanGasse, o echopipe faz com que o shell OpenSSL saia de volta para Bash e retorne a saída normalmente. Isso é necessário para que a saída limpa seja usada em scripts e para fins de automação, como parece que você está planejando. Eu implementei vários scripts como o que você está planejando usando a mesma funcionalidade básica.
precisa saber é o seguinte
21

Ao receber, o SIGHUPnginx recarregará a configuração atualizada, verifique-a enquanto abre arquivos de log e lê certificados SSL e , em seguida, encerre normalmente os processos de trabalho que dependem da configuração anterior.

Se acontecer que o nginx não consegue ler alguns certificados SSL, continuarei executando com a configuração mais antiga. Em outras palavras, continuará funcionando e processando solicitações, independentemente do que você fez com seus arquivos de configuração. Mesmo se estiverem quebrados, seus sites ainda serão abertos.

Portanto, sim, você não precisa reiniciar o nginx e corre o risco de deixar o servidor offline por mais de alguns segundos, se desejar que o nginx veja certificados atualizados. Deve ser o suficiente para:

sudo service nginx reload

Na maioria das distribuições atuais com o systemd usado por padrão, você também pode recarregar o nginx com o seguinte comando:

sudo systemctl reload nginx
sanmai
fonte
3
No Ubuntu 16 , CentOS 7 e outros sistemas compatíveis, systemdvocê também pode executar sudo systemctl reload nginx(o que foi sudo service nginx reloadmencionado acima).
Ville
@Ville você está certo, mas esse é mais um comando para lembrar; e não está lá systemd em todos os lugares
sanmai
Eu amo fazer service nginx restart. Eu nunca me canso de ver o quão rápido ele é concluído. No entanto, se estiver em um trabalho cron, e eu não estiver vendo nada disso, prefiro fazer algum tipo de recarregamento para evitar a interrupção de qualquer tipo de sessão persistente ou operação pendente que possa estar em andamento.
Rolf