1. Posts/

使用 acme.sh DNS 验证的方式签发 Let'sEncrypt 证书

·阅读预计 1 分钟
Cloudflare acme letsencrypt bash shell
小北
作者
小北
目录

acme.sh 是一个用来自动获取和管理 SSL/TLS 证书的开源脚本, 可以从 Let’s Encrypt 等多个 CA 获取免费的证书, 这次记录下使用 Cloudflare DNS 验证的模式如何进行申请泛域名证书. 官方文档

准备 #

首先, 使用 Cloudflare DNS 模式需要有三样东西:

  1. Zone ID
  2. Account ID
  3. 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

Related

将域名从 Namesilo 转移到 Cloudflare
·阅读预计 1 分钟
域名 Cloudflare 记录
Cloudflare Tunnel 使用笔记
·阅读预计 1 分钟
Cloudflare cloudflared Tunnel 笔记
解决 Node 下 Puppeteer 在 Docker 容器内无法正常启动的问题
·阅读预计 2 分钟
Puppeteer Node Nodejs Docker