阿里云使用.acme.sh自动申请let’s encrypt证书并自动部署到nginx, 七牛,已经发送钉钉通知的详细记录

完整流程

acme.sh的完整重新申请证书的完整流程如下:

  1. 验证域名归属(域名在阿里云上, 所以这里使用阿里云的账户授权ak来验证域名归属, 也可以使用网站目录, 具体查看acme中文说明)
  2. 申请证书
  3. 部署nginx
  4. 部署七牛
  5. 发送钉钉机器人通知

前置条件

  1. 申请阿里云的账号资源授权用于域名归属验证(如果使用网站目录可跳过), 保存账号AccessKey IDAccessKey Secret备用
  2. 保存七牛密钥AccessKey/SecretKey备用
  3. 申请钉钉机器人,指定鉴权为关键字, 保存机器人URL和指定的关键字备用

准备工作

  1. 安装最新acme.sh, 该文档使用的版本是v3.0.8
  2. 命令行内export上述备用的变量,用于命令执行
export Ali_Key="<key>"  ;阿里AccessKey ID
export Ali_Secret="<secret>" ;阿里AccessKey Secret
export QINIU_AK="<ak>" ;七牛AccessKey
export QINIU_SK="<sk>" ;七牛SecretKey
export QINIU_CDN_DOMAIN="cdn1.example.com cdn2.example.com" ;七牛需要部署的cdn域名, 多个域名空格分割
export DINGTALK_WEBHOOK='https://oapi.dingtalk.com/robot/send?access_token=b05ccexxxxx' ;钉钉机器人url
export DINGTALK_KEYWORD=acme ;钉钉机器人鉴权机器人

相关官方文档
user-aliyun-domain-api-to-automatically-issue-cert
deploy-your-certificate-to-qiniucom
set-notification-for-dingtalkcom

执行命令

相关官方文档查看: acme.sh说明

生成证书

# 使用let's encrypt服务生成证书
# 新版acme默认使用 ZeroSSL, 所以需要手动指定证书服务
# 需要先完成准备工作中相关的export
./acme.sh --server letsencrypt --issue \
--dns dns_ali -d *.example.com 

如果提示可能是未正确保存阿里的key, 可以手动创建account.conf文件, 具体内容如下

# 日志文件
LOG_FILE="/root/.acme.sh/acme.sh.log"
#LOG_LEVEL=1

#AUTO_UPGRADE="1"

#NO_TIMESTAMP=1

SAVED_Ali_Key='<ali key>'
SAVED_Ali_Secret='<ali secret>'

部署nginx

# key-file, fullchain-file 后为nginx对应证书的文件名, 用于将证书覆盖在此位置
./acme.sh --install-cert -d *.example.com \
--key-file /etc/nginx/cert/test_ssl/_.example.com.key \
--fullchain-file /etc/ngxin/cert/test_ssl/fullchain.cer \
--reloadcmd "nginx -s reload"

部署七牛

# 需要先完成准备工作中相关的export
./acme.sh --deploy -d *.example.com --deploy-hook qiniu

执行完成后查看相应域名的https配置如果正在处理中说明配置成功

发送钉钉通知

# 需要先完成准备工作中相关的export
./acme.sh --set-notify --notify-hook dingtalk

执行成功后钉钉相应群内会收到测试信息, 表示钉钉配置成功

[acme]
Hello, this is a notification from acme.sh by test_web

If you receive this message, your notification works.

流程收尾

  1. 创建crontab定时任务, 添加如下指令
56 * * * * /root/.acme.sh/acme.sh --cron --home "/root/.acme.sh" > /dev/null
  1. 搞定, 完结收工.