域名管理:Cloudflare DNS托管与SSL证书配置

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

Author Avatar

ghung

  ·  3 min read

域名相关 #

本篇记录一下域名相关的操作吧,包括到cf托管,申请与安装SSL证书等。

DNS解析和将域名托管到cloudflare #

感谢Namesilo/Cloudflare域名注册和解析设置教程 | SaraKale’s blog

  1. 到 Cloudflare 添加你的站点,选择 Free 免费计划。

    Pasted%20image%2020250113153620

  2. 在下一页上,您需要选择首选的 CDN 计划。选择 Free 计划。单击其图标和确认计划按钮继续:

    Pasted%20image%2020250113153644

  3. 如果之前已经做过解析就可以看到现有的DNS记录。

    Pasted%20image%2020250113153828

  4. 这里先不用管,继续下一步。

    Pasted%20image%2020250113153859

  5. 可以看到给了两个NS服务器,回到域名提供商后台更改NS服务器。

    Pasted%20image%2020250113153945

  6. NameCheap更改ns服务器参考官方教程Title Unavailable | Site Unreachable,其他域名服务商大同小异。

申请TLS\SSL证书 #

有两种方式,目前选择cloudflare开启代理的模式

  • 自动续签:
  • 使用cloudflare的服务,开启小黄云,就可以使用一种泛域名证书,只能当做源站和cloudflare握手的凭证,其他的不认。

cloudflare的服务 #

下面采用cloudflare的服务,也是一份cloudflare的初步探索的记录

DNS管理 #

可以在DNS界面管理DNS解析,以及管理是否开启小黄云代理

e%2020250113163808

SSL\TLS证书 #

Pasted%20image%2020250113164004

  • 灵活: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与源服务器之间的加密有效。

Pasted%20image%2020250113164800

Under Attack #

  • 可以在安全性-设置里打开Under Attack模式,强制开启验证。
    Pasted%20image%2020250113165205

使用 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 页就能找到。

image

获取 API Token #

Overview 页点击 获取您的 API 令牌 进入 API Tokens 页。

点击 API Tokens 项旁边 创建令牌 按钮,接着选择 编辑区域 DNS 的模板,点击 使用模板。

image

image

区域资源 里选择需要签发的域名,

在 客户端 IP 地址筛选 里建议写下 acme.sh 所在的主机做为白名单,需要注意,如果服务器有 ipv6 地址,则也需要添加,因为有可能会 ipv6 优先访问。

击 继续以显示摘要 , 确认没问题后最后点击 创建令牌。

image

此时就会出现一个 Token,,即 CF_Token,拷贝备用。

image

注意 #
  • 注意新增域名时,需要更改API Token所包含的域名
  • 注意有多台机器时,需要新增机器的IP到白名单。

update_cf_api_token
cf-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
    1. 自动化:acme.sh 脚本可以自动完成证书的申请、验证和续期过程。
    2. 无需开放 80/443 端口:使用 DNS 验证方式,无需在服务器上开放 80 或 443 端口,提高了安全性。
    3. 不依赖 Cloudflare 代理:这种方式只使用 Cloudflare 的 DNS 服务,不依赖 Cloudflare 的代理服务
  • Cloudflare
    1. Universal SSL:Cloudflare 免费提供 Universal SSL 证书,可以快速启用 HTTPS。
    2. Origin CA 证书:Cloudflare 提供 Origin CA 证书,可以实现 Cloudflare 到源服务器的加密连接(严格模式)。

缺点 #

  • acme.sh` + Let’s Encrypt + Cloudflare DNS
    1. 配置相对复杂:相比于使用 Cloudflare 的一键 SSL 功能,这种方式需要手动配置 acme.sh 脚本和服务器。
    2. 不提供 DDoS 防护和其他 Cloudflare 功能:这种方式只使用了 Cloudflare 的 DNS 服务,不提供 DDoS 防护、CDN 加速、WAF 等其他 Cloudflare 功能。
  • Cloudflare
    1. 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 的所有服务