如果在配置并嵌入客户端 SSL 证书后查询仍返回错误,请检查以下设置。
在终端中,使用以下命令检查客户端与 API 端点之间是否可以成功建立 SSL/TLS 连接。
curl --verbose --cert /path/to/certificate.pem --key /path/to/key.pem https://your-api-endpoint.com如果无法完成 SSL/TLS 握手,请检查证书和私钥是否正确。 如果握手完成但请求仍被阻止,请确认 Cloudflare 正在验证客户端证书。
检查是否已为正确的主机启用 mTLS。主机应与您要保护的 API 端点匹配。
要检查 mTLS 规则,请考虑以下步骤。更多指导请参阅自定义规则。
-
在 Cloudflare 仪表板中,前往 Security rules(安全规则) 页面。
Go to Security rules ↗ -
在特定规则上,选择 Edit(编辑)。
-
在该规则上,检查:
-
Expression Preview 是否正确。
-
如果定义了主机名,是否与您的 API 端点匹配。例如,对于 API 端点
api.trackers.ninja/time,规则应类似于:(http.host in {"api.trackers.ninja"} and not cf.tls_client_auth.cert_verified)
-
-
要编辑规则,请使用用户界面或选择 Edit expression(编辑表达式)。
您可以使用 Cloudflare Workers 调试客户端证书验证失败。
-
创建一个 Worker 以调试打印 cf.properties:
export default { async fetch(request, env, ctx) { console.info({ message: JSON.stringify(request.cf, null, 2) }); return new Response(JSON.stringify(request.cf, null, 2)) } }; -
向已配置的主机名和/或路径发起请求,分别在发送和不发送 mTLS 客户端证书的情况下进行。
-
在 Observability 仪表板上查看日志,并将响应与下面列出的预期值进行比较。
Go to Observability ↗
-
有效证书
"tlsClientAuth": { "certPresented": "1", "certVerified": "SUCCESS", }, -
无效证书(例如自签名证书)
"tlsClientAuth": { "certPresented": "1", "certVerified": "FAILED:self signed certificate", }, -
无证书
"tlsClientAuth": { "certPresented": "0", "certVerified": "NONE", },