使用 acme.sh DNS 验证的方式签发 Let'sEncrypt 证书
目录
acme.sh 是一个用来自动获取和管理 SSL/TLS 证书的开源脚本, 可以从 Let’s Encrypt 等多个 CA 获取免费的证书, 这次记录下使用 Cloudflare DNS 验证的模式如何进行申请泛域名证书. 官方文档。
准备 #
首先, 使用 Cloudflare DNS 模式需要有三样东西:
- Zone ID
- Account ID
- API Token
获取 Zone ID, Account ID #
这两种 ID 直接在 Overview 页就能找到
获取 API Token #
Overview 页点击 Get your API token
进入 API Tokens 页, 链接为
https://dash.cloudflare.com/profile/api-tokens
点击 API Tokens 项旁边 Create Token
按钮;
接着选择 Edit zone DNS 的模板, 点击 Use template
(使用模板)
Zone Resources 里选择需要签发的域名
Client IP Address Filtering 里建议写下 acme.sh 所在的主机做为白名单
击 Continue to summary
, 确认没问题后最后点击 Create Token
此时就会出现一个 Token, 即 CF_Token, 拷贝备用
安装脚本 #
curl https://get.acme.sh | sh -s email=name@gmail.com
其中 name@gmail.com
需要修改为自己的邮箱, 用来接受 Let’s Encrypt 的邮件通知
安装后的设置 #
安装完毕后重新加载 bash
source ~/.bashrc
开启自动更新
acme.sh --upgrade --auto-upgrade
设置环境变量, 也就是准备的那三样, 可以准备好在一个文本编辑器里, 拷贝粘贴依次执行:
export CF_Token="<拷贝的 API Token>"
export CF_Account_ID="<拷贝的 Account ID>"
export CF_Zone_ID="<拷贝的 Zone ID>"
例如:
export CF_Token="w8l4eMsjjWGR4NTvXMsCPXjYRiixSbbzS"
export CF_Zone_ID="f7dcaQaxd6eae54Lde8f676c03ef5"
export CF_Account_ID="3f9fd1e48c5oOocZzb6612Pb16f11d49a15"
使用 Cloudflare DNS 验证签发证书 #
将 CA 服务器改成 Let’s Encrypt #
acme.sh --set-default-ca --server letsencrypt
开始签发证书 #
这里以 uuphy.com 为例, -d 后面接上域名, 可以签发多个, 这里我签了二级域名(uuphy.com
) 和所有三级域名(*.uuphy.com
)
acme.sh --issue --dns dns_cf -d uuphy.com -d *.uuphy.com
接下来就可以 .acme.sh
目录下找到签好的证书啦
需要指定位置可以加上以下参数
acme.sh --issue --dns dns_cf -d uuphy.com -d *.uuphy.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
验证 cron 自动续签任务 #
证书在 60 天以后会自动更新, 无需干预, 可以输入以下命令进行验证:
crontab -l