配置 CA 签名密钥

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

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

使用 Google-owned and managed key

使用 a Google-owned and managed key时,您可以选择加密算法和密钥大小。CA Service 会在 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 位。

密钥强度等效性

私钥大小的安全性取决于所使用的算法。下表重点介绍了哪些密钥大小提供的安全性大致相当:

密钥强度 RSA 等效项 ECDSA 等效项
112 位 RSA-2048 -
128 位 RSA-3072 P-256
156 位 RSA-4096 -
192 位 - P-384

使用客户管理的密钥

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

区分签名密钥和加密密钥

将 Cloud Key Management Service 密钥用作 CA 签名密钥与使用一个或多个 Cloud KMS 密钥进行静态数据加密不同。这两种密钥类型的主要区别在于它们在 Cloud KMS 中配置的 CryptoKeyPurpose

  • CA 签名密钥 :需要使用 CryptoKeyPurposeASYMMETRIC_SIGN 的密钥。此类密钥用于执行数字签名操作以颁发证书。
  • 静态数据加密密钥 :需要使用 CryptoKeyPurposeENCRYPT_DECRYPT 的密钥。此类密钥用于加密和解密数据。静态数据加密密钥也称为客户管理的加密密钥 (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 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。

如何选择最终实体证书密钥

从 CA Service 请求最终实体证书时,您需要在证书签名请求 (CSR) 中提供公钥。最终实体证书用于对客户端和服务器进行身份验证、建立 TLS 会话或签署代码。由于最终实体证书的性能和兼容性限制与证书授权机构 (CA) 密钥不同,因此您必须选择合适的密钥算法。

为最终实体证书选择非对称密钥算法时,请考虑以下因素:

  • 客户端和服务器兼容性
    • RSA 算法:与旧版 系统具有最广泛的兼容性。对于标准最终实体证书,请使用 RSA-2048 或 RSA-3072。
    • ECDSA 算法:以小得多的 密钥大小提供与 RSA 相当的安全性,从而提高连接性能。对于现代基础架构,请使用 ECDSA P-256 或 P-384。
  • 证书有效期和密钥强度:
    • 有效期较短的证书:对于有效期为几天或几个月的证书,可以 安全地使用 RSA-2048 或 ECDSA P-256。
    • 有效期较长的证书:对于有效期为数年的证书, 请使用 RSA-3072 或 ECDSA P-384,以随着时间的推移保持加密强度。

后续步骤