这是正确的方式来设置更新我们的encryption在Apache2证书的cron ? 我使用Ubuntu 16.04。
@monthly letsencrypt renew && service apache2 reload
每月不够频繁。 该脚本应至less每周运行一次,最好每天运行一次。 请记住,证书不会被更新,除非它们即将到期,并且每月会导致您现有的证书偶尔会在更新之前过期。
程序的名字是certbot
,它是从letsencrypt
改名而来的。 如果您仍在使用letsencrypt
,则需要更新到当前版本。
除了这些问题,这和我的cron工作差不多。
43 6 * * * certbot renew --post-hook "systemctl reload nginx"
certbot文档build议每天运行脚本两次:
注意:
如果你正在设置一个cron或者systemd的工作,我们build议每天运行两次(在你的证书到期之前,它将不会执行任何操作,但是定期运行会给你的站点留下一个在线的机会如果我们encryption发起的撤销是由于某种原因发生的)。 请在一小时内为您的续订任务select一个随机分钟。
正如迈克尔·汉普顿提到的名字已经改变为certbot,但他们仍然提供了自动更新的选项。 certbot-auto
命令需要root权限才能运行,因此cron脚本中的行应该如下所示:
52 0,12 * * * root /full/path/to/certbot-auto renew --quiet
在我自己的情况下, certbot-auto
脚本被放置在git-user的主目录中。 那么确切的命令是
52 0,12 * * * root /home/git/certbot-auto renew --quiet
请注意,文档中的示例对应于一个相对path,如可以混淆的点所示:
./path/to/certbot-auto renew --quiet
请务必在shell中预先运行renew命令来testingpath,如果证书没有到期续订,则不会发生任何事情(运行此testing时没有使用--quiet
标志来查看发生的事情)。
当以这种方式更新证书时,重新加载服务器并不是必须的,因为如果设置正确,活动证书的path不会改变。 如果你正在运行apache的话,这是真的 – 对于nginx来说,请看下面的注释。
编辑:将指令从00更正为xddsg指出的单个0。
对于LetsEncrypt证书更新,我通常使用getssl 。 这是一个非常方便的shell包装,甚至可以通过SSH连接在其他机器上安装证书。
cron条目如下:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
正如已经build议的那样,你应该每天运行一次,甚至更好,每天运行两次。
我没有足够的评价,所以我会在这里回答。 我最近(2017年10月)在Ubuntu 16.04服务器上安装并运行certbot,并在/etc/cron.d/certbot
自动创build了续订cron作业。
这是创build的cron作业:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
在创buildcrontab条目之前检查它是否已经存在是个好主意。
这是我使用的:
/opt/letsencrypt/letsencrypt-auto renew
给出的输出为:
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)
它的话说,Apache已经重新启动,所以不需要再做一遍。 如果我再次运行它:
Cert not yet due for renewal
因此每天更新证书都不是问题,我的cron是:
@daily /opt/letsencrypt/cronautorenew.sh
我使用脚本来调整日志来分开文件,所以这里是我的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
正如Glaux所述:
注意:如果你正在设置一个cron或systemd的工作,我们build议每天运行两次(在你的证书到期之前,它将不会执行任何操作,但是定期运行会给你的站点一个停留的机会在线的情况下,我们的encryption发起的撤销是由于某种原因发生的)。 请在一小时内为您的续订任务select一个随机分钟。
资料来源: https : //certbot.eff.org/all-instructions/#debian-8-jessie-apache
所以我结束了使用这个(跑步是每天两次,在01:00和每天13:00):
6 1,13 * * * certbot renew --post-hook "service restart apache2"
甚至更好:
6 1,13 * * * certbot renew --renew-hook "service restart apache2"
我没有testing,但这也应该工作:
6 1,13 * * * certbot renew --post-hook "/etc/init.d/apache2 restart" 6 1,13 * * * certbot renew --renew-hook "/etc/init.d/apache2 restart"
– 在每次更新尝试之前和之后,预先挂钩和 – 挂钩挂钩运行。 如果你希望你的钩子只有在成功更新后才能运行,那么在这样的命令中使用–renew-hook。
来源: https : //certbot.eff.org/docs/using.html