在这篇博客中,我们将介绍如何使用 ACME.sh 来生成 SSL 证书,并通过 Cloudflare DNS 实现自动验证。

步骤 1:创建用户和目录

首先,我们需要为 acme 配置一个新用户,并为其创建专用目录。在终端中运行以下命令:

注意:CF Token需要填写在运行的shell配置中,本文以zsh为例,bash修改.bashrc即可

useradd domain-acme
mkdir /home/domain-acme
sudo chown -R domain-acme:domain-acme /home/domain-acme
chsh -s $(which zsh) domain-acme
cp ~/.zshrc /home/domain-acme/

这将完成以下工作:

  • 创建一个新用户 domain-acme

  • 创建一个新目录 /home/domain-acme 并将其所有权分配给用户 domain-acme

  • 将当前用户的 .zshrc 配置文件复制到新用户的家目录,以便继承相同的环境设置。

步骤 2:安装 ACME.sh

ACME.sh 是一个轻量级的、支持 Let's Encrypt 证书管理的工具。你可以通过以下命令来安装它:

curl https://get.acme.sh | sh -s email=my@email.com

这行命令会下载并安装 ACME.sh,并自动配置电子邮件地址(请根据你的需要替换 my@email.com)。

步骤 3:设置 Let's Encrypt 作为默认 CA

安装完成后,我们需要设置 Let's Encrypt 为默认的证书颁发机构。通过运行以下命令:

~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

这会告诉 ACME.sh 使用 Let's Encrypt 来生成证书。

步骤 4:配置 Cloudflare API 凭证

为了通过 Cloudflare 的 DNS API 自动验证证书,我们需要设置一些环境变量,这些变量包括 Cloudflare 的 API 密钥和帐户信息。请替换以下信息:

export CF_Token="pWfu-YEUC"
export CF_Zone_ID="541c9631"
export CF_Account_ID="98412"
  • CF_Token:Cloudflare API 的身份验证令牌。

  • CF_Zone_ID:Cloudflare 域的 ID。

  • CF_Account_ID:Cloudflare 帐户的 ID。

这些信息可以在你的 Cloudflare 账户中找到。

步骤 5:使用 DNS-01 验证方法申请证书

使用 Cloudflare DNS 作为验证方法后,我们可以通过以下命令为域名申请 SSL 证书:

~/.acme.sh/acme.sh --issue \
  --dns dns_cf \
  -d pkgx.de \
  -d '*.pkgx.de'
  • --dns dns_cf:指定使用 Cloudflare DNS API 进行 DNS-01 验证。

  • -d pkgx.de:指定你要为其生成证书的主域名。

  • -d '*.pkgx.de':指定你希望为子域名(如 *.pkgx.de)也申请证书。

执行此命令后,ACME.sh 会自动在 Cloudflare 上创建 DNS 记录并验证。

步骤 6:完成证书申请

如果验证成功,你将会看到类似下面的输出:

[Thu Mar 1 10:00:00 UTC 2026] Congrats, your certificate is ready:
[Thu Mar 1 10:00:00 UTC 2026] Your cert is in  /root/.acme.sh/pkgx.de/fullchain.pem
[Thu Mar 1 10:00:00 UTC 2026] Your cert key is in  /root/.acme.sh/pkgx.de/pkgx.de.key

你可以在指定路径找到生成的证书和私钥。