记录一些常用的函数和瞎折腾的过程……

在Cloudflare中创建DNS令牌

提醒:本文最后更新于 192 天前,文中所描述的信息可能已发生改变,请谨慎使用。

本人在使用acme.sh来申请域名证书里,一般使用DNS api方式获取,这样比较方便,验证解析域名完全自动化完成。

我的一些域名现在已经转移到Cloudflare,看着文档说明,发现有两种方式,第一种就是全局API密钥,它具有最大权限,可以执行任意操作,但如果泄漏的话风险就非常大,官方一般不建议使用。第二种就是使用用户可自定义权限的API令牌,它可以按需给权限,将使用权限限定在指定的范围内,安全性较好,建议使用,即使泄漏也不影响全局。

一、获取令牌token具体方法如下:

1、登录Cloudflare,打开“用户 API 令牌”页面(https://dash.cloudflare.com/profile/api-tokens),点击创建令牌;

2、选择“编辑区域 DNS”,点击“使用模板”;

3、在详细选项里,“权限”一栏中,依次选择“区域”——“DNS”——“编辑”,指定这个令牌只对编辑DNS生效;

4、在“区域资源”一栏中,依次选择“包括”——“所有区域”,指定对所有域名有编辑权限;

5、如果客户端的IP是固定的,可以在“客户端 IP 地址筛选”一栏中,指定客户端IP,这样即使token外泄了,但因为客户端来源不在列表中,也不能访问;

6、“TTL”一栏中,可以指定这个令牌的生存周期,我要长期使用,所以不用理会;

继续下一步操作,就生成了对所有域名的DNS有编辑权限的令牌了,这就是我们在acme.sh中需要的CF_Token:

CF_Token="YXjpG9AnfQmuX5Ss9M9qaNab6SQwme3HWXNDzRWs"

二、获取CF_Zone_ID或CF_Account_ID的具体方法如下:

在acme.sh中,DNS api方式申请证书除了需要token,还需要CF_Zone_ID或CF_Account_ID。我要对账号下的所有的域名有编辑权限,需要CF_Account_ID配合token;若只想对指定的单个域名进行编辑,请使用CF_Zone_ID配合token。这个CF_Account_ID和CF_Zone_ID都很容易获取。点开首页,随便点击一个你托管在此的域名,在右侧会显示有当前域名的“区域 ID”和“帐户 ID”,这就分别对应你所需要的CF_Zone_ID和CF_Account_ID。

这样我们就有了:

CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
CF_Account_ID="763eac4f1bcebd8b5c95e9fc50d010b4"

三、DNS api方式申请证书:

回到acme.sh中,我们就可以使用DNS api方式申请域名证书了。

a、仅对指定的某个域名有权限使用DNS api方式申请证书(注意CF_Zone_ID为指定域名下的区域 ID,每个域名均不同,所以可以限定权限为某一个托管的域名):

export CF_Token="YXjpG9AnfQmuX5Ss9M9qaNab6SQwme3HWXNDzRWs"
export CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'

b、对账户下所有域名有权限使用DNS api方式申请证书:

export CF_Token="YXjpG9AnfQmuX5Ss9M9qaNab6SQwme3HWXNDzRWs"
export CF_Account_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'