使用 SSL/TLS 证书进行授权

本页面介绍 Cloud SQL 如何使用自行管理的安全套接字层 (SSL)/传输层安全协议 (TLS) 证书安全地连接到 Cloud SQL 实例。

概览

Cloud SQL 支持使用传输层安全协议 (SSL/TLS) 连接到实例。如果传输中的数据位于物理边界内部,由 Google 或 Google 授权代理方掌控,我们通常会对这些数据进行身份验证,但默认情况下可能不会进行加密。如果您使用实例的公共 IP 地址连接到该实例,则必须强制使用 SSL/TLS 证书,以确保数据在传输期间安全无虞。SSL/TLS 是用于加密通过互联网发送的数据的标准协议。如果您的数据未经加密,则任何人都可以检查您的数据包并读取机密信息。

最安全的加密方法称为非对称密码;它需要两个加密密钥:一个公钥和一个私钥。从本质上讲,您使用公钥加密数据,使用私钥进行解密。服务器和客户端计算机都采用同一套客户端密钥。

在 Cloud SQL 中,公钥名为 client-cert.pem,私钥名为 client-key.pem。服务器还会生成自己的证书,名为 server-ca.pem

您的应用需要三个密钥才能成功连接。妥善存储这些密钥;任何有权访问这些密钥的人员都有可能连接或拦截您的数据。您之后无法从服务器检索私钥,因此如果丢失,则需要创建新的客户端证书来替换以前在用的证书。同样,当服务器生成新的 server-ca.pem 文件时,您需要将其下载并存储到 PostgreSQL 客户端的主机上,替换掉现有文件。

SSL/TLS 证书

您必须具有服务器证书授权机构 (CA) 证书才能进行 SSL 连接。当您创建实例时,Cloud SQL 会自动创建一个服务器证书。只要此服务器证书有效,您就无需主动管理服务器证书。但是,服务器证书是有失效日期的(即 10 年);此日期过后,该证书就不再有效,客户端也无法再使用该证书与您的实例之间建立安全连接。您也可以手动创建一个新证书

您可以自行创建客户端证书。每个 Cloud SQL 实例最多只能有 10 个客户端证书。

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

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

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

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

更新好所有 PostgreSQL 客户端后,向 Cloud SQL 实例发送命令以轮替至新的服务器证书。完成此操作后,系统将不再识别旧服务器证书,只有新服务器证书可以使用。

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

强制执行 SSL/TLS 加密

将您的 Cloud SQL 实例配置为接受 SSL/TLS 连接时,该实例将支持 SSL/TLS 连接,但仍然可以接受未加密的不安全连接。如果您不要求所有连接使用 SSL/TLS,则系统仍会允许未加密的连接。 因此,如果您使用公共 IP 地址访问实例,我们强烈建议您对所有连接强制执行 SSL

使用已获授权的网络

如果您的 Cloud SQL 实例使用的是公共 IP 地址,您需要在配置 SSL/TLS 时将 PostgreSQL 客户端的 IP 地址添加为已获授权的网络

在这种情况下,只有在 PostgreSQL 客户端的 IP 地址添加到此列表中后,这些客户端才有权进行连接。IP 地址可以限制为单个端点,也可以包含 CIDR 格式的范围。例如 10.50.51.310.50.51.0/26

SSL 证书有效期

与 Cloud SQL 实例关联的 SSL 证书的有效期为 10 年。该证书到期后,请执行 SSL 证书轮替。您还可以随时重置 Cloud SQL 实例的 SSL 配置。

后续步骤

  • 详细了解 PostgreSQL 如何使用 SSL/TLS