使用 acme.sh 及 腾讯云DNSPod申请Let's Encrypt 的ssl 证书,并自动续签

腾讯云、阿里云陆续都把免费的 ssl 证书有效期换成几个月了,之前一年有效期每次手动操作下还行。现在几个月就要一次太烦了。so,来把证书换成 Let’s Encrypt,并用 acme.sh实现自动续签

安装 acme

使用 curl https://get.acme.sh | sh -s email=my@example.com因为网络问题总是超时,所以改用 gitee 方式安装 acme

git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
sh acme.sh --install -m 你的邮箱

安装完之后,应该会生成一个 cronjob,没有的话可以自己新增一个,该 job 可以每天检测所有证书并更新快过期的证书

生成证书(dns 验证方式)

生成证书acme 提供了两种方式,一种是 http 方式,需要在网站根目录下放置一个验证文件。另一种是 dns 验证,给域名添加一条 txt 解析记录就可以了。
我选择使用 dns 验证的方式,可以通过域名解析伤提供的 api 来自动验证,就不需要手动验证了

配置腾讯云的 api

配置环境变量并生成密钥

回到服务器中,将上面的 api 密钥配置为环境变量,供后面 acme 脚本生成 ssl 证书时使用

## 配置环境变量
export DP_Id="上一步生成的 ID" && export DP_Key="上一步生成的 Token"

## 生成ssl 证书
acme.sh --issue --server letsencrypt --dns dns_dp -d *.alon.wang --key-file /usr/local/nginx/conf/ssl/*.alon.wang.key --fullchain-file /usr/local/nginx/conf/ssl/*.alon.wang.crt
acme.sh --issue --server letsencrypt --dns dns_dp -d alon.wang --key-file /usr/local/nginx/conf/ssl/alon.wang.key --fullchain-file /usr/local/nginx/conf/ssl/alon.wang.crt

这里是DP_Id,DP_Key,dns_dp都是腾讯云方式的,如果是其他服务商,请参考 文档

acme.sh参数说明:

参数名 含义 说明
–server 指定证书签发方 zerossl(默认值,但是会因为网络问题经常出错), letsencrypt
–dns 指定 dns的 api验证方 具体参考 文档
-d 要生成证书的域名 可生成*的泛域名证书
–key-file 生成的.key证书的存放目录
–fullchain-file 生成的crt证书的存放目录
–reloadcmd 重新加载证书 使用service nginx force-reload,不要使用service nginx reload,但我更愿意手动操作证书

修改 nginx 配置

在 nginx 配置中添加ssl_certificatessl_certificate_key,并重新加载 nginx 配置文件nginx -s reload,使证书生效