个人博客服务器https证书通过certbot更新
Last Updated:2022-08-12
我的个站服务器,已经有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.com
和petersonlian.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