Pregunta Cron trabajo para vamos a cifrar la renovación


Es esta la manera correcta de configurar cron ¿Para renovar el certificado de Let's Encrypt en Apache2? Yo uso Ubuntu 16.04.

@monthly letsencrypt renew && service apache2 reload

67
2017-07-19 19:07


origen


Como una de las respuestas a continuación, certbot v0.19.0 (y quizás algunas anteriores) ya crea una entrada de crontab @ /etc/cron.d/certbot - xgMz
Además, el complemento certbot apache con la validación tls-sni volverá a cargar apache como parte del procedimiento de validación una vez que se haya recuperado el nuevo certificado. - xgMz


Respuestas:


Mensualmente no es lo suficientemente frecuente. Este script debe ejecutarse al menos semanalmente, y preferiblemente a diario. Recuerde que los certificados no se renuevan a menos que estén a punto de expirar, y mensualmente causaría que sus certificados existentes caduquen ocasionalmente antes de renovarse.

El nombre del programa es certbot, que fue renombrado de letsencrypt. Si sigues usando letsencrypt, necesitas actualizar a la versión actual.

Aparte de esos problemas, es casi lo mismo que mis trabajos cron.

43 6 * * * certbot renew --post-hook "systemctl reload nginx"

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 y systemctl start certbot.timer. Sin embargo, Ubuntu no proporcionó una manera de especificar ganchos. Tendrá que configurar una anulación para certbot.service para anular ExecStart= con su línea de comando deseada, hasta que Ubuntu arregle esto.


102
2017-07-19 19:33



Solo puedo correr crontab -e y pegar @daily certbot renew && systemctl reload apache2 y funcionará, ¿verdad? No tengo tanta experiencia con Linux. No sé cómo probar estos trabajos cron. - user3448600
@ user3448600 puede que quieras leer serverfault.com/q/449651/126632 - Michael Hampton♦
¿Qué ventana de tiempo está "cerca del vencimiento"? - Andre Figueiredo
@AndreFigueiredo En mi prueba, el certificado se renueva automáticamente aproximadamente un mes antes de que caduque. No podría decir si es exactamente 30 días (sospecho que lo es). - glaux
Para apache / httpd, certbot renew simplemente funcionará - aairey


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 en /etc/cron.d/certbot.

Aquí está el trabajo cron que fue creado:

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew

Sería una buena idea verificar si este archivo ya existe antes de crear una entrada crontab.


42
2017-10-22 15:34



La misma situación para mí. ¡Gracias por el aviso! - Osborne Cox
Vi que tenía esto también después de ejecutar certbot. Muy bonito que permite cifrar hicimos esto! Es un gran proyecto. - Bjorn Tipling
Vale la pena ser consciente de que el trabajo cron anterior no lo hará correr certbot renew Si /run/systemd/system está presente - esto se debe a que, en cambio, un temporizador systemd está ejecutando certbot - Lea más acerca de los temporizadores certbot y systemd aquí. - Hamish Downer


los documentación certbot recomienda ejecutar el script dos veces al día:

Nota:

Si está configurando un trabajo cron o systemd, le recomendamos que lo ejecute dos veces al día (no hará nada hasta que sus certificados se renueven o se revoquen, pero ejecutarlo regularmente le daría a su sitio la oportunidad de permanecer en línea en caso de una revocación iniciada por Let's Encrypt sucedió por alguna razón). Seleccione un minuto aleatorio dentro de la hora para sus tareas de renovación.

Como Michael Hampton menciona, el nombre ha cambiado a certbot, pero todavía ofrecen la opción -auto que se mantiene actualizada. los certbot-auto El comando necesita privilegios de raíz para ejecutarse, por lo que la línea en su secuencia de comandos cron debería tener un aspecto similar al siguiente:

52 0,12 * * * root /full/path/to/certbot-auto renew --quiet

En mi caso el certbot-auto El script se coloca en el directorio de inicio del usuario git. El comando exacto es entonces

52 0,12 * * * root /home/git/certbot-auto renew --quiet

Tenga 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 renew en un shell de antemano para probar la ruta, si el certificado no se debe renovar, no ocurrirá nada (ejecute esta prueba sin el --quiet bandera para ver que está pasando).

No es estrictamente necesario volver a cargar el servidor cuando el certificado se renueva de esta manera, ya que la ruta del certificado activo no cambia si se configura correctamente.

Esto es cierto si está ejecutando apache; para nginx, considere agregar un enlace de renovación, como por ejemplo:

52 0,12 * * * root certbot renew --renew-hook 'service nginx reload'

35
2018-01-09 09:07



Me gusta cómo se explica esto, no es necesario detallar el reinicio del servicio (podría hacer un desastre si alguien está haciendo algo al respecto, tener la oportunidad dos veces al día de ser atrapado) y mencionar los privilegios necesarios. - Gusstavv Gil
Esto no es verdad es necesario para volver a cargar el servidor, al menos con Nginx - parece que nginx almacena en caché el certificado inicial y no registra un nuevo certificado incluso si el archivo cambia. Ver esta publicación para obtener información sobre el uso --renew-hook para reiniciar solo después de una renovación exitosa: guyrutenberg.com/2017/01/01/… - Whatcould


Para la renovación del certificado de LetsEncrypt, generalmente uso getssl. Es una envoltura de shell muy útil que incluso puede instalar el certificado en otras máquinas a través de la 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.


4
2018-01-09 09:46





Como ya se mencionó por glaux:

Nota: si está configurando un trabajo cron o systemd, recomendamos ejecutar   dos veces al día (no hará nada hasta que venzan sus certificados)   para renovación o revocación, pero ejecutarlo regularmente le daría a su sitio   una oportunidad de permanecer en línea en caso de un inicio de Let's Encrypt   revocación sucedió por alguna razón). Por favor seleccione un minuto al azar   Dentro de la hora para sus tareas de renovación.

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):

6 1,13 * * * certbot renew --post-hook "service apache2 restart"

o mejor:

6 1,13 * * * certbot renew --renew-hook "service apache2 restart"

No probé, pero esto debería funcionar también:

6 1,13 * * * certbot renew --post-hook "/etc/init.d/apache2 restart"
6 1,13 * * * certbot renew --renew-hook "/etc/init.d/apache2 restart"

Los ganchos anteriores y anteriores se ejecutan antes y después de cada intento de renovación. Si desea que su gancho se ejecute solo después de una renovación exitosa,   use --renew-hook en un comando como este.

Fuente: https://certbot.eff.org/docs/using.html


3
2017-07-05 09:49



"Por favor, seleccione un minuto aleatorio dentro de la hora para sus tareas de renovación". - Isius
Por mi nota anterior, sería mejor con --renew-hook, que reinicia su servidor solo cuando el certificado se renueva realmente. - Whatcould
Gracias @Isius, lo cambié a un minuto aleatorio (6). - JedatKinports
@JedatKinports: no debería el --post-hook y --renew-hook ser service apache2 restart en lugar de service restart apache2? - Paul Ratazzi
El comando es servicio apache2 reinicio! los service restart apache2 no es correcto el comando / servicio. - GTodorov


Esto es lo que uso:

/opt/letsencrypt/letsencrypt-auto renew

da salida como:

Upgrading certbot-auto 0.8.1 to 0.9.1...
Replacing certbot-auto...
Creating virtual environment...
...
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem
-------------------------------------------------------------------------------

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem (success)

Y está diciendo que Apache ya se ha reiniciado, así que no hay necesidad de volver a hacerlo. Si lo ejecuto de nuevo:

Cert not yet due for renewal

por lo tanto no es problema para renovar el certificado diariamente, mi cron es entonces:

@daily /opt/letsencrypt/cronautorenew.sh

Utilizo el script para modificar el registro para separar el archivo, así que aquí está mi cronautorenew.sh:

#!/usr/bin/env bash
printf "\nattempt to renew certificates" >>/var/log/letsencrypt_cron.log 2>&1
date >>/var/log/letsencrypt_cron.log 2>&1
/opt/letsencrypt/letsencrypt-auto renew >>/var/log/letsencrypt_cron.log 2>&1
printf "renew finished\n" >>/var/log/letsencrypt_cron.log 2>&1

1
2017-10-10 11:50





No deberías tener que configurar nada. Cualquier instalación reciente de Debian / Ubuntu de certbot debería instalar un temporizador de systemd y un trabajo cron (y el trabajo de cron solo se ejecutará si systemd no está activo, así que no se ejecutan los dos).

temporizador de systemd

Puedes verificar tus temporizadores de sistema usando el comando systemctl list-timers (o systemctl list-timers --all Si también desea mostrar temporizadores inactivos). Algo como esto:

% sudo systemctl list-timers
NEXT                         LEFT        LAST                         PASSED      UNIT                         ACTIVATES
Fri 2018-08-03 06:17:25 UTC  10h left    Thu 2018-08-02 06:27:13 UTC  13h ago     apt-daily-upgrade.timer      apt-daily-upgrade.service
Fri 2018-08-03 11:43:29 UTC  15h left    Thu 2018-08-02 16:54:52 UTC  3h 7min ago certbot.timer                certbot.service
Fri 2018-08-03 12:44:58 UTC  16h left    Thu 2018-08-02 19:14:58 UTC  47min ago   apt-daily.timer              apt-daily.service
Fri 2018-08-03 19:43:44 UTC  23h left    Thu 2018-08-02 19:43:44 UTC  18min ago   systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2018-08-06 00:00:00 UTC  3 days left Mon 2018-07-30 00:00:09 UTC  3 days ago  fstrim.timer                 fstrim.service

El temporizador certbot debería estar aquí /lib/systemd/system/certbot.timer y ejecutará el comando especificado en /lib/systemd/system/certbot.service

certbot.timer ejecutará el servicio `certbot.service a las 12 am y las 12 pm, después de un retraso aleatorio de hasta 12 horas (43200 segundos).

# cat /lib/systemd/system/certbot.timer
[Unit]
Description=Run certbot twice daily

[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true

[Install]
WantedBy=timers.target

y certbot.service ejecutará el comando renovar.

# cat /lib/systemd/system/certbot.service
[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://letsencrypt.readthedocs.io/en/latest/
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true

trabajo cron

Como otros han mencionado, también hay un trabajo cron instalado en /etc/cron.d/certbot:

# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

Esto está haciendo:

  • test -x /usr/bin/certbot -a \! -d /run/systemd/system - comprobar si /usr/bin/certbot es un archivo ejecutable y que /run/systemd/system es no un directorio Solo continúe con el siguiente bit si esta comprobación se realiza correctamente.
    • La parte de la comprobación de systemd significa efectivamente que si systemd se está ejecutando, no ejecute certbot desde el trabajo cron, déjelo al temporizador.
  • perl -e 'sleep int(rand(43200))' - Duerma una cantidad aleatoria entre 0 segundos y 12 horas (43200 = 12 x 60 x 60).
  • certbot -q renew Revisa tus certificados y renueva cualquiera si es necesario. los -q El indicador está "silencioso": no se produce ninguna salida a menos que haya un error.

Al principio me confundió el trabajo cron porque no iba a ejecutarse debido a systemd, entonces, ¿cómo se ejecutaría certbot? Encontré la respuesta en esta publicación en el foro que es en lo que basé esta respuesta.


1
2017-08-02 20:14



"No debería tener que configurar nada", pero mi certificado expiró recientemente, e instalé certbot hace aproximadamente 3 meses. /etc/cron.d/certbot existe systemctl list-timers muestra certbot.timer, pero mis certificados no fueron renovados. Corriendo certbot Trabajé manualmente bien, así que no sé qué está pasando. Acabé añadiendo una vieja escuela. crontab entrada. - Dan Dascalescu