域名管理:Cloudflare DNS托管与SSL证书配置
记录域名管理一些操作,涵盖了使用Cloudflare进行DNS解析与托管,对比并介绍了通过Cloudflare服务与acme.sh脚本两种方式申请和自动化管理SSL/TLS证书的完整步骤。

· 3 min read
域名相关 #
本篇记录一下域名相关的操作吧,包括到cf托管,申请与安装SSL证书等。
DNS解析和将域名托管到cloudflare #
感谢Namesilo/Cloudflare域名注册和解析设置教程 | SaraKale’s blog
到 Cloudflare 添加你的站点,选择 Free 免费计划。
在下一页上,您需要选择首选的 CDN 计划。选择 Free 计划。单击其图标和确认计划按钮继续:
如果之前已经做过解析就可以看到现有的DNS记录。
这里先不用管,继续下一步。
可以看到给了两个NS服务器,回到域名提供商后台更改NS服务器。
NameCheap更改ns服务器参考官方教程Title Unavailable | Site Unreachable,其他域名服务商大同小异。
申请TLS\SSL证书 #
有两种方式,目前选择cloudflare开启代理的模式
- 自动续签:
- 使用cloudflare的服务,开启小黄云,就可以使用一种泛域名证书,只能当做源站和cloudflare握手的凭证,其他的不认。
cloudflare的服务 #
下面采用cloudflare的服务,也是一份cloudflare的初步探索的记录
DNS管理 #
可以在DNS界面管理DNS解析,以及管理是否开启小黄云代理
SSL\TLS证书 #
- 灵活:web浏览器和cloudflare之间采用443HTTPS,cloudflare和cloudflare之间采用80HTTP
- 完全:使用其他未公开认证的SSL证书时采用,源服务器必须配置 SSL 证书,但 Cloudflare 不验证证书的有效性(例如,可以是自签名证书或过期证书)。
- 完全(严格):客户端到 Cloudflare:HTTPS(使用 Cloudflare Universal SSL 证书)。 Cloudflare 到源服务器:HTTPS(加密)。源服务器必须配置有效的 SSL 证书,该证书必须由受信任的 CA 机构签发或为 Cloudflare Origin CA 证书,并且证书中的域名必须与请求的域名匹配。Cloudflare 会验证证书的有效性,包括有效期、颁发机构和域名。
可以在源服务器页面申请 Cloudflare Origin CA 证书,并将该证书放到服务器上。源证书仅对Cloudflare与源服务器之间的加密有效。
Under Attack #
- 可以在安全性-设置里打开Under Attack模式,强制开启验证。
使用 acme.sh DNS 验证的方式签发 Let’sEncrypt 证书 #
参考:使用 acme.sh DNS 验证的方式签发 Let’sEncrypt 证书
acme.sh 是一个用来自动获取和管理 SSL/TLS 证书的开源脚本,可以从 Let’s Encrypt 等多个 CA 获取免费的证书。结合使用 Cloudflare DNS 验证的模式申请泛域名证书,并自动续签。
2025-07-17更新
方案有改进,请看新购一台8GB的VDS。 主要优化了一台vps多个域名的配置方式,如果是单个域名,以下方案相同。
Cloudflare API #
使用 Cloudflare DNS 模式需要准备:
- Zone ID
- Account ID
- API Token
获取 Zone ID, Account ID #
这两种 ID 直接在 Overview 页就能找到。
获取 API Token #
Overview 页点击 获取您的 API 令牌
进入 API Tokens 页。
点击 API Tokens 项旁边 创建令牌
按钮,接着选择 编辑区域 DNS
的模板,点击 使用模板
。
区域资源
里选择需要签发的域名,
在 客户端 IP 地址筛选
里建议写下 acme.sh 所在的主机做为白名单,需要注意,如果服务器有 ipv6 地址,则也需要添加,因为有可能会 ipv6 优先访问。
击 继续以显示摘要
, 确认没问题后最后点击 创建令牌
。
此时就会出现一个 Token,,即 CF_Token,拷贝备用。
注意 #
- 注意新增域名时,需要更改API Token所包含的域名
- 注意有多台机器时,需要新增机器的IP到白名单。
一个完整的演示 #
感谢:使用 acme.sh 自动签发和更新证书 - atpX
为了使整个流程更加清晰(方便自己操作),这里贴一个自己平时使用 acme.sh 申请证书的完整流程。
- 申请方式:DNS 认证(使用 Cloudflare API)
- 申请证书 CA:Let’s Encrypt
- 申请证书类型:RSA + ECC 两个通配符证书
- **同一台主机多个域名的情况
后续申请证书的命令,都是在 root 用户下执行的,请先使用 su
切换到 root 用户。
# 进入root用户
su
# 安装 acme.sh
curl https://get.acme.sh | sh
# 刷新 shell 变量配置
source ~/.bashrc
# 导入 Cloudflare API Token
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Zone_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 设置默认 CA 为 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
# 签发 RSA 证书
acme.sh --issue --dns dns_cf -d xxx.xyz -d *.xxx.xyz --keylength 2048
# 安装 RSA 证书到指定路径
acme.sh --install-cert -d domain.tld \
--key-file /path/to/ssl/domain.tld_private.key \
--fullchain-file /path/to/ssl/domain.tld_chain.pem \
--capath /path/to/ssl/domain.tld_ca.pem \
--reloadcmd "service nginx reload"
# 签发 ECC 证书,若不需要,跳过即可
acme.sh --issue --dns dns_cf -d domain.tld -d *.domain.tld --keylength ec-256
# 安装 ECC 证书到指定路径
acme.sh --install-cert -d domain.tld --ecc \
--key-file /path/to/ssl/ecc_domain.tld_private.key \
--fullchain-file /path/to/ssl/ecc_domain.tld_chain.pem \
--capath /path/to/ssl/ecc_domain.tld_ca.pem \
--reloadcmd "service nginx reload"
###############################第二个域名#####################################################################
# 取消环境变量
unset CF_Token
unset CF_Account_ID
unset CF_Zone_ID
# 至此证书安装完毕
# 下面是同一台主机申请第二个域名证书
# 导入另一个 Cloudflare API Token
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Zone_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 新建一个文件夹作为 config home,默认会把所有文件存在这里
mkdir /root/.acme2
# 设置默认 CA 为 Let's Encrypt
acme.sh --config-home /root/.acme2 --set-default-ca --server letsencrypt
# 签发 RSA 证书
acme.sh --config-home /root/.acme2 --issue --dns dns_cf -d domain.tld -d *.domain.tld --keylength 2048
# 安装 RSA 证书到指定路径
acme.sh --config-home /root/.acme2 \
--install-cert -d domain.tld \
--key-file /path/to/ssl/domain.tld_private.key \
--fullchain-file /path/to/ssl/domain.tld_chain.pem \
--capath /path/to/ssl/domain.tld_ca.pem \
--reloadcmd "service nginx reload"
# 签发 ECC 证书,若不需要,跳过即可
acme.sh --config-home /root/.acme2 --issue --dns dns_cf -d domain.tld -d *.domain.tld --keylength ec-256
# 安装 ECC 证书到指定路径
acme.sh --config-home /root/.acme2 \
--install-cert -d domain.tld --ecc \
--key-file /path/to/ssl/ecc_domain.tld_private.key \
--fullchain-file /path/to/ssl/ecc_domain.tld_chain.pem \
--capath /path/to/ssl/ecc_domain.tld_ca.pem \
--reloadcmd "service nginx reload"
# 手动添加另一个 cron 任务
# crontab -e
50 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --config-home "/root/.acme2" > /dev/null
两个服务的比较 #
优点 #
- acme.sh` + Let’s Encrypt + Cloudflare DNS
- 自动化:
acme.sh
脚本可以自动完成证书的申请、验证和续期过程。 - 无需开放 80/443 端口:使用 DNS 验证方式,无需在服务器上开放 80 或 443 端口,提高了安全性。
- 不依赖 Cloudflare 代理:这种方式只使用 Cloudflare 的 DNS 服务,不依赖 Cloudflare 的代理服务
- 自动化:
- Cloudflare
- Universal SSL:Cloudflare 免费提供 Universal SSL 证书,可以快速启用 HTTPS。
- Origin CA 证书:Cloudflare 提供 Origin CA 证书,可以实现 Cloudflare 到源服务器的加密连接(严格模式)。
缺点 #
- acme.sh` + Let’s Encrypt + Cloudflare DNS
- 配置相对复杂:相比于使用 Cloudflare 的一键 SSL 功能,这种方式需要手动配置
acme.sh
脚本和服务器。 - 不提供 DDoS 防护和其他 Cloudflare 功能:这种方式只使用了 Cloudflare 的 DNS 服务,不提供 DDoS 防护、CDN 加速、WAF 等其他 Cloudflare 功能。
- 配置相对复杂:相比于使用 Cloudflare 的一键 SSL 功能,这种方式需要手动配置
- Cloudflare
- Origin CA 证书浏览器不信任:Cloudflare 的 Origin CA 证书不被浏览器信任,需要配合 Cloudflare 的代理服务使用。
应用场景比较 #
特性 | acme.sh + Let’s Encrypt + Cloudflare DNS | Cloudflare 服务 |
---|---|---|
适用场景 | 不需要 Cloudflare 代理 需要在其他服务上使用证书 希望完全控制证书 | 需要 DDoS 防护需要 CDN 加速需要 WAF希望隐藏服务器 IP 需要简单易用的 SSL 配置 |
SSL 证书 | Let’s Encrypt 免费证书 | Cloudflare Universal SSL 或 Origin CA 证书 |
泛域名证书 | 支持 | 支持(Origin CA 证书需配合代理使用) |
服务器 IP | 暴露 | 隐藏 |
DDoS 防护 | 无 | 有 |
CDN 加速 | 无 | 有 |
WAF | 无 | 有 |
配置难度 | 相对复杂 | 简单 |
控制权 | 完全控制 | 部分控制 |
依赖性 | 仅依赖 Cloudflare DNS 和 Let’s Encrypt | 依赖 Cloudflare 的所有服务 |