let`s encert 证书自动更新
背景
想私有化部署一个artalk评论,页面显示需要https才能访问,需要配置一个证书和域名。点开阿里云看了一下之前绑定的证书:
之前免费的单域名证书想要12个月,一年的费用都快赶上服务器的费用了。要么每个https服务每三个月手动更新一次,要么每台68,而且还有每年20个证书的限制。通配符的域名还是另外的价格。好在let`s encert 的通配符证书是免费的,并且推荐使用的certbot可以用来自动刷新证书。
安装certbot
这边certbot官网提供了很方便的下载途径,选择对应的需要服务器和安装环境
这里选择使用snap安装
安装snap(已安装可以跳过)
1 | sudo yum install snapd |
删除之前安装过的certbot(可跳过)
1 | sudo yum remove certbot |
安装certbot
1 | sudo snap install --classic certbot |
这里certbot
已经安装完成了,但是certbot
会自动生成证书之前校验域名主权,目前阿里云是不支持的,只支持国外的服务器。所以这里需要安装 aliyun cli
安装aliyun cli工具
1 | wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz |
想要通过 aliyun cli来访问DNS服务,需要开放权限。这里通过AK类型凭证进行验证,命令是:
1 | aliyun configure set \ |
这里的access-key
需要有访问DNS的权限。
获取access-key
- 身份管理->用户->新增授权
- 在权限策略中选择
AliyunDNSFullAccess
- 点击授权后的用户,创建
AccessKey
- 保存AccessKey ID 和 AccessKey Secret
将获取到的id和secret以及region替换掉,region是服务器所在的区域ID
1 | aliyun configure set \ |
安装 certbot-dns-aliyun
github上有直接通过certbot的开放接口调用aliyun cli的工具 https://github.com/justjavac/certbot-dns-aliyun
这里直接拿来用
1 | wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh |
申请证书
测试申请
1 | certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run |
申请证书
1 | certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" |
测试证书续期
1 | certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run |
同上,没问题的话,去掉--dry-run
就是实际证书续费
添加定时任务
1 | 1 1 */1 * * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload" |
cron表达式根据需要自己写
生成的证书地址在
/etc/letsencrypt/live/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿尔忒弥斯的笔记!
评论