Esta é a maneira correta de definir o cron para renovação do certificado Let's Encrypt no Apache2? Eu uso o Ubuntu 16.04.
@monthly letsencrypt renew && service apache2 reload
Esta é a maneira correta de definir o cron para renovação do certificado Let's Encrypt no Apache2? Eu uso o Ubuntu 16.04.
@monthly letsencrypt renew && service apache2 reload
Mensal não é frequente o suficiente.
Este 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 próximos do vencimento, e mensalmente pode fazer com que seus certificados existentes expirem ocasionalmente antes de serem renovados.
O nome do programa é
certbot
, que foi renomeado deletsencrypt
. Se você ainda estiver usandoletsencrypt
o , precisará atualizar para a versão atual.Além desses problemas, é quase o mesmo que meus trabalhos cron.
Nota: em 18.04 LTS, o
letsencrypt
pacote foi (finalmente) renomeado paracertbot
. Agora inclui umsystemd
cronômetro que você pode habilitar para agendarcertbot
renovações, comsystemctl 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é que a Canonical corrija isso.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 cron job que foi criado:
Seria uma boa ideia verificar se este arquivo já existe antes de criar uma entrada crontab.
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, então a linha em seu script cron deve ser algo assim:No meu caso, o
certbot-auto
script é colocado no diretório inicial do git-user. 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 testar o comando de renovação em um shell com antecedência para testar o caminho, se o certificado não estiver para renovação, nada acontecerá (execute este teste sem o
--quiet
sinalizador para ver o que está acontecendo).Não é estritamente necessário recarregar o servidor quando o certificado é 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 nginx, considere adicionar um gancho de renovação, como:
Em um ambiente docker (editar 2020-09-18)
Embora o acima ainda seja verdadeiro até onde eu sei, se seu aplicativo estiver sendo executado em um ambiente docker, você poderá deixar que essa rede proxy cuide de todos os seus certificados - localmente e em um ambiente ativo. Não sou afiliado ao projeto, mas o uso felizmente há alguns anos e não toquei em cron (para esta tarefa) ou scripts de certbot desde então.
Ele tem o benefício adicional de forçar o tráfego através da porta 443 automaticamente (se você habilitá-lo) para que você não precise mexer na configuração do apache ou do nginx - o contêiner que atende o aplicativo da Web só precisa servir a porta 80 e o proxy cuida de o resto.
Você não deveria ter que configurar nada. Qualquer instalação recente do certbot no Debian/Ubuntu deve instalar um timer systemd e um cron job (e o cron job só será executado
certbot
se o systemd não estiver ativo, para que você não execute os dois).temporizador do sistema
Você pode verificar seus cronômetros do systemd usando o comando
systemctl list-timers
(ousystemctl list-timers --all
se também deseja mostrar cronômetros inativos). Algo assim:O temporizador do certbot deve estar aqui
/lib/systemd/system/certbot.timer
e executará o comando especificado em/lib/systemd/system/certbot.service
certbot.timer
executará o `certbot.service às 12h e 12h, após um atraso aleatório de até 12 horas (43200 segundos).e
certbot.service
executará o comando de renovação.cron job
Como outros já mencionaram, também há um cron job instalado em
/etc/cron.d/certbot
:Isso 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. Apenas continue para o próximo bit se esta verificação for bem-sucedida.perl -e 'sleep int(rand(43200))'
- dormir 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 é "quieto" - não produz nenhuma saída a menos que haja um erro.Eu estava originalmente confuso com o cron job, pois ele não seria executado devido ao systemd, então como o certbot seria executado? Encontrei a resposta neste post do fórum, que é o que me baseei nesta resposta.
Outros membros já forneceram respostas muito mais detalhadas. Mas parece que eu deveria mencioná-lo aqui.
A partir da versão 0.21.1 do certbot, o
--renew-hook
sinalizador foi alterado para--deploy-hook
Certifique-se de que não está usando o sinalizador obsoleto.Para a renovação do certificado LetsEncrypt, geralmente uso getssl . É um invólucro de shell muito útil que pode até instalar certificados 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 ao dia.
Como já mencionado por gaux:
Fonte: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
Então acabei usando isso (executar é duas vezes por dia, às 01:00 e às 13:00 todos os dias):
ou melhor ainda:
Eu não testei, mas isso deve funcionar também:
Fonte: https://certbot.eff.org/docs/using.html
Como o método de instalação preferencial do certbot foi modificado para
snap
, o caminho para o cronômetro agora é/etc/systemd/system/snap.certbot.renew.timer
.Você também pode verificar a configuração executando
systemctl show certbot.timer
Isto é o que eu uso:
dá saída como:
E está dizendo que o apache já foi reiniciado, então não há necessidade de fazê-lo novamente. Se eu executar novamente:
portanto não é problema renovar o certificado diariamente, meu cron é então:
Eu uso script para ajustar o log para separar o arquivo, então aqui está meu cronautorenew.sh:
Se o seu certificado Certbot foi obtido usando o
standalone
plug-in, talvez seja necessário interromper o servidor da Web para que a renovação seja bem-sucedida. Isso pode ser feito no cron usando os operadores--pre-hook
e : Documentação do Certbot .--post-hook