Linux 中使用 acme.sh 申请泛域名证书

本文将介绍如何在 Ubuntu 系统中使用 acme.sh 通过 cloudflare 的 api 方式申请泛域名。

为什么使用泛域名证书?

泛域名证书和单域名证书的区别在于它们可以保护的域名范围不同。单域名证书只能保护一个具体的域名,而泛域名证书则可以保护一个域名下的所有子域名。

举例来说,假设你有一个域名 example.com,单域名证书只能保护该域名,而泛域名证书可以保护 example.com 及其所有子域名,例如 blog.example.com、shop.example.com 等。

使用泛域名证书可以大大简化证书管理工作,特别是当你有多个子域名需要保护时。使用单域名证书需要为每个子域名分别申请和维护证书,而泛域名证书可以一次申请并保护所有子域名。

因此推荐使用泛域名证书。

安装 acme.sh

安装很简单, 一个命令:

1
curl https://get.acme.sh | sh -s [email protected]

生成 SSL

创建 Token

根据官方 CloudFlare Option 介绍,推荐使用限制权限的 Token,申请地址为:cloudflare api token

cloudflare 右上角可以切换成中文

依次选择【创建令牌】/ 编辑区域 DNS【使用模板】,如图所示:

image-20240409222129668

其中,该 Token 需要有 DNS 的【编辑】权限。

单击后,生成的 token 是一个长度为 40 的字符串,示例如下:

1
Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs

开始生成

在 shell 中执行下列命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 设置环境变量
export CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs"

# 如果是单个 DNS 区域,需要设置区域 id, 该 id 可以进入到具体的 DNS 配置中右则查找
export CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4"

# 如果是多个 DNS 区域,需要设置账户 id 方便 acme.sh 识别,区域 ID 可不设置
# 账户 id 可以在登陆后,跳转到主页 https://dash.cloudflare.com/,最后一级即为 id
# 例如:https://dash.cloudflare.com/763eac4f1bcebd8b5c95e9fc50d010b4
export CF_Account_ID="763eac4f1bcebd8b5c95e9fc50d010b4"

# 进入到 .acme.sh 目录
cd ~/.acme.sh

# 生成证书
./acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'

参考

  1. 说明 · acmesh-official/acme.sh Wiki (github.com)

  2. dnsapi · acmesh-official/acme.sh Wiki (github.com)