使用 Google Cloud CLI 签发证书

本页面介绍了如何使用 Google Cloud CLI 通过 Certificate Authority Service 生成或签发证书。

借助 CA Service,您可以部署和管理私有 CA,而无需管理基础设施。

准备工作

  • 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

    gcloud init

    如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  • 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  • 启用 Certificate Authority Service API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    gcloud services enable privateca.googleapis.com

  • 验证是否已为您的 Google Cloud 项目启用结算功能

  • 配置一个默认位置,以便在本快速入门中使用 gcloud 命令。

    gcloud config set privateca/location LOCATION
    

    CA 服务资源(例如 CA 池和 CA)位于单个Google Cloud 位置,创建这些资源后便无法更改。

创建 CA 池

证书授权机构 (CA) 池是包含多个 CA 的集合。CA 池能够轮替信任链,而不会中断或停止工作负载。

如需在 Enterprise 层级中创建 CA 池,请运行以下命令:

gcloud privateca pools create POOL_ID --location LOCATION --tier "enterprise"

替换以下内容:

  • POOL_ID:CA 池的名称
  • LOCATION:CA 池的位置。如需查看位置的完整列表,请参阅位置

资源名称可以包含字母、数字、连字符 (-) 和下划线 (_),长度不得超过 63 个字符。

创建根 CA

CA 池在创建时为空。如需从 CA 池请求证书,您必须在其中添加 CA。

如需创建根 CA 并将其添加到您创建的 CA 池中,请运行以下命令:

gcloud privateca roots create CA_ID --pool POOL_ID --location LOCATION --subject "CN=Example Prod Root CA,O=Google"

替换以下内容:

  • CA_ID:根 CA 的名称
  • POOL_ID:CA 池的名称
  • LOCATION:CA 池的位置。如需查看位置的完整列表,请参阅位置

CA Service 在创建根 CA 时会返回以下输出:

Created Certificate Authority [projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificateAuthorities/CA_ID]

当 gcloud CLI 提示时,输入 y 以启用根 CA。

可选:创建从属 CA 池

如需创建从属 CA 池,请运行以下命令:

    gcloud privateca pools create SUBORDINATE_POOL_ID
        --location LOCATION
        --tier TIER

替换以下内容:

  • SUBORDINATE_POOL_ID:从属 CA 池的 ID
  • LOCATION:从属 CA 池的位置。 如需查看位置的完整列表,请参阅位置
  • TIER:从属 CA 层级,可以是 devops 或 enterprise

可选:创建由存储在 Google Cloud中的根 CA 签名的从属 CA

如需在您在上一步中创建的从属 CA 池中创建从属 CA,请运行以下命令:

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
        --location=LOCATION \
        --pool=SUBORDINATE_POOL_ID \
        --issuer-pool=POOL_ID \
        --issuer-location=ISSUER_LOCATION \
        --from-ca=EXISTING_CA_ID \
        --kms-key-version projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KEY_RING/cryptoKeys/KEY/cryptoKeyVersions/KEY_VERSION

替换以下内容:

  • SUBORDINATE_CA_ID:从属 CA 的 ID
  • LOCATION:从属 CA 的位置。如需查看位置的完整列表,请参阅位置
  • SUBORDINATE_POOL_ID:您在上一部分中创建的从属 CA 池的 ID
  • POOL_ID:父 CA 池的 ID
  • ISSUER_LOCATION:证书的位置
  • EXISTING_CA_ID:源 CA 的 ID
  • PROJECT_ID:项目的 ID
  • LOCATION_ID:密钥环的位置
  • KEY_RING:密钥所在的密钥环的名称
  • KEY:密钥的名称
  • KEY_VERSION:密钥的版本

创建从属 CA 时,系统会返回以下语句。

Created Certificate Authority [projects/my-project-pki/locations/us-west1/caPools/SUBORDINATE_POOL_ID/certificateAuthorities/SUBORDINATE_CA_ID].

当 gcloud CLI 提示时,输入 y 以启用从属 CA。

创建证书

如需使用新创建的 CA 创建证书,请执行以下操作:

  1. 使用 pip 命令安装 Pyca 加密库。

      pip install --user "cryptography>=2.2.0"
    

    CA 服务使用 Pyca cryptography 库在本地计算机上生成并存储新的非对称密钥对。此密钥绝不会发送到 CA Service。

  2. 如需允许 Google Cloud SDK 使用 Pyca 加密库,您必须启用网站软件包。

    macOS 或 Linux

    export CLOUDSDK_PYTHON_SITEPACKAGES=1
    

    Windows

    set CLOUDSDK_PYTHON_SITEPACKAGES=1
    
  3. 创建证书。

      gcloud privateca certificates create \
          --issuer-pool POOL_ID \
          --issuer-location ISSUER_LOCATION \
          --subject "CN=Example Prod,O=Google" \
          --generate-key \
          --key-output-file=./key \
          --cert-output-file=./cert.pem
    

    替换以下内容:

    • POOL_ID:您创建的 CA 池的资源 ID
    • ISSUER_LOCATION:签发数字证书的证书授权机构的位置

    CA Service 返回以下响应:

    Created Certificate [projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID/certificates/CERTIFICATE_ID]
    

清理

删除您为本快速入门创建的 CA 池、CA 和项目,以进行清理。

  1. 撤消证书。

      如需撤消证书,请运行以下命令:

       gcloud privateca certificates revoke --certificate CERT_NAME --issuer-pool POOL_ID --location 
      LOCATION
        

      请替换以下内容:

      • CERT_NAME:您要撤消的证书的名称
      • POOL_ID:签发证书的 CA 池的名称
      • LOCATION:CA 池的位置
  2. 删除 CA。

    您只能在撤消 CA 颁发的所有证书后,才能删除该 CA。

    1. 停用 CA。

      gcloud privateca roots disable CA_ID --pool=POOL_ID --location=LOCATION
      

      替换以下内容:

      • CA_ID:CA 的资源 ID
      • POOL_ID:CA 池的资源 ID
      • LOCATION:CA 池的位置。如需查看位置的完整列表,请参阅位置
    2. 删除 CA。

      gcloud privateca roots delete CA_ID --pool=POOL_ID --location=LOCATION
      

    CA 状态更改为 Deleted。CA 服务会在您发起删除操作 30 天后永久删除 CA。

  3. 删除 CA 池。

    只有在 CA 池中的 CA 被永久删除后,您才能删除该 CA 池。

    gcloud privateca pools delete POOL_ID --location=LOCATION
    
  4. 删除项目。

    删除 Google Cloud 项目:

    gcloud projects delete PROJECT_ID

后续步骤