跳转到内容
搜索文档

配置 mTLS

最后更新 查看 MarkdownAgent 设置

当您在 mTLS 身份验证中指定 API 主机时,Cloudflare 将阻止所有未携带用于 mTLS 身份验证的客户端证书的请求。

前提条件

在使用 mTLS 规则保护您的 API 或 Web 应用程序之前,您需要:

通过 Cloudflare 仪表板创建 mTLS 规则

  1. 在 Cloudflare 仪表板中,转到 Client Certificates(客户端证书) 页面。

    Go to Client Certificates ↗
  2. 选择 Create a mTLS rule(创建 mTLS 规则)

  3. Custom rules(自定义规则) 中,一些规则参数已被自动填充。在 Value(值) 中输入您要保护的 URI 路径。

  4. (可选)添加 Hostname 字段,并在 Value(值) 中输入您希望保护的已启用 mTLS 的主机名。

  5. Choose action(选择操作) 中,选择 Block

  6. 选择 Deploy(部署) 以激活该规则。

一旦部署了 mTLS 规则,任何没有有效客户端证书的请求都将被阻止。

表达式生成器 (Expression Builder)

要在表达式生成器中审查您的 mTLS 规则,请选择与您的规则关联的扳手图标

表达式预览中,您的 mTLS 规则包含一个由 and 运算符连接的两个简单表达式组成的复合表达式

第一个表达式 — not cf.tls_client_auth.cert_verified — 在访问您的 API 或 Web 应用程序的请求未提供有效的客户端证书时返回 true

第二个表达式使用 http.request.uri.path 字段并结合 in 运算符,以捕获您的 mTLS 规则所适用的 URI 路径。

由于您规则的操作阻止 (Block),因此只有提供了有效客户端证书的请求才能访问指定的主机。

Cloudflare 建议同时验证签发者主体密钥标识符 (SKI) 哈希。如果没有此项检查,任何有效的客户端证书都将被接受,而不管它是哪个证书颁发机构 (CA) 签发的。添加 SKI 哈希可将访问限制为来自特定 CA 的证书。

您可以通过使用类似于以下的表达式来实施此操作:

not (cf.tls_client_auth.cert_verified and cf.tls_client_auth.cert_issuer_ski eq "A5AC554235DBA6D963B9CDE0185CFAD6E3F55E9F")

要获取存储在 mtls.crt 文件中的客户端证书的签发者主体密钥标识符 (SKI) 哈希,您可以运行以下 OpenSSL 命令:

openssl x509 -noout -ext authorityKeyIdentifier -in mtls.crt | tail -n1 | tr -d ': '
A5AC554235DBA6D963B9CDE0185CFAD6E3F55E9F

检查已吊销的证书

要检查已吊销的客户端证书,您可以添加新的 mTLS 规则或将新表达式添加到默认规则。要检查已吊销的证书,您必须使用表达式生成器。

当请求包含已吊销的证书时,cf.tls_client_auth.cert_revoked 字段将被设置为 true。如果将其与默认 mTLS 规则结合使用,它将类似于以下内容:

((not cf.tls_client_auth.cert_verified or cf.tls_client_auth.cert_revoked) and http.request.uri.path in {"/admin"})

这篇文档对您有帮助吗?