域名管理: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 DNSCloudflare 服务
适用场景不需要 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 的所有服务