配置 CA 签名密钥

Certificate Authority Service (CA Service) 中的证书授权机构 (CA) 需要加密密钥才能签署其颁发的证书。此签名密钥可为您的公钥基础架构 (PKI) 建立信任关系。

本文档介绍了您可以为 CA 签名密钥选择的关键管理策略,以及如何配置这些策略。您可以选择 Google-owned and managed key ,以便通过最少的设置简化管理;也可以选择由客户管理的密钥,以便更直接地控制密钥的生命周期和属性。

使用 Google-owned and managed key

使用 Google-owned and managed key时,您可以选择加密算法和密钥大小。CA 服务会在 Google 管理的项目中创建和管理专用 Cloud Key Management Service 密钥的生命周期。

查看支持的签名密钥算法

Cloud KMS 支持两类适用于 CA 的非对称签名操作算法:RSA 和 ECDSA。

RSA

基于 RSA 的签名方案具有广泛的兼容性。如果您需要支持旧版系统,请使用 RSA。Cloud KMS 提供 RSA_SIGN_PSSRSA_SIGN_PKCS1 变体。如需了解详情,请参阅 RFC 8017

RSA-PSS 是一种较新的签名方案,在安全性方面更具可验证性,建议在大多数新实现中使用。提供 RSA_SIGN_PKCS1 是为了与尚不支持 PSS 的旧版系统兼容。

ECDSA

椭圆曲线密钥可提供与 RSA 类似的安全性,但密钥大小更小。Cloud KMS 支持 EC_SIGN_P256EC_SIGN_P384。在现代系统中,ECDSA 通常因其性能和效率而备受青睐。

混合链

在同一证书链中使用不同的算法系列可能会导致某些系统出现问题。为缓解潜在问题,我们建议为 RSA 和 ECDSA 分别设置链。

查看支持的密钥大小

虽然同一系列中较大的密钥大小可提供更高的安全性,但这些密钥也会导致更多数据通过网络存储和传输。此外,密钥大小越大,加密和签名操作有时可能需要更长时间,不过这种差异可能难以察觉。

对于持久性更长的密钥(例如与根 CA 或长期存在的从属 CA 关联的密钥),您可以使用的密钥大小比其他密钥具有更高的安全性。例如,您可以为根 CA 使用 4096 位 RSA 密钥,为生命周期较短的从属 CA 使用 2048 位 RSA 密钥。

为 CA 密钥选择签名算法

为 CA 密钥选择签名算法时,请考虑以下步骤:

  1. 选择算法系列。

    如果您要创建链接到现有根 CA 的从属 CA,请使用与根 CA 相同的系列。

    如果您要创建新的根 CA,但需要使用不支持 ECDSA 的旧版系统,请使用其中一种 RSA 签名算法

    否则,如果您不符合上述任何条件,我们建议您使用一种椭圆曲线签名算法

  2. 仅限 RSA:选择签名算法。

    如果您希望使用不支持 PSS 的旧版库或框架,请使用 RSA_SIGN_PKCS1 算法之一。

    否则,请使用 RSA_SIGN_PSS 算法之一。

  3. 选择密钥大小。

    对于预期生命周期为数年的新根 CA 或下级 CA,我们建议您使用相应算法系列可用的最大密钥大小。

    • 对于 RSA,支持的最大密钥大小为 4096 位。
    • 对于 ECDSA,支持的最大密钥大小为 384 位。

    对于生命周期较短的下级 CA,您可以使用较小的密钥大小,例如 RSA 为 2048 位,ECDSA 为 256 位。

使用客户管理的密钥

您可以将 CA 配置为使用在您自己的 Cloud KMS 项目中管理的新非对称签名密钥或现有非对称签名密钥。此选项可直接控制密钥的生命周期、权限和属性。 Cloud KMS 会定义密钥的算法和大小。配置和创建 CA 时,您需要选择现有的密钥版本,而不是算法参数。

区分签名密钥和加密密钥

使用 Cloud Key Management Service 密钥作为证书授权机构 (CA) 签名密钥与使用一个或多个 Cloud KMS 密钥进行存储中的数据(静态数据)加密不同。这两种密钥类型的主要区别在于它们在 Cloud KMS 中配置的 CryptoKeyPurpose

  • CA 签名密钥:需要具有 ASYMMETRIC_SIGNCryptoKeyPurpose 密钥。这些密钥用于执行数字签名操作,以签发证书。
  • 静态数据加密密钥:需要具有 ENCRYPT_DECRYPTCryptoKeyPurpose 密钥。这些密钥用于加密和解密数据。静态数据加密密钥也称为客户管理的加密密钥 (CMEK)。

无法使用单个 Cloud KMS 密钥同时进行签名和静态数据加密。这些用途是互斥的,您可以在创建密钥时设置它们。

CA Service 还支持对 CA 池等资源进行静态数据加密,您可以使用具有 ENCRYPT_DECRYPT 用途的密钥单独配置此功能。如需了解详情,请参阅创建 CA 池

准备工作

确保满足以下要求:

  • 密钥必须位于您的 Cloud KMS 项目中。请参阅创建密钥
  • 密钥的用途必须为 ASYMMETRIC_SIGN

  • 密钥的算法必须是受支持的非对称签名算法

  • 密钥必须与 CA 池位于同一位置。例如,如果您的 CA 池位于 us-central1,则 Cloud KMS 密钥也必须位于 us-central1。如需了解 Cloud KMS 位置,请参阅 Cloud KMS 位置

  • 您计划使用的密钥版本必须处于启用状态。

所需的角色

为确保服务账号具有使用客户管理的密钥进行签名操作所需的权限,请让您的管理员向 Cloud Key Management Service 密钥上的服务账号授予 Cloud Key Management Service CryptoKey Signer/Verifier (roles/cloudkms.signerVerifier) IAM 角色。

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

您的管理员还可以通过自定义角色或其他预定义角色向服务账号授予所需的权限。

获取密钥版本资源 ID

创建 CA 时,您必须提供特定 Cloud KMS CryptoKeyVersion 的完整资源 ID。复制此字符串,以便在 CA 创建过程中使用。

所需资源 ID 格式如下:

projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KMS_KEY/cryptoKeyVersions/VERSION

替换以下内容:

  • KMS_PROJECT_ID:包含您的 KMS 密钥的项目的 ID。
  • LOCATION:KMS 密钥的位置。此位置必须与您的 CA 池位置相同。
  • KEY_RING:KMS 密钥环的名称。
  • KMS_KEY:KMS 密钥的名称。
  • VERSION:KMS 密钥版本。

如需了解详情,请参阅获取 Cloud KMS 资源 ID。在创建证书授权机构时使用此 ID。

后续步骤