在当今互联网环境中,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
常见问题
- 证书文件是隐藏的?
证书文件默认存储在~/.acme.sh/
目录下,这是一个隐藏文件夹。可以使用ls -la ~/.acme.sh
查看。 - 如何删除证书?
如果需要删除某个域名的证书,可以使用以下命令:
acme.sh --remove -d example.com
- 如何更改默认存储路径?
可以在申请证书时使用 --home 参数指定存储路径:
acme.sh --issue --dns dns_cf -d example.com --home /opt/acme
总结
通过 acme.sh
和 Cloudflare DNS
验证,我们可以轻松实现域名证书的申请和自动续期。这种方法不仅简单高效,还完全免费。无论是单域名证书还是泛域名证书,acme.sh
都能完美支持。