跳转到内容
本站为社区维护的非官方中文翻译,与 Cloudflare, Inc. 无关联。本站不提供账户登录,请勿在任何非官方站点输入您的 Cloudflare 账户信息。官方文档:developers.cloudflare.com

TLS 解密

最后更新 查看 MarkdownAgent 设置

Cloudflare Gateway 可以执行 SSL/TLS 解密 ↗,以检查 HTTPS 流量中的恶意软件和其他安全风险。HTTP 策略检查 HTTPS 流量需要 TLS 解密。若未开启,HTTPS 加密中包含的信息(例如完整 URL、标头和请求体)将对 Gateway 不可见。

当你开启 TLS 解密时,Gateway 会解密通过 HTTPS 发送的所有流量,应用你的 HTTP 策略,然后使用用户端证书重新加密请求。

Cloudflare 通过仅在数据中心内存中解密、检查并重新加密 HTTPS 请求来防止流量干扰。Gateway 仅将符合条件的缓存内容存储在静态存储中。所有缓存磁盘都进行静态加密。你可以使用 Cloudflare 数据本地化套件(DLS)中的 Regional Services 配置 TLS 解密发生的位置。要进一步控制流量从哪些数据中心出站,可以使用专用出站 IP。

Cloudflare 支持用户通过 TLS 1.1、1.2 和 1.3 连接到 Gateway。

Forward(转发)操作(beta)也需要对 HTTPS 流量进行 TLS 解密。Gateway 不会为匹配 Do Not Inspect 的流量调用 Worker。如果你配置 Worker 以归档已解密内容,该存储由你的 Worker 代码和绑定控制。

开启 TLS 解密

要开启 TLS 解密:

  1. 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Traffic policies(流量策略) > Traffic settings(流量设置)。
  2. 在 Proxy and inspection(代理与检查) 中,开启 Inspect HTTPS requests with TLS decryption(通过 TLS 解密检查 HTTPS 请求)。
  1. 向您的 cloudflare_api_token ↗ 添加以下权限:

    • Zero Trust Write
  2. 在 cloudflare_zero_trust_gateway_settings ↗ 中配置 tls_decrypt 参数:

    resource "cloudflare_zero_trust_gateway_settings" "team_name" {
    	account_id = var.cloudflare_account_id
    	settings = {
    		tls_decrypt = {
    			enabled = true
    		}
    	}
    }

检查限制

Gateway 不支持对使用以下技术的应用程序进行 TLS 解密:

在所有端口上检查

默认情况下,Gateway 仅检查通过端口 80 的 HTTP 流量。此外,如果你开启 TLS 解密,Gateway 将检查通过端口 443 的 HTTPS 流量。

要在 80 和 443 以外的端口上检测并检查 HTTP 和 HTTPS 流量,你可以开启协议检测并将 Gateway 配置为在所有端口上检查流量。

不兼容的证书

使用证书固定和 mTLS 身份验证的应用程序不信任 Cloudflare 证书。例如,大多数移动应用程序使用证书固定。Cloudflare 不信任使用自签名证书而不是由公共 CA 签名的证书的应用程序。

如果你尝试对证书配置不兼容的应用程序执行 TLS 解密,应用程序可能会返回 SSL 或信任错误和/或无法加载。要解决此问题,你可以:

  • 向受支持的应用程序添加 Cloudflare 证书。
  • 创建 Do Not Inspect 策略,将应用程序排除出检查。Application 选择器提供已知使用嵌入式证书的受信任应用程序列表。请注意,如果你为应用程序或网站创建 Do Not Inspect 策略,你将失去记录或拦截 HTTP 请求、应用 DLP 策略以及执行 AV 扫描的能力。
  • 在 Include 模式下配置 Split Tunnel,以确保 Gateway 只检查发往你的 IP 或域名的流量。这对于在用户个人设备上部署 Zero Trust 或预期会使用个人应用程序的组织很有用。

或者,要在访问使用不安全证书的站点时仍允许 HTTP 过滤,将不受信任的证书操作设置为 Pass through(直通)。

Google Chrome 自动 HTTPS 升级

Google Chrome 可以自动将 HTTP 请求升级为 HTTPS 请求,即使你选择明确声明 http:// 的链接。当你使用 Gateway 代理和过滤流量时,此升级可能会中断 Zero Trust 用户与 Gateway 之间的连接。

你可以通过 Gateway 直通策略、Chrome 浏览器标志或 Chrome Enterprise 策略关闭自动 HTTPS 升级。

要在整个 Zero Trust 组织中为某个 URL 禁用自动 HTTPS 升级,请创建 Gateway 直通策略。

  1. 部署自定义根证书。

  2. 创建 HTTP 策略以匹配正在被自动升级的 URL 的域名。例如:

    选择器 运算符 值 操作
    URL in(属于) example.com Allow(允许)
  3. 在 Untrusted certificate action(不受信任的证书操作) 中,选择 Pass through(直通)。

  4. 选择 Create policy(创建策略)。

直通策略将为连接到你的 Zero Trust 组织的任何设备绕过不安全连接升级。有关更多信息,请参阅不受信任的证书。

要按浏览器禁用自动 HTTPS 升级,请转到 Chrome flags 并关闭 HTTPS Upgrades。

Chrome Enterprise 用户可以使用 HttpsUpgradesEnabled 管理策略 ↗ 为所有 URL 关闭自动 HTTPS 升级。

双向 TLS(mTLS)

在双向 TLS(mTLS)中,客户端和服务器都会出示证书以验证彼此的身份。当 Gateway 解密 TLS 流量时,它会终止来自客户端的连接并创建到源站服务器的新连接。由于 Gateway 无法将客户端证书转发给源站,mTLS 握手会失败。为防止连接失败,请为此流量创建 Do Not Inspect 策略。

ESNI 和 ECH

遵循 ESNI 或 Encrypted Client Hello (ECH) 标准 ↗的网站会在 TLS 握手期间加密 Server Name Indication(SNI),因此与 HTTP 检查不兼容。Gateway 依赖 SNI 将 HTTP 请求与策略匹配 —— 如果 SNI 被加密,Gateway 无法确定应用哪条策略。如果 ECH 失败,浏览器会使用初始请求中未加密的 SNI 重试 TLS 握手。要避免此行为,你可以在用户浏览器中禁用 ECH。

你仍可应用除 SNI 和 SNI Domain 之外的所有网络策略过滤器。要限制 ESNI 和 ECH 流量,一种方法是过滤掉所有不包含 SNI 标头的端口 80 和 443 流量。

后量子支持

Gateway 支持使用 TLS 1.3 上 X25519 和 MLKEM768 的混合密钥交换的后量子密码学。密钥交换完成后,Gateway 使用 AES-128-GCM 加密流量。

请参阅后量子密码学了解更多信息。

FIPS 合规

默认情况下,TLS 解密可以使用 TLS 1.2 和 1.3。但是,FedRAMP 等某些环境可能需要符合 FIPS 140-3 的密码套件和 TLS 版本。FIPS 合规目前需要 TLS 1.2。

启用 FIPS 合规

  1. 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Traffic policies(流量策略) > Traffic settings(流量设置)。
  2. 在 Proxy and inspection(代理与检查) 中,开启 Inspect HTTPS requests with TLS decryption(通过 TLS 解密检查 HTTPS 请求)。
  1. 向您的 cloudflare_api_token ↗ 添加以下权限:

    • Zero Trust Write
  2. 在 cloudflare_zero_trust_gateway_settings ↗ 中配置 tls_decrypt 参数:

    resource "cloudflare_zero_trust_gateway_settings" "team_name" {
    	account_id = var.cloudflare_account_id
    	settings = {
    		tls_decrypt = {
    			enabled = true
    		}
    	}
    }
  1. 选择 Enable only cipher suites and TLS versions compliant with FIPS 140-3(仅启用符合 FIPS 140-3 的密码套件和 TLS 版本)。

限制

启用 FIPS 合规后,Gateway 在连接到源站时只会选择 FIPS 合规的密码套件。如果源站不支持 FIPS 合规密码,请求将失败。

符合 FIPS 的流量默认使用 HTTP/3。要对 UDP 流量执行 HTTP 策略,必须开启 UDP 的 Gateway 代理。

FedRAMP 合规

当你在美国使用 Cloudflare Regional Services 并通过 Cloudflare One Client 将 TLS 流量接入 Gateway 时,流量将从 Cloudflare FedRAMP 边界内的 Cloudflare 数据中心出站。如果用户最近的数据中心不符合 FedRAMP,其流量仍会从符合 FedRAMP 的数据中心出站,从而保持流量的 FedRAMP 合规。

flowchart LR
 %% Accessibility
 accTitle: Gateway 如何通过 Regional Services 路由符合 FedRAMP 的流量
 accDescr: 流程图描述当与美国的 Regional Services 一起使用时,Cloudflare One Client 与 Gateway 如何将流量从符合 FedRAMP 的数据中心出站。

 %% Flowchart
 subgraph s1["非 FedRAMP 数据中心"]
        n2["WARP TLS 加密已终止"]
  end
 subgraph s2["FedRAMP 数据中心"]
        n3["Gateway TLS 加密(FIPS)已终止"]
  end
 subgraph s3["私有内部网络"]
        n5["符合 FedRAMP 的 cloudflared"]
        n6(["私有服务器"])
  end
    n1(["靠近非 FedRAMP 合规数据中心的用户"]) -- 用 WARP TLS(MASQUE)封装的 Gateway TLS 连接 --> n2
    n2 -- Gateway TLS 连接 --> n3
    n3 <-- FIPS 隧道 --> n5
    n5 --> n6

    n5@{ shape: rect}

密码套件

A cipher suite is 用于建立安全通信连接的一组加密算法。目前广泛使用的密码套件有多种,客户端和服务器在建立 TLS 连接时会协商要使用的密码套件。支持多种密码套件可确保与各种客户端兼容。

下表列出 Gateway 用于 TLS 解密的默认密码套件。

名称(OpenSSL) 名称(IANA) 符合 FIPS
ECDHE-ECDSA-AES128-GCM-SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ✅
ECDHE-ECDSA-AES256-GCM-SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 ✅
ECDHE-RSA-AES128-GCM-SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ✅
ECDHE-RSA-AES256-GCM-SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ✅
ECDHE-RSA-AES128-SHA TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ❌
ECDHE-RSA-AES256-SHA384 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 ✅
AES128-GCM-SHA256 TLS_RSA_WITH_AES_128_GCM_SHA256 ✅
AES256-GCM-SHA384 TLS_RSA_WITH_AES_256_GCM_SHA384 ✅
AES128-SHA TLS_RSA_WITH_AES_128_CBC_SHA ❌
AES256-SHA TLS_RSA_WITH_AES_256_CBC_SHA ❌

有关密码套件的更多信息,请参阅密码套件。

这篇文档对您有帮助吗?