前言
最近几天阿里云的SSL证书到期了,想着更新一把。打开阿里域名后台一看,免费SSL证书的有效时间已经从以前的1年变成3个月了,真是绷不住了。。。那不如搞个免费证书自动续期,然后在互联网上找到了lego这个工具,看了一下用起来还挺简单的。群主之前也提供了一个,不过是手动的(https://www.ecoo.top/ssl.html),里面也有自动脚本,但貌似需要木弟子,不是很方便。
安装lego
参考链接:https://www.jianshu.com/p/7a1f41b74955
下载软件
获取DNS API参数(自动续期需要用,如果手动请忽略)
根据 阿里云 DNS 代理配置说明 得知需要去阿里云申请 API 授权,得到参数
登陆阿里云控制台 https://homenew.console.aliyun.com/
访问控制 > 用户 > 新建用户
登陆名: dns
显示名: dns
访问方式: openapi
创建后,添加权限: AliyunDNSFullAccess
最终得到 AccessKey ID、AccessKeySecret
获取证书
在/opt/lego目录下运行命令即可生成,证书在/opt/lego/.lego/certificates/
(第一次运行时会用邮箱进行注册)
# --path 为配置和证书生成目录,如果不指定默认为 `./.lego`
# --email 注册邮箱
# --domains 受保护的域名(建议通配符)
# --dns 为 DNS 服务器 Code
./lego --path="/opt/lego/.lego" --email="xxxx@qq.com" --domains="*.baudu.top" --domains="baudu.top" --dns="alidns" run
此时你已经获取到证书了,已经可以把它配置到nginx上面,但需要定期更新
自动续期
此处需要用到前面获取的openapi参数,新建脚本,并写入以下内容:
vi autorenew.sh
#!/bin/sh
# ALICLOUD_ACCESS_KEY、ALICLOUD_SECRET_KEY 设置为对应的 API 参数
# renew --days=n 提前n天获取证书
# --renew-hook 证书获取成功后,执行的命令内容,一般是reload nginx
ALICLOUD_ACCESS_KEY=获取的AccessKey ID \
ALICLOUD_SECRET_KEY=获取的AccessKeySecret \
/opt/lego/lego --path="/opt/lego/.lego" --email="xxxx@qq.com" --domains="*.baudu.top" --domains="baudu.top" --dns="alidns" renew --days=30 --renew-hook="nginx -s reload" >> autorenew.log
脚本创建后,赋予权限,可以先执行一把,看看有没有问题,然后将其添加到定时任务中。
0 5 * * * /opt/lego/autorenew.sh
到此,自动续期已完成,脚本会提前30天更新证书。