我一直在寻找一个很好的解决方案来更新 Let's Encrypt 的 WILDCARD 证书。
设置通配符证书很容易:
Apache Debian 9 拉伸:
sudo apt-get install certbot python-certbot-apache -t stretch-backports
sudo certbot certonly --cert-name CERTNAME --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns -d 'DOMAIN.co,*.DOMAIN.co'
在 DNS 设置之后,它创建了证书。但现在我不想每 90 天处理一次以进行续订。我一直在为 Cron Job 寻找一个好的解决方案。大多数 Cron Job 解决方案的问题在于它们适用于非通配符域。
我喜欢这个解决方案,它每天检查证书是否可以更新,如果它允许自己更新它:
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 renew
通配符证书的问题在于它有一个 DNS 设置组件,并且certbot renew
不适用于手动 certbot 设置。
我正在寻找一个像这样的 Cron Job:
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 certonly --cert-name CERTNAME --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns -d 'DOMAIN.co,*.DOMAIN.co'
但我认为这不适用于 DNS 设置。
如何创建 Cron 作业以有效地更新通配符证书属性?
我通过切换到acme.sh而不是 certbot 解决了这个问题。
当前版本的 certbot (1.30-5) 的文档说它可以进行自动通配符续订 ( DNS-01 ),但 Debian buster stable 还没有包含这样的版本 (0.31.0-5)。我无法超越限制。
我发现 acme.sh 易于实现且更易于理解该 certbot。我的 DNS 提供商是 Cloudflare。两种解决方案的支持都很好。