如何使用cloudflare申请ssl证书

一年前申请的华为云服务器已经是过期了，新的服务器需要全新的 ssl 证书，因为国内的网络环境问题，使用 Certbot 申请 Let's Encrypt 证书比较折磨，开放博客的最初一段时间只能依靠 cloudflare 的免费 cdn 来装作有证书加密的样子……
现在，好时代来临力！只要把域名托管到 cloudflare 就可以用一种更加可靠的方法申请证书了。

本文方法需要命令行权限以及 cloudflare 的 api 令牌

Step 1

把域名托管到 cloudflare。过程略，可以上网搜教程。这就是重其所重，轻其所轻。

Step 2

首先我们需要用 ssh 连接到服务器。然后安装 Certbot，这是一个免费的开源工具，可以帮助我们自动化获取和安装 SSL 证书。

Copy
sudo apt-get update
sudo apt-get install certbot

然后安装 Cloudflare 插件进行自动化 DNS 验证。

Copy
sudo apt-get install python3-certbot-dns-cloudflare

Step 3

然后我们需要在 cloudflare 里申请一个 API 令牌，为之后的 DNS 验证做准备，权限至少需要开 DNS 防火墙读取与编辑、DNS 读取与编辑。（注意一定要保存好令牌）

图片

Step 4

创建一个 ini 文件把 API 令牌保存到服务器上，我比较喜欢用 nano。

Copy
sudo mkdir ~/.secrets
sudo mkdir ~/.secrets/certbot
sudo nano ~/.secrets/certbot/cloudflare.ini

nano 输入内容如下，your-cloudflare-api-token要换成自己的 API 令牌。

Copy
dns_cloudflare_api_token = your-cloudflare-api-token

然后我们要确保凭据文件的权限是安全的。

Copy
sudo chmod 600 ~/.secrets/certbot/cloudflare.ini

Step 5

运行 Certbot 命令，进行自动化的证书申请。

Copy
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
-d example.com \
-d www.example.com

需要把example.com和www.example.com替换为要申请的域名，但是这个命令常常不成功。由于 DNS 记录传播延迟，Let's Encrypt 未能找到所需的 DNS TXT 记录，这个命令就会报错。我们可以增加 DNS 记录传播时间，以确保 TXT 记录有足够的时间传播到所有 DNS 服务器。一般来说，60s 就足够了。

Copy
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
--dns-cloudflare-propagation-seconds 60 \
-d example.com \
-d www.example.com

这样的话，证书申请就大功告成了，每次证书到期后也会自动续期（当然是在 API 令牌过期之前），可谓省心省力。API 令牌过期的话只需要修改cloudflare.ini文件，然后重新运行这个命令就好。

2025/4/28

如果说证书更新后依然显示过期，可以手动重新加载 Web 服务器配置

Copy
sudo systemctl reload nginx

或者

Copy
sudo systemctl reload apache2

就好了

此文由 Mix Space 同步更新至 xLog
原始链接为 https://www.actorr.cn/posts/default/cloudflare_and_certificate