使用 SSL/TLS 证书进行授权

本页介绍了如何在应用中使用安全套接字层 (SSL)(现已更名为传输层安全协议 [TLS])对与 Cloud SQL 实例的连接进行加密。

概览

Cloud SQL 支持使用 SSL/TLS 协议连接到实例。SSL/TLS 连接通过加密客户端与 Cloud SQL 实例中数据库之间的传输中的数据,提供了一层安全保障。您可以选择通过验证安装在 Cloud SQL 实例上的服务器证书来执行服务器身份验证,以及通过验证安装在客户端上的客户端证书来执行客户端身份验证。

服务器证书

当您创建实例时,Cloud SQL 会自动创建并安装由证书授权机构 (CA) 签名的服务器证书。您可以将 CA 证书下载到客户端宿主机,并使用该证书验证 CA 和服务器 Cloud SQL 身份。(可选)您可以选择 Cloud SQL 用于对服务器证书进行签名的 CA 类型。

证书授权机构 (CA) 层次结构

本部分介绍了您可以为 Cloud SQL 实例选择的三种服务器证书授权机构 (CA)。您可以采用以下三种方法:

  • 按实例 CA:如果选择此选项,则专用于每个 Cloud SQL 实例的内部 CA 会为该实例签署服务器证书。Cloud SQL 会创建和管理这些 CA。如需选择按实例选择 CA,请在创建实例时为 serverCaMode 设置(Cloud SQL Admin API)或 --server-ca-mode 标志(gcloud CLI)指定 GOOGLE_MANAGED_INTERNAL_CA。 如果您在创建实例时未指定设置或标志,则此选项将成为实例的默认值。
  • 共享 CA:如果选择此选项,系统会使用由根 CA 和从属服务器 CA 组成的 CA 层次结构。区域中的从属服务器 CA 会对服务器证书进行签名,并在该区域中的实例之间共享。Cloud SQL 在 Certificate Authority Service (CA Service) 上托管和管理根 CA 和从属服务器 CA。 Google CloudCloud SQL 还会处理根 CA 和从属服务器 CA 的轮替,并提供指向 CA 证书捆绑包的公开链接供下载。 如需选择共享 CA,请在创建实例时为 serverCaMode 设置(Cloud SQL Admin API)或 --server-ca-mode 标志(gcloud CLI)指定 GOOGLE_MANAGED_CAS_CA

    共享 CA 选项目前为预览版

  • 客户管理的 CA:如果您选择此选项,则需要创建和管理自己的 CA 层次结构。如果您想管理自己的 CA 和证书,请选择此选项。如需选择共享 CA,您需要在 CA Service 中创建 CA 池和 CA。 在 Cloud SQL 中,在创建实例时,为 serverCaMode 设置(Cloud SQL Admin API)或 --server-ca-mode 标志(gcloud CLI)指定 CA 池和 CUSTOMER_MANAGED_CAS_CA

    客户管理的 CA 选项目前为预览版

创建实例后,您可以使用 gcloud sql instances describe 命令查看为 Cloud SQL 实例配置了哪个 CA 层次结构。如需了解详情,请参阅查看实例信息

下表比较了三种 CA 层次结构选项。

功能 实例级 CA 共享 CA 客户管理的 CA
CA 结构 为每个实例使用单独的 CA 在同一区域中的实例之间共享的根 CA 和从属 CA 您创建和管理的 CA 层次结构
加密属性 使用 SHA256 算法的 RSA 2048 位密钥 使用 256 位密钥的椭圆曲线数字签名算法 (ECDSA) 和 SHA384 算法 使用 256 位密钥的椭圆曲线数字签名算法 (ECDSA) 和 SHA384 算法
CA 有效期 10 年 根 CA 为 25 年,从属 CA 为 10 年 可配置 *
服务器证书有效期 10 年 1 年 1 年**
由用户发起的 CA 轮替? 不可以。CA 轮替由 Cloud SQL 管理
用户是否发起了服务器证书轮替?
TLS 连接的 CA 信任锚 每个实例的唯一 CA 是相应实例的信任锚。 根 CA 和从属 CA 是给定区域中所有实例的信任锚。 您创建和管理的 CA 是信任锚点。
服务器身份验证 验证 CA 即验证服务器身份,因为每个实例都有唯一的 CA。 由于服务器 CA 在多个实例之间共享,因此必须同时验证主机名和 CA,才能进行服务器身份验证。 虽然 CA 可能不会在多个实例之间共享,但您可能需要在验证 CA 的同时验证主机名。
服务器证书中的主题备用名称 (SAN) 字段 只有启用了 Private Service Connect 的实例的 SAN 字段才包含主机名(实例的 DNS 名称)。 主机名可用于服务器身份验证。如果您使用 DNS 名称作为主机名连接到 Cloud SQL 实例,则需要设置 DNS 解析。 SAN 字段包含所有类型实例的主机名(实例的 DNS 名称)。主机名可用于服务器身份验证。如果您使用 DNS 名称作为主机名连接到 Cloud SQL 实例,则需要设置 DNS 解析。 SAN 字段包含所有类型实例的主机名(实例的 DNS 名称)。主机名可用于服务器身份验证。

* 对于客户管理的 CA 选项,CA Service 中的 CA 证书的默认有效期为 10 年。您可以选择为 CA 证书配置不同的有效期。 CA 的有效期越短,可能需要更频繁地轮替 CA,并且有效期短于 1 年可能会影响服务器证书的有效期。 如需了解详情,请参阅管理 CA 轮替

** 对于客户管理的 CA 选项,服务器证书的默认有效期为 1 年。不过,如果您为 CA 证书配置的有效期短于 1 年,则服务器证书的有效期也会缩短。如需详细了解如何在创建 CA 证书时配置其有效期,请参阅 CA 证书设置创建根 CA

Cloud SQL 托管的每个实例的 CA

使用 gcloud CLI、Cloud SQL Admin API 或 Terraform 创建实例时,每个实例的 CA 层次结构是默认的服务器 CA 模式配置。

在您创建实例时,Cloud SQL 会为每个实例创建一个新的自签名服务器 CA。如需使用此设置,请在创建实例时将 serverCaMode 配置为 GOOGLE_MANAGED_INTERNAL_CA。您可以使用 Cloud SQL Admin API 或 gcloud CLIserverCaMode 配置设置保持未指定状态,也可以在 Google Cloud 控制台中选择 Google 内部证书颁发机构选项。

下图显示了每个实例的 CA 层次结构。

每个实例内部 CA 层次结构的示意图。

CA Service 托管的共享 CA

使用 Google Cloud 控制台创建实例时,共享 CA 层次结构是默认的服务器 CA 模式配置。

这种服务器 CA 模式由每个区域中的根 CA 和从属服务器 CA 组成。从属服务器 CA 会颁发服务器证书,并在区域中的实例之间共享。Cloud SQL 会处理共享区域服务器 CA 的轮替,并提供可供公众访问的链接,以便下载 CA 证书捆绑包

您可以将实例配置为使用服务器 CA 层次结构,其中发行 CA 会在同一区域中的实例之间共享。如需使用此设置,请在创建实例时将 serverCaMode 配置为 GOOGLE_MANAGED_CAS_CA

下图显示了共享 CA 层次结构。

共享 CA 层次结构图

客户管理的 CA

借助此服务器 CA 模式,您可以在 CA Service 中设置自己的 CA 层次结构。

如需在 Cloud SQL 中使用客户管理的 CA 选项,您需要在 Cloud SQL 实例所在的区域中创建 CA 池。然后,您至少要创建一个 CA。创建 Cloud SQL 实例时,请在 serverCaPool 字段中指定 CA 池的 ID,并使用 CUSTOMER_MANAGED_CAS_CA 值配置 serverCaMode 字段。CA Service 会从 CA 池提供 CA,并使用该 CA 为实例颁发服务器证书。

在 CA Service 中创建 CA 时,您可以根据自己的用例创建根 CA 或从属 CA。例如,如果您打算设置根 CA 层次结构或链接到外部 CA,则可能需要创建从属 CA。

仅当您要管理自己的 CA 和证书时,才应选择“客户管理的 CA”选项。如需了解详情,请参阅使用客户管理的 CA。客户管理的 CA 选项目前为预览版

服务器证书轮替功能的工作原理

Cloud SQL 提供了轮替服务器证书的方法,使得新证书能在旧证书失效之前无缝换入。

对于使用实例级 CA、共享 CA 或客户管理的 CA 层次结构的实例,Cloud SQL 实例的服务器证书失效前三个月左右,项目所有者会收到 Cloud SQL 发出的一封电子邮件,该邮件称该实例的证书轮替过程已开始。该电子邮件会提供实例的名称,并称 Cloud SQL 已向项目添加了新的服务器证书。现有服务器证书可以继续正常使用。实际上,实例在此时间段具有两个服务器证书。

要使用的服务器证书轮替命令取决于您使用的是单实例 CA 颁发的服务器证书,还是共享 CA 或客户管理的 CA 颁发的服务器证书。

在当前服务器证书失效之前,下载新的 server-ca.pem 文件,其中包含当前服务器证书和新服务器证书的证书信息。更新您的 SQL Server 客户端以使用新文件,方法是将其复制到所有 SQL Server 客户端宿主机上,替换掉现有文件。

更新好所有 SQL Server 客户端后,向 Cloud SQL 实例发送轮替命令(适用于每个实例的 CA)轮替命令(适用于共享 CA 或客户管理的 CA),以轮替至新的服务器证书。完成此操作后,系统将不再认可旧服务器证书,只有新服务器证书可以使用。

SSL 证书过期

对于使用实例级 CA(serverCaMode 设置为 GOOGLE_MANAGED_INTERNAL_CA)的 Cloud SQL 实例,SSL 证书的有效期为 10 年。在这些证书过期之前,请执行服务器 CA 证书轮替

对于使用共享 CA(serverCaMode 设置为 GOOGLE_MANAGED_CAS_CA)的实例(预览版),服务器证书的有效期为 1 年。在证书到期之前,请执行服务器证书轮替。根证书授权机构 (CA) 证书的有效期为 25 年,从属共享 CA 证书的有效期为 10 年。Cloud SQL 会负责轮替这些密钥。

如果您使用的是客户管理的 CA(serverCaMode 设为 CUSTOMER_MANAGED_CAS_CA)(预览版),则可以通过轮替您创建的 CA 池中的 CA 来执行 CA 证书轮替。CA 的到期期限通常为 10 年,但您可以在 CA Service 中为 CA 配置较短的有效期。

如需轮替 CA,请使用 CA Service 中的 CA 轮替流程。如需了解详情,请参阅管理 CA 轮替

如果客户端配置为验证 CA 或验证服务器证书中的主机名,则该客户端与服务器证书已过期的 Cloud SQL 实例的连接将会失败。为防止客户端连接中断,请在服务器证书过期之前轮替服务器证书。

无论您使用的是按实例 CA、共享 CA 还是客户管理的 CA 服务器模式,都可以随时重置 Cloud SQL 实例的 SSL 配置。

后续步骤