前言
acme.sh 实现了 acme 协议,可以从 letsencrypt 生成免费的证书。
在开启https-免费的Let’s Encrypt中有介绍了使用certbot申请Let's encrypt证书,但是在续期的过程中发现不太方便,因为续期的时候必须使用 dns 验证,所有每次都需要人工进行介入。今天将介绍另外一种方式,一个脚本搞定全自动申请及续期,无需要人工介入 --acme.sh。
原理
dns 验证方式是通过添加 TXT记录来进行域名所有权的验证。各大域名解析服务商都支持通过 api 动态配置 dns,因此 acme 通过对各个厂商接口添加 TXT 纪录来自动完成相关的验证。
acme 目前支持阿里云、腾讯云、cloudflare、dnspod、cloudxns, godaddy 等域名解析服务商。
dns验证
#!/bin/sh
#安装,目录在~/.acme.sh/
curl https://get.acme.sh | sh
#导入密钥, CF_XXX 表示cloudflare厂商
export CF_Key="56fxxxxxxxxxxxxxxxb1"
export CF_Email="xxxx@gmail.com"
#申请证书
~/.acme.sh/acme.sh --issue --dns dns_cf -d freshines.com -d *.freshines.com
#将新证书拷贝至nginx指定的目录
cp ~/.acme.sh/freshines.com/fullchain.cer ../freshines.com/fullchain.pem
cp ~/.acme.sh/freshines.com/freshines.com.key ../freshines.com/privkey.pem
#nginx加载配置生效
nginx -s reload
#若nginx 使用dokcer部署
#cd ~/docker
#docker-compose stop nginx
#docker-compose start nginx
自动续期
设置定时任务,每月自动执行上述脚本即可。