From:https://shiping.date/82.html
前言:之前写过:使用acme.sh脚本申请证书,这种方法使用的是cloudflare global api全局令牌,此令牌权限比较大,对于申请ssl证书来说有点大材小用,也存在一些不安全性,好在acme.sh脚本作者支持了使用局部令牌申请证书。
本文主要以Debian10为例,介绍使用新的cloudflare api令牌来申请证书,免费域名已不受cloudflare此种方式来申请证书,请使用付费域名。
一、安装配置acme.sh脚本
以root用户ssh登陆到主机,使用下面命令安装配置脚本:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# 更新源并安装socat apt update && apt -y install socat # 安装脚本 wget -qO- get.acme.sh | bash # 让脚本在.bashrc文件追加的一行环境变量生效,以后无论在哪里直接使用acme.sh,不用输绝对路径 source ~/.bashrc # 由于最新acme.sh脚本默认ca变成了zerossl,现执行下面命令修改脚本默认ca为letsencrypt acme.sh --set-default-ca --server letsencrypt |
二、配置Cloudflare局部令牌
2.1 创建令牌
根据acme.sh脚本作者提供的文档:使用新的cloudflare api令牌,需要新创建此令牌方可使用:



依照上述图片设置即可,添加区域-DNS-编辑和区域-区域-读取权限,区域资源里面选择包括-账户的所有区域-你的账户。

配置好以后,点击创建令牌,注意此令牌token只会出现一次,切记保存,切记保存,切记保存!!!
2.2 获取账户ID和区域ID
根据acme.sh文档,申请证书可能还需要提供两个ID,其中账户ID必须,区域ID可有可无,根据下图方法获取此两个ID:

下拉,找到API区域:

至此,即准备好了申请证书需要的材料:
|
1 2 3 4 5 6 7 |
# 上面第一步创建的令牌,即为token CF_Token="xxxxxxx" # 根据上图分别获取账户ID和区域ID CF_Account_ID="aaaaaaaa" CF_Zone_ID="bbbbbbbbb" //此项非必须 |
三、申请配置证书
3.1 申请证书
假定你的域名是example.com,执行下面命令申请证书,非root用户也可执行:
|
1 2 3 4 5 6 7 8 |
# 执行此命令设置变量的值,acme.sh脚本执行过程会读取 export CF_Token="xxxxxxx" export CF_Account_ID="aaaaaaa" export CF_Zone_ID="bbbbbbbb" //此项非必须,上面两项需要提供 # 申请证书 acme.sh --issue -d example.com -d *.example.com --dns dns_cf -k ec-256 |
3.2 安装证书到指定位置
假定linux主机里已有/etc/ssl目录,现在要把证书和key安装到此目录下,那么执行下面的命令即可:
|
1 2 3 4 5 |
acme.sh --installcert -d example.com -d *.example.com --fullchain-file /etc/ssl/web.crt --key-file /etc/ssl/web.key --ecc # 用--reloadcmd指定安装证书后的命令 acme.sh --installcert -d example.com -d *.example.com --fullchain-file /etc/ssl/web.crt --key-file /etc/ssl/web.key --ecc --reloadcmd "systemctl restart webserver" |
说明:脚本更新完证书后,会自动依据上面指定的绝对路径将证书和key安装到指定位置,并根据--reloadcmd执行相应的操作。
3.3 证书更新
从letsencrypt申请到的证书有效期是90天,脚本每60天会对证书进行更新,你也可以手动强制更新:
|
1 2 3 4 5 6 7 |
# 查询域名申请证书信息 acme.sh --list # 手动强制更新证书 acme.sh --renew -d example.com -d *.example.com --force --ecc acme.sh --renew -d example.com -d *.example.com --force //非ECC证书使用此命令 |
