跳转到内容
搜索文档

配置 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"})

这篇文档对您有帮助吗?