实际上 Cloudflare 的 DNS 管理页面并不提供 TLS 版本配置选项,你需要在控制台的 SSL/TLS 板块中进行设置,且通常只能设定最低支持版本而非强制单一版本。
先说结论:DNS 设置与加密协议无关,请移步 SSL/TLS 菜单调整,并注意旧设备兼容性。
- 适合:需要提升站点加密安全性或满足合规要求的场景
- 先准备:确认源站服务器支持相同的 TLS 版本,避免握手失败
- 验收:修改后使用客户端工具验证握手协议版本
核心概念澄清
很多站长容易混淆 DNS 解析和 SSL 加密的概念。DNS 设置仅负责将域名指向 IP 地址,而 TLS 版本属于传输层安全协议,由 Cloudflare 的边缘节点处理。在 Cloudflare 的代理模式下,连接分为两段:用户到 Cloudflare 边缘节点,以及 Cloudflare 回源到你的服务器。你在控制台调整的通常是第一段连接的最低加密标准。
调整 TLS 最低版本主要是为了安全性和合规性(如 PCI DSS 要求),而非性能提升。强制较高版本会牺牲部分旧客户端的兼容性。
配置步骤
以下是具体的配置检查步骤,操作前请确保已备份当前设置:
- 进入设置页面:登录 Cloudflare Dashboard,选择对应域名。在左侧菜单栏找到并点击SSL/TLS,确保加密模式(Encryption Mode)设置为 Full 或 Full (strict),否则回源可能报错。
- 调整最低版本:进入Edge Certificates(边缘证书)页面,下拉找到Minimum TLS Version。默认通常是 TLS 1.0 或 1.2,建议至少设置为 TLS 1.2。
- 保存更改:点击 Save 保存设置。注意,Cloudflare 通常不允许强制“仅”使用某版本,而是设定“最低”版本,客户端协商时可使用更高版本(如 TLS 1.3)。
- 检查回源设置:如果你使用了 Origin CA 证书,请确保源站 Web 服务器(如 Nginx/Apache)已配置支持对应的 TLS 版本。
验证方法
修改完成后,不要只依赖浏览器访问,建议使用命令行工具确认协商的协议版本:
1. 查看当前协商版本:
在终端执行以下命令(将 example.com 替换为你的域名):
curl -vI https://example.com
在输出信息中查找 SSL connection using 字样。成功握手示例如下:
* SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305
* server certificate verification: OK
...
HTTP/2 2002. 强制指定版本测试:
你可以尝试强制指定版本测试,例如:
curl `--tlsv1`.2 -vI https://example.com
如果连接失败,通常会看到以下错误提示,说明该版本未被支持或握手失败:
* SSL handshake failed
curl: (35) SSL handshake failed兼容性与风险
- 旧设备无法访问:设置为 TLS 1.2 或 1.3 后,Windows XP 上的 IE 浏览器、Android 4.4 及以下版本、iOS 9 以下设备可能无法打开网站。
- 回源握手失败(525 错误):如果边缘节点支持 TLS 1.3 但你的源站服务器只支持 TLS 1.2,且 Cloudflare 回源设置不匹配,可能导致 521 或 525 错误。请确保源站 Nginx/Apache 配置了
ssl_protocols TLSv1.2 TLSv1.3;。 - HTTP/2 和 HTTP/3 依赖:较新的 HTTP 协议版本通常要求较高的 TLS 版本,调整 TLS 设置可能会间接影响 HTTP 协议的可用性。
加密模式说明
在 SSL/TLS 菜单中,加密模式的选择直接影响回源安全性:
- Full: 源站可以有自签名证书,Cloudflare 与源站之间加密,但不验证源站证书有效性。
- Full (strict): 源站必须有有效证书(如 Cloudflare Origin CA),Cloudflare 会验证源站证书。推荐此模式以避免中间人攻击。
- Flexible: 用户到 Cloudflare 加密,Cloudflare 到源站不加密。不建议用于生产环境。