我的个站服务器,已经有certbot命令

最后的证书路径在 /etc/letsencrypt/live/self-site/目录下 其中self-site,是我第一次通过certbot生成的证书所用的cert-name,取名叫做self-site

certbot升级

certbot --version # 查看版本
yum info certbot # 通过yum 查看版本
yum upgrade certbot # 升级certbot

查看个站目前证书的信息

certbot certificates

查看到的信息发现,证书里头的域名是www.petersonlian.competersonlian.com

更新证书的域名成*.petersonlian.com, cert-name保持不变,依然叫做self-site

方法一,step1, 运行下面命令

certbot certonly --preferred-challenges dns --manual --cert-name self-site -d *.petersonlian.com --server https://acme-v02.api.letsencrypt.org/directory

然后根据命令行提示操作。

方法一,step2, 通过阿里云域名后台,添加一条txt记录

step1的命令运行顺利后,会返回一些信息,并让我们去域名后台(我通过阿里云域名后台),添加一条txt记录

等这条txt记录添加成功后,命令行再点击回车,继续step1接下去的操作。 基本就是更新成功了。

方法二 当然,可以采用另一个方法,直接自动添加TXT记录到DNS

# 这个shell命令,我自己还没跑过,因为我基本是只需要renew,所以我下面的没有跑过
certbot certonly  -d *.example.com --manual --preferred-challenges dns --dry-run --manual-auth-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly add" --manual-cleanup-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly clean"

30天内到期的证书,会被certbot renew给更新掉

60(90 - 30)天到期,更新证书

certbot renew --renew-hook "systemctl reload nginx"

;;certbot renew --force-renewal ;; 这是把server上的所有证书都renew掉,不管是否快expires了

上面会失败,是因为给通配符证书自动renew( certbot renew),需要去dns添加一条 TXT记录

所以,参照这个方案GitHub方案 通过certbot的hook,运行一个编写好的shell脚本,这个脚本调用阿里云、腾讯云厂商的api,添加txt记录

# --dry-run,测试
certbot renew --manual --dry-run --preferred-challenges dns --manual-auth-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly add" --manual-cleanup-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly clean"

由于阿里云的cdn,我也使用了这个生成的证书。 所以,服务器证书更新后,阿里云上的cdn也要更新相应的证书。

scp  -i /Users/apple/.ssh/id_rsa2 root@47.99.58.238:/etc/letsencrypt/live/self-site/privkey.pem ~/privkey.pem
scp  -i /Users/apple/.ssh/id_rsa2 root@47.99.58.238:/etc/letsencrypt/live/self-site/fullchain.pem ~/fullchain.pem

;; ~/getCert.sh ;; 我自己机子上写了一个脚本

登录阿里云,把上面更新后的pem文件,分别上传

测试阿里云的https证书是否失效了 阿里云后台登录->证书托管->自定义证书 阿里云证书更新的api好像是

我机子上的实际crontab

0 0 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --preferred-challenges dns --renew-hook  "systemctl reload nginx" --manual-auth-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly add" --manual-cleanup-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly clean"

下面是老版本的(因为证书我改成了通配符的域名,所以需要dns做一个TXT记录验证,从而无法直接certbot renew自动更新了,所以用了上面的新版本)

0 0 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --renew-hook "systemctl reload nginx"

好像还有一个shell脚本,用来生成lets encrypt证书

https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E