标准 TLS 向客户端验证服务器的身份。双向 TLS (mTLS) 增加了第二层检查:服务器还使用客户端证书验证客户端的身份。这使您能够限制仅向呈现有效证书的设备或服务授予访问权限。
使用 Cloudflare 的公钥基础设施 (PKI) 创建客户端证书,或自带 CA (BYOCA)。
Mutual TLS (mTLS) authentication is a common security practice that uses client certificates to ensure traffic between client and server is bidirectionally secure and trusted. mTLS also allows requests that do not authenticate via an identity provider — such as Internet-of-things (IoT) devices — to demonstrate they can reach a given resource.
当主机名启用了 mTLS 时,Cloudflare 要求连接的客户端呈现有效证书。客户端证书安装在应被授予访问权限的设备或服务上。
Cloudflare 根据账户级别设置的 CA 验证客户端证书。由于验证在账户级别进行,同一证书可在您账户下的多个域名中使用,只要每个主机名都启用了 mTLS(例如 host.example.com、name.example.net、secure.anotherdomain.test)。
账户级别的 CA 可以是:
- Cloudflare 托管 CA:这是默认选项。证书和主机名关联列在 Client Certificates(客户端证书)仪表板 ↗ 的 Cloudflare-issued(Cloudflare 签发) 选项卡上。
- BYOCA 证书:Enterprise 账户可用。证书和主机名关联列在 Client Certificates(客户端证书)仪表板 ↗ 的 BYOCA 选项卡上。
Cloudflare 然后将验证结果存储在名为 cf.tls_client_auth.cert_verified 的字段中:
- 成功:
cf.tls_client_auth.cert_verified为true,您可以在特定 mTLS 字段中找到客户端证书详情。 - 失败:
cf.tls_client_auth.cert_verified为false。
mTLS 支持多种实现模式,具体取决于您要保护的内容。更广泛的概述,请参阅 mTLS 学习路径。
- 应用程序安全 — 基于客户端证书限制对 Web 应用程序的访问
- Zero Trust 的 mTLS — 通过 Cloudflare Access 验证用户和服务
- API Shield 的 mTLS — 使用基于证书的身份验证验证 API 客户端
- mTLS Workers 绑定 — Worker 连接到外部服务时呈现客户端证书
除 mTLS Workers 绑定外,上述任何实现都可以使用您自己的 CA 而不是 Cloudflare 托管 CA。请参阅自带 CA (Bring your own CA)。
当需要 Worker 向外部服务呈现客户端证书时,使用 mTLS Workers 绑定。要验证从客户端到 Worker 的请求,请参阅常规的 mTLS 应用程序安全 实现。
flowchart LR
accTitle: mTLS from client to worker versus mTLS from worker to external service
accDescr: Diagram showing two different implementations that can be considered for mTLS with Cloudflare Workers.
A[Client] <--App security mTLS--> B((Cloudflare))<--mTLS worker binding--> C[(External service)]