KernelRanch
返回文章列表

免费 HTTPS:Cloudflare 的边缘证书是怎么发下来的

2026-11-10 #Cloudflare

Cloudflare 免费计划自带 Universal SSL:把域名接进来之后,边缘会自动签发证书并续期。你不需要买证书,也不需要跑 certbot。

1. 证书长什么样

用 .NET 的 TLS 客户端连我部署的 Worker,读出真实证书:

Subject  : CN=hyysn.workers.dev
Issuer   : CN=YE2, O=Let's Encrypt, C=US
NotBefore: 2026-09-23 07:02:50Z
NotAfter : 2026-12-22 07:02:49Z
TLS      : Tls13 / Aes256

三个信息值得注意:

证书是 *.workers.dev 的通配证书,不是给你单个 Worker 签的。所以你自定义域之前,浏览器看到的域名是 xxx.workers.dev。

签发者是 Let's Encrypt,有效期 90 天。Cloudflare 会在到期前自动续,前提是域名解析一直在 Cloudflare 上。

协议是 TLS 1.3。免费计划同样支持 TLS 1.3,不需要额外配置。

2. 自定义域的证书

把域名接进 Cloudflare 并等站点 Active 之后,边缘会为该域名签发 Universal SSL。这一步是自动的,控制台里能看到状态:

状态含义
Initializing正在签发,通常几分钟
Active已生效,可以正常 HTTPS
待验证通常卡在 DNS 未生效或 CAA 记录阻止

签发卡住时,先查 CAA 记录有没有限制 Let's Encrypt,再查 NS 是否真的生效。

3. Always Use HTTPS 与 HSTS

两个开关都在 SSL/TLS 菜单下:

Always Use HTTPS:把 http:// 请求 301 到 https://。建议开。

HSTS:告诉浏览器"以后只用 HTTPS 访问我",通过 Strict-Transport-Security 响应头下发。开启前确认全站(含子域)都能 HTTPS,否则回滚很麻烦——HSTS 一旦被浏览器记住,在 max-age 到期前你无法用 HTTP 访问。配置细节见 83-security-headers-hsts.md。

4. 混合内容:最常见的"证书没问题但不显示锁"

页面本身是 HTTPS,但里面引用了 http:// 的图片、脚本或字体,浏览器会降级提示甚至拦截。排查方式:

# 抓页面里的 http:// 引用
(Invoke-WebRequest -Uri 'https://你的域名/' -UseBasicParsing).Content -split "`n" | Select-String 'http://'

修法是把资源改成相对路径或 https://,或者把资源放到同一域名下。

5. 回源那一段不要忽略

边缘到源站这一段是另一套配置(SSL/TLS 模式:Flexible / Full / Full Strict)。只在边缘有证书、回源是 HTTP 时,选 Flexible 能跑通,但这意味着"用户到边缘"加密、"边缘到源站"明文。正确做法是源站也上证书并用 Full (Strict)。三种模式的取舍见 82-ssl-tls-modes.md。

小结

免费 HTTPS 在 Cloudflare 上是默认发生的,你要做的只有三件:域名接进来、等证书 Active、把 Always Use HTTPS 打开。

真正需要判断的是回源模式。只把边缘证书配好、回源仍走 HTTP,属于"看起来有锁、实际半程明文",这也是 Flexible 模式最容易被误用的地方。

数据来源与检索时间

检索时间 2026-11-10。证书信息为本机实测。

来源URL对应数据
Cloudflare 定价页https://www.cloudflare.com/plans/免费计划包含 Universal SSL 证书
Cloudflare DNS 记录文档https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/代理状态与边缘证书的关系(只有代理的记录才走边缘 TLS)
Workers 路由文档https://developers.cloudflare.com/workers/configuration/routing/routes/*.workers.dev 默认域名与自定义域的差别

核验说明

  • 证书的 Subject、Issuer、有效期、TLS 版本均为本机通过 .NET SslStream 实际握手读取,时间 2026-11-10。
  • 未做:没有在自有域名上验证 Universal SSL 的签发时长(无 Zone 权限);HSTS 未实际开启,避免把测试域名锁死。