一整天,我主要修复 TLS 领域的错误,但这个问题并不是专门关于 TLS 的。
嗯,我有一台 Web 服务器,其中有几个网站,每个网站都有自己的 SSL 证书。
但到目前为止,我成功地在我的 Debian 9.2 上安装了 Certbot 版本 0.19.0,如下所示:
将向后移植添加到源:
deb http://ftp.debian.org/debian stretch-backports main
从向后移植安装较新版本的 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
-------------------------------------------------------------------------------