Esta é a maneira correta de definir o cron para a renovação do certificado Let's Encrypt no Apache2? Eu uso o Ubuntu 16.04.
@monthly letsencrypt renew && service apache2 reload
cron
lets-encrypt
user3448600
fonte
fonte
/etc/cron.d/certbot
Respostas:
Mensalmente não é frequente o suficiente. Esse script deve ser executado pelo menos semanalmente, e de preferência diariamente. Lembre-se de que os certificados não são renovados, a menos que estejam perto do vencimento, e mensalmente causaria que seus certificados existentes ocasionalmente expirem antes de serem renovados.
O nome do programa é
certbot
renomeado deletsencrypt
. Se você ainda estiver usandoletsencrypt
, precisará atualizar para a versão atual.Além desses problemas, é quase o mesmo que meus trabalhos cron.
Note que no 18.04 LTS o pacote letsencrypt foi (finalmente) renomeado para certbot. Agora inclui um timer do sistema que você pode ativar para agendar renovações de certbot, com
systemctl enable certbot.timer
esystemctl start certbot.timer
. No entanto, o Ubuntu não forneceu uma maneira de especificar ganchos. Você precisará configurar uma substituição paracertbot.service
substituirExecStart=
com a linha de comando desejada, até o Ubuntu corrigir isso.fonte
--renew-hook
vez de--post-hook
, reiniciar apenas se o certificado for renovado com êxito.certbot renew
apenas funcionará ™ExecStartPost=/usr/sbin/service nginx reload
. Trabalhou para mim!ExecStartPost=
é uma boa ideia. Por que eu não pensei nisso? Mas esteja ciente de que oservice
comando está obsoleto; não vai ficar por aí para sempre. Mude para ossystemctl
comandos correspondentes .Como não tenho reputação suficiente para comentar, responderei aqui. Recentemente (outubro de 2017), instalei e executei o certbot em um servidor Ubuntu 16.04 e um trabalho cron de renovação foi criado automaticamente no
/etc/cron.d/certbot
.Aqui está o trabalho cron que foi criado:
Seria uma boa ideia verificar se esse arquivo já existe antes de criar uma entrada crontab.
fonte
certbot renew
se/run/systemd/system
estiver presente - isso ocorre porque, em vez disso, um temporizador systemd está executando o certbot - leia mais sobre temporizadores certbot e systemd aqui .43 6 * * *
faria com que fosse executado todos os dias às 6h43. Uma vez por dia deve ser suficiente, mas qualquer um deles funciona bem.A documentação do certbot recomenda executar o script duas vezes por dia:
Como Michael Hampton menciona, o nome mudou para certbot, mas eles ainda fornecem a opção -auto que se mantém atualizada. O
certbot-auto
comando precisa de privilégios de root para ser executado; portanto, a linha no seu script cron deve se parecer com isso:No meu caso, o
certbot-auto
script é colocado no diretório inicial do usuário do git. O comando exato é entãoObserve que o exemplo na documentação corresponde a um caminho relativo, conforme indicado pelo ponto que pode ser confuso:
./path/to/certbot-auto renew --quiet
Certifique-se de executar previamente o comando de renovação em um shell para testar o caminho, se o certificado não estiver sendo renovado, nada acontecerá (execute esse teste sem o
--quiet
sinalizador para ver o que está acontecendo).Não é estritamente necessário recarregar o servidor quando o certificado for renovado dessa maneira, pois o caminho para o certificado ativo não muda se configurado corretamente.
Isso é verdade se você estiver executando o apache - para o nginx, considere adicionar um gancho de renovação, como:
fonte
--renew-hook
a reinicialização apenas após uma renovação bem-sucedida: guyrutenberg.com/2017/01/01/…Você não deveria ter que configurar nada. Qualquer instalação recente do certbot para Debian / Ubuntu deve instalar um timer do systemd e um trabalho cron (e o trabalho cron só será executado
certbot
se o systemd não estiver ativo, para que você não execute os dois).temporizador systemd
Você pode verificar os temporizadores do sistema usando o comando
systemctl list-timers
(ousystemctl list-timers --all
se também deseja mostrar os cronômetros inativos). Algo assim:O cronômetro do certbot deve estar aqui
/lib/systemd/system/certbot.timer
e ele executará o comando especificado em/lib/systemd/system/certbot.service
certbot.timer
executará o `certbot.service às 12 e às 12 horas, após um atraso aleatório de até 12 horas (43200 segundos).e
certbot.service
executará o comando renew.trabalho cron
Como outros já mencionaram, também há um trabalho cron instalado em
/etc/cron.d/certbot
:Isto está fazendo:
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- verifique se/usr/bin/certbot
é um arquivo executável e/run/systemd/system
se não é um diretório. Continue no próximo bit se essa verificação for bem-sucedida.perl -e 'sleep int(rand(43200))'
- durma uma quantidade aleatória entre 0 segundos e 12 horas (43200 = 12 x 60 x 60).certbot -q renew
verifique seus certificados e renove-os, se necessário. O-q
sinalizador é "silencioso" - não produza saída, a menos que haja um erro.Eu estava originalmente confuso com o trabalho cron, pois ele não seria executado devido ao systemd, então como o certbot seria executado? Encontrei a resposta nesta postagem do fórum, na qual baseei essa resposta.
fonte
/etc/cron.d/certbot
existe,systemctl list-timers
mostracertbot.timer
, mas meus certificados não foram renovados. A execuçãocertbot
manual funcionou bem, então não sei o que está acontecendo. Acabou adicionando umacrontab
entrada da velha escola .test
para verificar se o systemd está ativo e, se estiver, o trabalho cron sai imediatamente sem ser executadocertbot
- consulte o texto sobre o trabalho cron. Vou editar o texto para ser mais preciso.Para a renovação do certificado LetsEncrypt, geralmente uso o getsl . É um invólucro muito útil que pode até instalar o certificado em outras máquinas via conexão SSH.
A entrada cron é a seguinte:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
Como já sugerido, você deve executá-lo diariamente ou, melhor ainda, duas vezes por dia.
fonte
Como já mencionado pelo glaux:
Fonte: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
Então acabei usando isso (a execução é duas vezes por dia, às 01:00 e às 13:00 todos os dias):
ou melhor ainda:
Não testei, mas isso também deve funcionar:
Fonte: https://certbot.eff.org/docs/using.html
fonte
--renew-hook
, que reiniciará o servidor apenas quando o certificado for realmente renovado.--post-hook
e deve--renew-hook
estar emservice apache2 restart
vez deservice restart apache2
?service restart apache2
comando / serviço não está correto.Isto é o que eu uso:
dá saída como:
E está dizendo que o apache já foi reiniciado, portanto, não é necessário fazer isso novamente. Se eu executá-lo novamente:
portanto, não é problema renovar o certificado diariamente, meu cron é:
Eu uso o script para ajustar o log para separar o arquivo, então aqui está o meu cronautorenew.sh:
fonte
Outros membros já forneceram respostas muito mais detalhadas. Mas parece que eu deveria mencionar aqui.
A partir da versão 0.21.1 do certbot, o
--renew-hook
sinalizador foi alterado para--deploy-hook
Verifique se você não está usando o sinalizador obsoleto.fonte
De acordo com o guia EFF certbot
Se você não tem certeza se deve ou não o seu sistema tem isso já automatizado, verifique do seu sistema crontab (normalmente em
/etc/crontab/
e/etc/cron.*/*
$ crontab -l
e temporizadores Systemd$ systemctl list-timers
.fonte