跳转到内容
搜索文档

为 mTLS 自带 CA

最后更新 查看 MarkdownAgent 设置

本页说明如何管理非 Cloudflare CA 签发的客户端证书。更广泛的概述,请参阅 Cloudflare 上的 mTLS 学习路径。

自带 CA (BYOCA) 在您已实现 mTLS 且设备上已安装客户端证书 时特别有用。

可用性

  • 此功能仅在 Enterprise 账户上可用。
  • 每个 Enterprise 账户最多可上传五个 CA。此配额不适用于通过 Cloudflare Access 上传的 CA。
  • CA 证书配额在 API Shield、Workers mTLS 和 Cloudflare Gateway 之间共享。
  • 要提高此配额,请联系您的账户团队。

CA 证书要求

上传 CA 时,Cloudflare 会根据特定要求验证证书。

  • CA 证书可以来自公开受信任的 CA 或自签名。

  • 在证书 Basic Constraints 中,CA 属性必须设置为 TRUE。

  • 证书必须使用以下列出的签名算法之一:

    允许的签名算法

    x509.SHA1WithRSA

    x509.SHA256WithRSA

    x509.SHA384WithRSA

    x509.SHA512WithRSA

    x509.ECDSAWithSHA1

    x509.ECDSAWithSHA256

    x509.ECDSAWithSHA384

    x509.ECDSAWithSHA512

使用您的 CA 设置 mTLS

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

    Go to Client Certificates ↗
  2. 选择 Add Certificate(添加证书)。

  3. 在 Certificate Authority(证书颁发机构) 下拉菜单中,选择 Bring your own CA(自带 CA)。

  4. 上传您的 CA 证书文件(PEM 编码)并为 CA 输入名称。

  5. 选择 Continue(继续)。

  6. 在 Associate Hostnames(关联主机名) 页面上,输入应使用此 CA 进行 mTLS 验证的主机名,并为每个主机名选择 Add(添加)。您也可以跳过此步骤,稍后再关联主机名。

  7. 选择 Save(保存) 确认。

  1. 使用 Upload mTLS certificate 端点 上传 CA 根证书。
  • ca boolean 必填

    • 设置为 true 以指示该证书是 CA 证书。
  • certificates string 必填

    • 插入与 CA 证书关联的 .pem 文件内容,格式为单个字符串,用 \n 替换换行符。
  • name string 可选

    • 为您的 CA 证书指定唯一名称。
  • private_key string 可选

    • 插入与证书私钥关联的 .pem 文件内容,格式为单个字符串,用 \n 替换换行符。
  1. 记下 API 响应中返回的证书 ID(id)。
  2. 使用 Replace Hostname Associations 端点 在应使用该 CA 进行 mTLS 验证的每个主机名上启用 mTLS。使用以下参数:
  • hostnames array 必填

    • 列出将使用该 CA 进行客户端证书验证的主机名。

  • mtls_certificate_id string 必填

    • 指明从上一步获得的证书 ID。

  1. (可选)发起 GET 请求 以确认 CA 主机名关联。

上传 CA 并关联主机名后,创建自定义规则以强制执行客户端证书验证。 您可以通过仪表板 或通过 API 完成此操作。

  "expression": "(http.host in {\"<HOSTNAME_1>\" \"<HOSTNAME_2>\"} and not cf.tls_client_auth.cert_verified)",
  "action": "block"

一个主机名对应多个 CA

同一主机名可以关联多个 CA(Cloudflare 托管或 BYOCA)。对于 BYOCA 证书,最近部署的证书将优先。

如果您希望移除与 Cloudflare 托管证书的关联,并仅使用您的 BYOCA 证书:

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

    Go to Client Certificates ↗
  2. 在 Cloudflare-issued Client Certificates(Cloudflare 签发的客户端证书) 下的 Hosts(主机) 部分,选择 Edit(编辑)。

  3. 选择要移除的主机名旁边的叉号。

  4. 选择 Save(保存) 确认。

  1. 列出主机名关联,不带 mtls_certificate_id 参数。

    Required API token permissions

    At least one of the following token permissions is required:
    • SSL and Certificates Write
    • SSL and Certificates Read
    List Hostname Associationsbash
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
  2. 复制 API 返回的 hostnames 数组并更新它,移除不应再使用 Cloudflare 托管 CA 的主机名。

  3. 使用 Replace Hostname Associations 端点,不带 mtls_certificate_id 参数,以针对 Cloudflare 托管 CA 执行操作。对于 hostnames,使用上一步的列表。

    Required API token permissions

    At least one of the following token permissions is required:
    • SSL and Certificates Write
    Replace Hostname Associationsbash
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations" \
    	--request PUT \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"hostnames": [
    				"<UPDATED_HOSTNAME_ASSOCIATIONS>"
    		]
    	}'

删除已上传的 CA

如果要移除先前上传的 CA,必须先移除其所有主机名关联。

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

    Go to Client Certificates ↗
  2. 选择 BYOCA(自带 CA) 选项卡。

  3. 找到要删除的 CA,并选择其旁边的三个点。

  4. 先移除所有关联的主机名(如有)。

  5. 选择删除选项并确认。

  1. 向 Replace Hostname Associations 端点 发起请求,将 hostnames 设为空数组,并在 mtls_certificate_id 中指定您的 CA 证书 ID:
  "hostnames": [],
  "mtls_certificate_id": "<CERTIFICATE_ID>"
  1. 使用 Delete mTLS certificate 端点 删除证书。

列出 CA 主机名关联

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

    Go to Client Certificates ↗
  2. 选择 BYOCA(自带 CA) 选项卡。

  3. 找到要检查的 CA,并选择其旁边的三个点。

  4. 选择 Edit hostnames(编辑主机名)。Certificate Details(证书详情) 面板会显示关联的主机名。

使用 List Hostname Associations 端点,并将 mtls_certificate_id 查询参数设置为已上传 CA 的证书 ID。

Required API token permissions

At least one of the following token permissions is required:
  • SSL and Certificates Write
  • SSL and Certificates Read
List Hostname Associationsbash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations?mtls_certificate_id=ID_FROM_STEP_2" \
	--request GET \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

这篇文档对您有帮助吗?