Cron

如何驗證/修復 Certbot 續訂 cron 中的錯誤

  • November 2, 2018

一整天,我主要在 TLS 區域​​修復錯誤,但這個問題並不是專門針對 TLS 的。

好吧,我有一個帶有幾個網站的網路伺服器,每個網站都有自己的 SSL 證書。

但就這一點而言,我設法在我的 Debian 9.2 上安裝了 Certbot 版本 0.19.0,如下所示:

  1. 向源添加反向埠:
deb http://ftp.debian.org/debian stretch-backports main
  1. 從後端安裝較新版本的 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

我可能誤解了這些命令。

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.

引用自:https://unix.stackexchange.com/questions/418252