使用公共 CA 和 ACME 客户端请求证书

本教程将引导您使用 Google Cloud CLI 向公共证书授权机构请求 TLS 证书。如需了解公共证书授权机构使用的根 CA 和中间 CA,请参阅 Google Trust Services。向公共 CA 请求证书无需付费。

准备工作

  • Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init

  • Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  • 确保您拥有 Owner (roles/owner) 或 Public CA External Account Key Creator (publicca.externalAccountKeyCreator) IAM 角色。

    如需授予 Public CA External Account Key Creator (publicca.externalAccountKeyCreator) IAM 角色,请运行以下命令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=user:USER \
      --role=roles/publicca.externalAccountKeyCreator
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • USER:您要向其分配 IAM 角色的用户的唯一标识符

    如需了解如何授予 IAM 角色,请参阅管理对项目、文件夹和组织的访问权限

  • Enable the Public CA API:

    gcloud services enable publicca.googleapis.com

安装客户端

如需开始使用公共 CA,您必须安装 ACME 客户端。以下说明使用 Certbot 作为 ACME 客户端。如果客户端支持外部账号绑定 (EAB),您可以使用任何其他 ACME 客户端。

如需安装 Certbot,请参阅 Certbot 说明

请务必将客户端指向公共 CA 服务器。ACME 客户端首次与公共 CA 交互时,客户端会生成一个新的密钥对,并将公钥发送给公共 CA。

请求 EAB 密钥 ID 和 HMAC

安装 ACME 客户端后,您必须向公共 CA 注册 ACME 账号,才能向公共 CA 请求证书。EAB 密钥可帮助您向公共 CA 注册 ACME 账号。EAB 密钥由密钥 ID 和基于哈希的消息身份验证代码 (HMAC) 组成。

您可以使用 Public CA APIGoogle Cloud CLI 请求 EAB Secret。

如需请求 EAB 密钥 ID 和 HMAC,请运行以下命令:

gcloud publicca external-account-keys create

此命令会返回在公共 CA 的生产环境中有效的 EAB Secret。在响应正文中,keyId 字段包含 EAB 密钥 ID,b64MacKey 字段包含 EAB HMAC。

您必须在获得 EAB 密钥后的 7 天内使用该密钥。如果您未在 7 天内使用 EAB 密钥,该密钥将失效。使用 EAB 密钥注册的 ACME 账号没有到期时间。

注册 ACME 账号

本部分介绍了如何提供您刚刚获取的 EAB 密钥,以便在公共 CA 中注册 ACME 账号。

使用常规 ACME 客户端注册 ACME 账号,并在注册过程中提供 EAB 密钥 ID 和 HMAC。

如需向公共 CA 注册 ACME 账号,并将 ACME 账号绑定到您用于请求 EAB 密钥的 Google Cloud 项目,请运行以下命令:

certbot register \
    --email "EMAIL_ADDRESS" \
    --no-eff-email \
    --server "SERVER" \
    --eab-kid "EAB_KID" \
    --eab-hmac-key "EAB_HMAC_KEY"

替换以下内容:

  • EMAIL_ADDRESS:您的电子邮件地址
  • SERVER:生产环境或预演环境的 ACME 目录网址
  • EAB_KID:EAB 密钥 ID
  • EAB_HMAC_KEY:EAB HMAC 密钥

下表提供了生产环境和预演环境的说明和 ACME 目录网址:

环境 说明 ACME 目录网址
正式版 在生产环境中,您可以获取受公众信任的证书。 https://dv.acme-v02.api.pki.goog/directory
预演 预演环境会返回受公开信任的证书。 预演环境会执行与生产环境相同的验证检查。您可以使用预演环境进行集成或任何其他类型的测试。 https://dv.acme-v02.test-api.pki.goog/directory

您只能使用一个 EAB 密钥注册一个 ACME 账号。使用 EAB 密钥注册 ACME 账号后,该 EAB 密钥会失效,您无法重复使用。如果您想注册多个 ACME 账号,则必须为每个账号请求一个唯一的 EAB 密钥。

请求证书

公共 CA 验证您对证书目标的控制权并确认您的 ACME 客户端能按预期执行证书管理操作后,您就可以使用常规 ACME 工作流来请求、续订和撤消证书。您可以使用 ACME 客户端执行这些操作。如需申请和续订证书,您必须完成 ACME 质询,例如手动 DNS 质询。

如需使用手动 DNS 质询来申请证书,请运行以下命令:

certbot certonly \
    --manual \
    --preferred-challenges "dns-01" \
    --server "SERVER" \
    --domains "DOMAINS"

替换以下内容:

  • SERVER:生产环境或预演环境的 ACME 目录网址
  • DOMAINS:您要为其请求证书的域名的逗号分隔列表

清理

如果您不再需要网域的证书,请删除您创建的项目。

预演

您可以使用公共 CA 的预演环境请求证书以进行测试。预演环境颁发的证书会链接到测试根 CA。未配置为信任预演环境根证书的浏览器或其他客户端将不会信任来自预演环境的证书。如需获取在预演环境中有效的 EAB 密钥,请替换 API 端点以使用预演环境的端点:

gcloud config set api_endpoint_overrides/publicca https://preprod-publicca.googleapis.com/
然后,运行账号密钥创建命令以创建预演版密钥:
gcloud publicca external-account-keys create
如需还原为生产环境的端点,请运行以下命令:
gcloud config unset api_endpoint_overrides/publicca

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

后续步骤