当您在 mTLS 身份验证中指定 API 主机时,Cloudflare 将阻止所有未携带用于 mTLS 身份验证的客户端证书的请求。
在使用 mTLS 规则保护您的 API 或 Web 应用程序之前,您需要:
- 检查安装在源服务器上的证书是否与客户端证书的主机名相匹配,例如
api.example.com。不支持源服务器通配符证书(例如*.example.com)。 - 创建客户端证书。
- 配置您的移动应用程序或 IoT 设备以使用您的 Cloudflare 颁发的客户端证书。
- 在您的区域中为主机启用双向安全传输层套件 (mTLS)。
-
在 Cloudflare 仪表板中,转到 Client Certificates(客户端证书) 页面。
Go to Client Certificates ↗ -
选择 Create a mTLS rule(创建 mTLS 规则)。
-
在 Custom rules(自定义规则) 中,一些规则参数已被自动填充。在 Value(值) 中输入您要保护的 URI 路径。
-
(可选)添加
Hostname字段,并在 Value(值) 中输入您希望保护的已启用 mTLS 的主机名。 -
在 Choose action(选择操作) 中,选择
Block。 -
选择 Deploy(部署) 以激活该规则。
一旦部署了 mTLS 规则,任何没有有效客户端证书的请求都将被阻止。
要在表达式生成器中审查您的 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"})