(续)acme.sh脚本使用新cloudflare api令牌申请证书 作者: 毕世平 时间: 2022-06-27 分类: 默认分类 前言:之前写过:[使用acme.sh脚本申请证书](https://shiping.date/18.html "点击访问"),这种方法使用的是`cloudflare global api`全局令牌,此令牌权限比较大,对于申请ssl证书来说有点大材小用,也存在一些不安全性,好在`acme.sh`脚本作者支持了使用局部令牌申请证书。 本文主要以`Debian10`为例,介绍使用新的`cloudflare api`令牌来申请证书,免费域名已不受`cloudflare`此种方式来申请证书,请使用付费域名。 # 一、安装配置acme.sh脚本 以`root`用户ssh登陆到主机,使用下面命令安装配置脚本: # 更新源并安装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令牌](https://github.com/acmesh-official/acme.sh/wiki/dnsapi#using-the-new-cloudflare-api-token-you-will-get-this-after-normal-login-and--scroll-down-on-dashboard-and-copy-credentials "点击访问"),需要新创建此令牌方可使用: ![创建区域API令牌.png](https://shiping.date/usr/uploads/2022/06/1322266866.png) ![使用模板.png](https://shiping.date/usr/uploads/2022/06/898271926.png) ![令牌摘要.png](https://shiping.date/usr/uploads/2022/06/2792239848.png) 依照上述图片设置即可,添加`区域-DNS-编辑`和`区域-区域-读取`权限,区域资源里面选择`包括-账户的所有区域-你的账户`。 ![创建令牌.png](https://shiping.date/usr/uploads/2022/06/858478950.png) 配置好以后,点击`创建令牌`,注意此令牌`token`只会**出现一次,切记保存,切记保存,切记保存!!!** ## 2.2 获取账户ID和区域ID 根据`acme.sh`文档,申请证书可能还需要提供两个ID,其中账户ID必须,区域ID可有可无,根据下图方法获取此两个ID: ![选中相应域名.png](https://shiping.date/usr/uploads/2022/06/1220396612.png) 下拉,找到API区域: ![区域ID.png](https://shiping.date/usr/uploads/2022/06/3762325133.png) 至此,即准备好了申请证书需要的材料: # 上面第一步创建的令牌,即为token CF_Token="xxxxxxx" # 根据上图分别获取账户ID和区域ID CF_Account_ID="aaaaaaaa" CF_Zone_ID="bbbbbbbbb" //此项非必须 # 三、申请配置证书 ## 3.1 申请证书 假定你的域名是`example.com`,执行下面命令申请证书,非`root`用户也可执行: # 执行此命令设置变量的值,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安装到此目录下,那么执行下面的命令即可: 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天会对证书进行更新,你也可以手动强制更新: # 查询域名申请证书信息 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证书使用此命令 ## 参考链接: - [acme.sh DNS文档](https://github.com/acmesh-official/acme.sh/wiki/dnsapi "点击访问") 标签: none
万分感谢作者
感谢作者的博客。其中:
至此,即准备好了申请证书需要的材料:
# 上面第一步创建的令牌,即为token CF_Token="xxxxxxx“ # 根据上图分别获取账户ID和区域ID CF_Account_ID="aaaaaaaa" CF_Zone_ID="bbbbbbbbb" //此项非必须CF_Token="xxxxxxx“中最后一个符号错误地打成了中文。
你观察得好仔细啊,感谢,我待会儿改改看