¿Es esta la forma correcta de configurar cron para la renovación del certificado Let's Encrypt en Apache2? Yo uso Ubuntu 16.04.
@monthly letsencrypt renew && service apache2 reload
cron
lets-encrypt
usuario3448600
fuente
fuente
/etc/cron.d/certbot
Respuestas:
Mensualmente no es lo suficientemente frecuente. Este script debe ejecutarse al menos semanalmente, y preferiblemente diariamente. Recuerde que los certificados no se renuevan a menos que estén a punto de caducar, y mensualmente ocasionaría que sus certificados existentes ya vencen ocasionalmente antes de que se renueven.
El nombre del programa es
certbot
, cuyo nombre se cambióletsencrypt
. Si todavía está usandoletsencrypt
, debe actualizar a la versión actual.Aparte de esos problemas, es casi lo mismo que mis trabajos cron.
Tenga en cuenta que en 18.04 LTS el paquete letsencrypt ha sido (finalmente) renombrado a certbot. Ahora incluye un temporizador systemd que puede habilitar para programar renovaciones de certbot, con
systemctl enable certbot.timer
ysystemctl start certbot.timer
. Sin embargo, Ubuntu no proporcionó una forma de especificar ganchos. Tendrá que configurar una anulación paracertbot.service
anularExecStart=
con su línea de comando deseada, hasta que Ubuntu solucione esto.fuente
--renew-hook
lugar de--post-hook
reiniciar solo si el certificado se renueva con éxito.certbot renew
simplemente funcionará ™ExecStartPost=/usr/sbin/service nginx reload
. ¡Trabajó para mi!ExecStartPost=
es una buena idea. ¿Por qué no pensé en eso? Pero tenga en cuenta que elservice
comando está en desuso; No estará para siempre. Cambie a lossystemctl
comandos correspondientes .No tengo suficiente reputación para comentar, así que responderé aquí. Recientemente (octubre de 2017) instalé y ejecuté certbot en un servidor Ubuntu 16.04 y se creó automáticamente un trabajo cron de renovación
/etc/cron.d/certbot
.Aquí está el trabajo cron que se creó:
Sería una buena idea verificar si este archivo ya existe antes de crear una entrada crontab.
fuente
certbot renew
si/run/systemd/system
está presente, esto se debe a que en su lugar un temporizador systemd ejecuta certbot, lea más sobre certbot y temporizadores systemd aquí .43 6 * * *
lo haría funcionar todos los días a las 6:43 AM. Una vez al día debería ser suficiente, pero cualquiera de los dos funciona bien.La documentación de certbot recomienda ejecutar el script dos veces al día:
Como Michael Hampton menciona, el nombre ha cambiado a certbot, pero aún proporcionan la opción -auto que se mantiene actualizada. El
certbot-auto
comando necesita privilegios de root para ejecutarse, por lo que la línea en su secuencia de comandos cron debería verse así:En mi propio caso, el
certbot-auto
script se coloca en el directorio de inicio del usuario git. El comando exacto es entoncesTenga en cuenta que el ejemplo en la documentación corresponde a una ruta relativa, como lo indica el punto que puede ser confuso:
./path/to/certbot-auto renew --quiet
Asegúrese de probar el comando de renovación en un shell de antemano para probar la ruta, si el certificado no se debe renovar, no sucederá nada (ejecute esta prueba sin la
--quiet
bandera para ver qué está sucediendo).No es estrictamente necesario recargar el servidor cuando el certificado se renueva de esta manera, ya que la ruta al certificado en vivo no cambia si se configura correctamente.
Esto es cierto si está ejecutando apache: para nginx, considere agregar un gancho de renovación, como:
fuente
--renew-hook
para reiniciar solo después de una renovación exitosa: guyrutenberg.com/2017/01/01/…No deberías tener que configurar nada. Cualquier instalación reciente de Debbot / Ubuntu de certbot debe instalar un temporizador systemd y un trabajo cron (y el trabajo cron solo se ejecutará
certbot
si systemd no está activo, por lo que no puede ejecutar ambos).temporizador systemd
Puede verificar sus temporizadores systemd usando el comando
systemctl list-timers
(osystemctl list-timers --all
si también desea mostrar temporizadores inactivos). Algo como esto:El temporizador certbot debe estar aquí
/lib/systemd/system/certbot.timer
y ejecutará el comando especificado en/lib/systemd/system/certbot.service
certbot.timer
ejecutará el `certbot.service a las 12 a.m. y a las 12 p.m., después de un retraso aleatorio de hasta 12 horas (43200 segundos).y
certbot.service
ejecutará el comando de renovación.trabajo cron
Como otros han mencionado, también hay un trabajo cron instalado en
/etc/cron.d/certbot
:Esto esta haciendo:
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- compruebe si/usr/bin/certbot
es un archivo ejecutable y que no/run/systemd/system
es un directorio. Solo continúe al siguiente bit si esta verificación tiene éxito.perl -e 'sleep int(rand(43200))'
- Dormir una cantidad aleatoria entre 0 segundos y 12 horas (43200 = 12 x 60 x 60).certbot -q renew
revise sus certificados y renueve cualquiera si es necesario. El-q
indicador es "silencioso": no produzca ningún resultado a menos que haya un error.Originalmente estaba confundido por el trabajo cron, ya que no se iba a ejecutar debido a systemd, entonces, ¿cómo se ejecutaría certbot? Encontré la respuesta en esta publicación del foro, en la que basé esta respuesta.
fuente
/etc/cron.d/certbot
existe,systemctl list-timers
muestracertbot.timer
, pero mis certificados no fueron renovados. Ejecutarcertbot
manualmente funcionó bien, así que no sé qué está pasando. Terminé agregando unacrontab
entrada de la vieja escuela .test
para verificar si systemd está activo y si lo está, el trabajo cron sale inmediatamente sin ejecutarsecertbot
; vea el texto sobre el trabajo cron. Editaré el texto para ser más preciso.Para la renovación del certificado LetsEncrypt, generalmente uso getssl . Es un envoltorio de shell muy útil que incluso puede instalar certificados en otras máquinas a través de una conexión SSH.
La entrada cron es la siguiente:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
Como ya se sugirió, debe ejecutarlo diariamente o, mejor aún, dos veces al día.
fuente
Como ya lo mencionó glaux:
Fuente: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
Así que terminé usando esto (correr dos veces al día, a la 01:00 y a las 13:00 todos los días):
o mejor:
No probé pero esto también debería funcionar:
Fuente: https://certbot.eff.org/docs/using.html
fuente
--renew-hook
que reinicie su servidor solo cuando el certificado realmente se renueve.--post-hook
y--renew-hook
ser enservice apache2 restart
lugar deservice restart apache2
?service restart apache2
comando / servicio no es correcto.Esto es lo que uso:
da salida como:
Y dice que apache ya se ha reiniciado, por lo que no es necesario volver a hacerlo. Si lo ejecuto nuevamente:
por lo tanto, no es problema renovar el certificado diariamente, mi cron es entonces:
Utilizo script para ajustar el registro para separar el archivo, así que aquí está mi cronautorenew.sh:
fuente
Otros miembros ya proporcionaron respuestas mucho más detalladas. Pero parece que debería mencionarlo aquí.
A partir de la versión 0.21.1 de certbot, el
--renew-hook
indicador se cambia a--deploy-hook
Asegúrese de que no está utilizando un indicador obsoleto.fuente
De acuerdo con la guía EFF certbot
Si no está seguro de si o no su sistema ha esto ya automatizado, el cheque de su sistema crontab (típicamente en
/etc/crontab/
y/etc/cron.*/*
$ crontab -l
y temporizadores systemd$ systemctl list-timers
.fuente