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

本教程将介绍如何使用 Google Cloud CLI 向 Public Certificate Authority 机构请求 TLS 证书。如需了解 Public Certificate Authority 机构使用的根 CA 和中间 CA,请参阅 Google Trust Services。从公共 CA 请求证书是免费的。

准备工作

  • 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

    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

安装客户端

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

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

确保将客户端指向 Public CA 服务器。ACME 客户端首次与 Public CA 进行交互时,客户端会生成新的密钥对并将公钥发送到公共 CA。

请求 EAB 密钥 ID 和 HMAC

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

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

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

gcloud publicca external-account-keys create

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

您必须在获取 EAB 密钥后的 7 天内使用它。如果您不在 7 天内使用 EAB 密钥,则该密钥会失效。使用 EAB Secret 注册的 ACME 帐号没有有效期。

注册 ACME 帐号

本部分说明了如何通过提供您刚刚获得的 EAB 密钥来向 Public CA 注册 ACME 帐号。

使用常规 ACME 客户端注册一个 ACME 帐号,并在注册时提供 EAB 密钥 ID 和 HMAC。

如需向 Public 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:您要为其请求证书的网域列表(以英文逗号分隔)。

清理

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

预演

您可以使用 Public 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

删除 Google Cloud 项目:

gcloud projects delete PROJECT_ID

后续步骤