使用 SSL/TLS 证书进行授权

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

概览

Cloud SQL 支持使用 SSL/TLS 协议连接到实例。SSL/TLS 连接通过对客户端与 Cloud SQL 实例中数据库之间传输中的数据进行加密,提供一层安全保障。或者,您的 SSL/TLS 连接可以通过验证安装在 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 会在 Google CloudCertificate Authority Service (CA Service) 上托管并管理根 CA 和从属服务器 CA。Cloud 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 位密钥 椭圆曲线数字签名算法 (ECDSA),采用 256 位密钥和 SHA384 算法 椭圆曲线数字签名算法 (ECDSA),采用 256 位密钥和 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;有效期短于一年,可能会影响服务器证书的有效期。如需了解详情,请参阅管理 CA 变换

** 对于客户管理的 CA 选项,服务器证书的默认有效期为一年。但是,如果您为 CA 证书配置的有效期少于一年,那么您的服务器证书的有效期也会更短。如需详细了解如何在创建时配置 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 的 Cloud SQL 实例(serverCaMode 设置为 GOOGLE_MANAGED_INTERNAL_CA),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 服务中使用 CA 变换流程。如需了解详情,请参阅管理 CA 变换

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

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

后续步骤