在当今互联网环境中,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 任务,用于检查证书的续期。
获取 Global API Key
在 Cloudflare 个人资料页面 (Profile Page) 的 API Tokens 部分获取你的 全局 API 密钥 (Global API Key):
- 点击 "View"(查看)全局 API 密钥;
- 验证 Cloudflare 密码;
- 密钥将会显示出来。
全局 API 密钥 是一个 32 个字符的十六进制字符串,你需要通过以下方式提供给 acme.sh:
export CF_Key="******************"
export CF_Email="[email protected]"
申请证书
使用以下命令为你的域名申请证书。如果需要泛域名证书(通配符证书),可以使用 *.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
都能完美支持。