使用acme.sh通过cloudflare续期域名证书

📘 教程 · 13 天前

在当今互联网环境中,SSL/TLS 证书是保障网站安全的必备工具。Let's Encrypt 提供了免费的 SSL/TLS 证书,而 acme.sh 是一个轻量级的工具,可以帮助我们轻松申请和管理这些证书。本文将详细介绍如何使用 acme.sh 通过 Cloudflare DNS 验证实现域名证书的申请和自动续期。

什么是 acme.sh?

acme.sh 是一个基于 Shell 脚本的 ACME 协议客户端,专为自动化证书管理而设计。它支持多种 DNS 提供商(包括 Cloudflare),并可以轻松集成到现有的服务器环境中。

准备工作

在开始之前,请确保:

你拥有一个域名,并且该域名已通过 Cloudflare 管理。

你有一台运行 Linux 的服务器(如 Ubuntu 或 CentOS)。

你已获取 Cloudflare 的 API Token。

安装 acme.sh

首先,我们需要在服务器上安装 acme.sh。

安装命令:

curl https://get.acme.sh | sh
source ~/.bashrc

安装完成后,acme.sh 会自动创建一个 Cron 任务,用于检查证书的续期。

获取 Cloudflare API Token

为了通过 Cloudflare 完成 DNS 验证,我们需要获取 API Token。

步骤:

  • 登录 Cloudflare 控制台。
  • 进入 My Profile > API Tokens。
  • 点击 Create Token,选择 Edit zone DNS 模板。
  • 选择需要管理的域名,生成 Token 并保存。

配置 Cloudflare API Token

将生成的 API Token 设置为环境变量,以便 acme.sh 使用。

设置环境变量:

export CF_Token="your_cloudflare_api_token"
export CF_Account_ID="your_cloudflare_account_id"

申请证书

使用以下命令为你的域名申请证书。如果需要泛域名证书(通配符证书),可以使用 *.example.com。

申请单域名证书:

acme.sh --issue --dns dns_cf -d example.com

申请泛域名证书:

acme.sh --issue --dns dns_cf -d example.com -d *.example.com

acme.sh 会自动完成 DNS 验证,并生成证书文件。

证书文件的位置

证书文件默认存储在 ~/.acme.sh/example.com/ 目录下。以下是主要文件:

  • example.com.cer: 证书文件。
  • example.com.key: 私钥文件。
  • fullchain.cer: 完整的证书链文件(包含中间证书)。

安装证书

将证书文件复制到 Web 服务器的配置目录中,以便使用。

示例:将证书复制到 Nginx 目录

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

参数说明:

  • --key-file: 指定私钥文件的输出路径。
  • --fullchain-file: 指定完整证书链文件的输出路径。
  • --reloadcmd: 指定证书更新后执行的命令(如重启 Web 服务器)。

自动续期

acme.sh 默认会自动续期证书,无需额外配置。它会每天检查证书的有效期,并在到期前自动续期。

手动测试续期:

acme.sh --renew -d example.com --force

验证证书

你可以使用以下命令验证证书是否已正确安装:

查看证书内容:

openssl x509 -in /etc/nginx/ssl/fullchain.cer -text -noout

检查证书有效期:

openssl x509 -in /etc/nginx/ssl/fullchain.cer -enddate -noout

常见问题

  1. 证书文件是隐藏的?
    证书文件默认存储在 ~/.acme.sh/ 目录下,这是一个隐藏文件夹。可以使用 ls -la ~/.acme.sh 查看。
  2. 如何删除证书?
    如果需要删除某个域名的证书,可以使用以下命令:
acme.sh --remove -d example.com
  1. 如何更改默认存储路径?
    可以在申请证书时使用 --home 参数指定存储路径:
acme.sh --issue --dns dns_cf -d example.com --home /opt/acme

总结

通过 acme.shCloudflare DNS 验证,我们可以轻松实现域名证书的申请和自动续期。这种方法不仅简单高效,还完全免费。无论是单域名证书还是泛域名证书,acme.sh 都能完美支持。

Linux
Theme Jasmine by Kent Liao