使用 acme.sh + Cloudflare 申请 Let’s Encrypt SSL 证书

发表于 2025-09-09 14:19:08 分类于 默认分类 阅读量 106

使用 acme.sh + Cloudflare 申请 Let’s Encrypt SSL 证书

在生产环境中,部署 HTTPS 证书是必不可少的。本文介绍如何通过 acme.sh 客户端,结合 Cloudflare DNS API,自动申请并续期 Let’s Encrypt 免费 SSL 证书。


1. 安装 acme.sh

curl https://get.acme.sh | sh

安装后,acme.sh 会放在 ~/.acme.sh/ 目录,并自动加入 ~/.bashrc

验证是否安装成功:

acme.sh --version

2. 配置 Cloudflare API Token

2.1 创建 API Token

  1. 登录 Cloudflare Dashboard

  2. 进入 My Profile → API Tokens

  3. 创建一个 自定义 Token,权限配置:

    • Zone → DNS → Edit
    • Zone → Zone → Read
  4. 限制作用域仅包含你要申请证书的域名,更安全

  5. 保存 API Token

2.2 设置环境变量

~/.bashrc~/.zshrc 添加:

export CF_Token="你的_API_Token"
export CF_Account_ID="你的_Account_ID"

让环境变量生效:

source ~/.bashrc

3. 切换默认 CA 到 Let’s Encrypt

acme.sh 默认 CA 可能是 ZeroSSL,我们改为 Let’s Encrypt:

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

查看当前 CA:

acme.sh --show-ca

4. 申请证书

xzsoft.com 为例,申请主域名和通配符证书:

acme.sh --issue --dns dns_cf -d xzsoft.com -d "*.xzsoft.com"

acme.sh 会通过 Cloudflare API 自动添加 _acme-challenge TXT 记录,无需手动操作。


5. 安装证书(Nginx 示例)

将证书拷贝到指定目录并配置自动 reload:

acme.sh --install-cert -d xzsoft.com \
--key-file       /etc/nginx/ssl/xzsoft.com.key \
--fullchain-file /etc/nginx/ssl/xzsoft.com.crt \
--reloadcmd     "systemctl reload nginx"

修改 Nginx 配置:

server {
    listen 443 ssl;
    server_name xzsoft.com *.xzsoft.com;

    ssl_certificate     /etc/nginx/ssl/xzsoft.com.crt;
    ssl_certificate_key /etc/nginx/ssl/xzsoft.com.key;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

6. 自动续期

acme.sh 会自动添加到 cron,每天检测证书是否需要续期。无需额外配置。

查看任务:

crontab -l

✅ 总结

通过 acme.sh + Cloudflare DNS API + Let’s Encrypt,可以轻松实现:

  • 自动申请主域名与通配符证书
  • 自动续期,无需人工干预
  • 与 Nginx/Apache 等无缝集成

这样,你的站点就能始终保持 HTTPS 安全访问。 🚀


要不要我帮你再写一个 常见错误排查(ZeroSSL / DNS 验证失败 / API 权限问题) 的补充章节?

正物博客
一路向前,山海自平