使用 acme.sh 和 Cloudflare 获取免费 HTTPS 证书

使用 acme.sh 和 Cloudflare 获取免费 HTTPS 证书
怀光1. 环境准备
- 一个域名(已托管在 Cloudflare)
- 开通 Cloudflare 账号并获取 API Token
2. 安装 acme.sh
首先,我们需要安装 acme.sh
。这个工具使用非常简单,可以帮我们直接申请 Let’s Encrypt 或 ZeroSSL 等的免费证书。
运行以下命令来安装 acme.sh
:
1 | curl https://get.acme.sh | sh |
这条命令会将 acme.sh
安装到你的主目录下的 .acme.sh
目录中,并且自动配置好环境变量。
检查安装是否成功:
1 | ~/.acme.sh/acme.sh --version |
如果显示版本号,那说明安装成功!
3. 配置 Cloudflare API Token
在 Cloudflare 获取 API Token:
- 登录到你的 Cloudflare 账号。
- 进入 API Tokens 页面,创建一个新的 Token。
- 为 Token 设置以下权限:
- Zone:DNS - Edit
- 选择需要的域名,或者可以直接选择所有域。
生成后,复制这个 Token,我们接下来会用到它。
设置 Cloudflare API Token 到 acme.sh:
在终端中,运行以下命令,将 Token 添加到 acme.sh
的配置中:
1 | export CF_Token="你的API Token" |
这一步完成后,acme.sh 就可以通过 Cloudflare API 自动配置你的域名 DNS 记录来验证域名所有权了。
4. 使用 acme.sh 申请证书
接下来就是证书的申请了,这里我们以 yourdomain.com
为例。
1 | ~/.acme.sh/acme.sh --issue --dns dns_cf -d yourdomain.com -d *.yourdomain.com |
上面的命令会为 yourdomain.com
和 *.yourdomain.com
(泛域名)申请证书。这样就可以用于你的主域名和所有子域名了!
证书生成后,acme.sh 会自动将证书文件存放到 ~/.acme.sh/yourdomain.com/
目录中。
5. 配置 Nginx 使用 HTTPS
将证书文件安装到 Nginx 目录:
1 | ~/.acme.sh/acme.sh --install-cert -d yourdomain.com \\ |
这条命令会把证书文件复制到 /etc/nginx/ssl/
下,并且每次更新证书后会自动重载 Nginx 配置。
编辑 Nginx 配置文件:
打开你的网站配置文件,比如 /etc/nginx/conf.d/yourdomain.com.conf
,增加 HTTPS 配置:
1 | server { |
保存并退出后,重启 Nginx 以应用新的配置:
1 | sudo systemctl restart nginx |
6. 设置证书自动续期的定时任务
Let’s Encrypt 的证书有效期为 90 天,为了避免证书过期,需要设置自动续期任务。
使用 acme.sh 的自动续期功能:
acme.sh
会默认添加一个自动续期的任务,检查所有证书的有效期并自动更新。所以一般情况下我们不需要手动创建定时任务。如果你想手动确认,可以执行以下命令:
1 | ~/.acme.sh/acme.sh --cron --home ~/.acme.sh |
这条命令会检查证书是否需要更新,并在需要时自动更新证书。
7. 检查 HTTPS 是否生效
完成以上步骤后,访问 https://yourdomain.com
检查是否生效。浏览器应该会显示安全的 HTTPS 标志。