使用 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 类型。

客户端证书

您可以选择创建和下载客户端证书以及密钥,并将其下载到客户端的宿主机以进行双向身份验证(服务器和客户端身份验证)。您无法选择 Cloud SQL 用于对客户端证书进行签名的 CA 类型。

使用 SSL/TLS 连接

从客户端连接到 Cloud SQL 实例时,您可以使用 SSL/TLS 进行直接连接,也可以使用 Cloud SQL Auth 代理Cloud SQL 语言连接器进行连接。

  • 对于直接连接,Google 强烈建议使用 Cloud SQL 中的 SSL 模式设置强制执行 SSL/TLS 加密。(可选)您还可以强制执行客户端证书验证。如需了解详情,请参阅强制执行 SSL/TLS 加密

  • 对于使用 Cloud SQL Auth 代理或 Cloud SQL 语言连接器的连接,系统会自动使用 SSL/TLS 加密这些连接,并进行客户端和服务器身份验证,而无需您下载服务器 CA 证书和客户端证书。

如需详细了解 Cloud SQL 连接选项,请参阅 Cloud SQL 连接简介

如需详细了解客户端 SSL/TLS 配置,请参阅适用于您的数据库引擎的文档

证书授权机构 (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 Cloud Certificate 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

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

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

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

Cloud SQL 托管的每个实例的 CA

此 CA 层次结构是默认的服务器 CA 模式配置。

在您创建实例时,Cloud SQL 会为每个实例创建一个新的自签名服务器 CA。如需使用此设置,请在创建实例时将 serverCaMode 配置为 GOOGLE_MANAGED_INTERNAL_CA,或不指定配置设置。

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

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

CA Service 托管的共享 CA

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

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

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

共享 CA 层次结构图

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

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

要使用的轮替命令取决于您使用的是按实例 CA 颁发的服务器证书,还是由共享 CA 颁发的服务器证书。

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

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

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

客户端证书不受服务器证书轮替影响。

SSL 证书过期

默认情况下,Cloud SQL 实例会将默认设置 GOOGLE_MANAGED_INTERNAL_CA 用作 serverCaMode。SSL 证书的有效期为 10 年。在这些证书过期之前,请执行 CA 轮替

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

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

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

后续步骤