如何验证/修复 Certbot 续订 cron 中的错误

如何验证/修复 Certbot 续订 cron 中的错误

一整天,我主要修复 TLS 领域的错误,但这个问题并不是专门关于 TLS 的。

嗯,我有一台 Web 服务器,其中有几个网站,每个网站都有自己的 SSL 证书。

但到目前为止,我成功地在我的 Debian 9.2 上安装了 Certbot 版本 0.19.0,如下所示:

  1. 将向后移植添加到源:

    deb http://ftp.debian.org/debian stretch-backports main
    
  2. 从向后移植安装较新版本的 Certbot:

    apt-get install python-certbot-apache -t stretch-backports
    

之后,我不得不对续订文件进行一些重大调整,所以它看起来像这样:

# renew_before_expiry = 30 days
version = 0.10.2
archive_dir = /etc/letsencrypt/archive/pavelstriz.cz-0001
cert = /etc/letsencrypt/live/pavelstriz.cz-0001/cert.pem
privkey = /etc/letsencrypt/live/pavelstriz.cz-0001/privkey.pem
chain = /etc/letsencrypt/live/pavelstriz.cz-0001/chain.pem
fullchain = /etc/letsencrypt/live/pavelstriz.cz-0001/fullchain.pem

# Options used in the renewal process
[renewalparams]
authenticator = webroot
installer = apache
rsa_key_size = 4096
account = c3f3d026995c1d7370e4d8201c3c11a2
must_staple = True

[[webroot_map]]
pavelstriz.cz = /home/pavelstriz/public_html
www.pavelstriz.cz = /home/pavelstriz/public_html

pavelstriz.cz此后我已成功续订域名:

certbot renew --dry-run

但让我担心的是每日 Certbot 的 cron:

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# 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(3600))' && certbot -q renew

我不知道它是否真正有效或如何成功运行?

如果我运行:

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

在 Bash 中,它说:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
The requested ! plugin does not appear to be installed

我可能误解了这些命令。

答案1

cron 实际运行的命令是:

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

首先测试一些文件

test -x /usr/bin/certbot -a \! -d /run/systemd/system

翻译过来就是

  • 确实/usr/bin/certbot存在并且可执行( -x /usr/bin/certbot)
  • 并不是 (-a \!
  • /run/systemd/system存在并且是一个目录 ( -d /run/systemd/system)

如果测试成功,请等待随机秒数 ( perl -e 'sleep int(rand(3600))'),然后尝试续订证书 ( certbot -q renew)。

但是,在 Debian 9 上,systemd默认安装,这意味着/run/systemd/system存在并且是一个目录,因此初始测试失败并且永远不会运行更新命令。

实际的更新是由文件中定义的 systemd 计时器管理的lib/systemd/system/certbot.timer。从版本 0.27.0-1 开始;其内容是:

[Unit]
Description=Run certbot twice daily

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

[Install]
WantedBy=timers.target

如果 cerbot 配置正确,您可能应该找到类似的行

Nov  2 20:06:14 hostname systemd[1]: Starting Run certbot twice daily.
Nov  2 20:06:14 hostname systemd[1]: Started Run certbot twice daily.

在你的syslog

答案2

我可能误解了这些命令。

嗯,也许,一点点:-)

本条目:

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

我无法弄清楚。事实上,您所需要的只是:

0 */12 * * * /usr/bin/certbot renew

或者,如果您不想要来自以下地址的任何电子邮件cron

0 */12 * * * /usr/bin/certbot renew > /dev/null 2>&1

如果您运行(如root),certbot renew您将看到您是否已正确配置:

certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/my.domain.org.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/my.domain.org/fullchain.pem (skipped)
No renewals were attempted.

您还可以使用certificates参数 withcertbot显示有关您的证书的信息:

certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: my.domain.org
    Domains: my.domain.org
    Expiry Date: 2018-03-14 09:41:09+00:00 (VALID: 53 days)
    Certificate Path: /etc/letsencrypt/live/my.domain.org/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/my.domain.org/privkey.pem
-------------------------------------------------------------------------------

相关内容