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

本教程将引导您使用 Google Cloud CLI 向 Public Certificate Authority 机构请求 TLS 证书。如需了解 Public Certificate Authority 机构使用的根 CA 和中间 CA,请参阅 Google Trust Services。从公共 CA 请求证书不收取任何费用。

准备工作

  • After installing the Google Cloud CLI, initialize it by running the following command:

    gcloud init

    If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  • 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.

  • 确保您具有 Public CA External Account Key Creator (roles/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 Secret 可帮助您向公共 CA 注册 ACME 账号。EAB 密钥由密钥 ID 和基于哈希的消息认证码 (HMAC) 组成。

您可以使用公共 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 密钥向 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 Secret 注册一个 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

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

后续步骤