配置 SSL/TLS 证书

本页面介绍了如何将实例配置为使用 SSL/TLS。详细了解如何将 SSL/TLS 与 Cloud SQL 搭配使用

概览

当您创建实例时,Cloud SQL 会自动创建一个服务器证书。 要使用 SSL/TLS,您需要创建一个客户端证书并将证书下载到 MySQL 客户端主机。如果您计划使用 SSL/TLS 进行连接,我们建议您对所有连接强制使用 SSL/TLS。

要求使用 SSL/TLS

当要求启用 SSL/TLS 时,您可以使用 Cloud SQL 代理或 SSL/TLS 证书连接到 Cloud SQL 实例。如果不要求使用 SSL/TLS,那么也会允许没有有效证书的客户端建立连接。

如需启用要求使用 SSL/TLS,请执行以下操作:

控制台

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。
    转到“Cloud SQL 实例”页面
  2. 点击实例名称,以打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 向下滚动到 SSL 连接部分。
  5. 点击只允许 SSL 连接

gcloud

gcloud sql instances patch [INSTANCE_NAME] --require-ssl
  

REST

  1. 在使用下面的请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID

    HTTP 方法和网址:

    PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    请求 JSON 正文:

    {
      "settings": {
        "ipConfiguration": {"requireSsl": "true"}
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应会收到如下所示的 JSON 响应:

服务器证书

当您创建实例时,Cloud SQL 会自动创建一个服务器证书。只要该服务器证书有效,您就无需主动管理服务器证书。但是,服务器证书是有失效日期的(即 10 年);此日期过后,该证书就不再有效,客户端也无法再使用该证书与您的实例之间建立安全连接。

您可以通过控制台获取服务器证书的相关信息,例如该证书的创建时间和到期时间。您也可以手动创建一个新证书。

控制台

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。

    转到“Cloud SQL 实例”页面

  2. 点击实例名称,以打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 向下滚动到配置 SSL 服务器证书部分。

    您可以在表中查看服务器证书的失效日期。

客户端证书

新建客户端证书

您最多可为每个实例创建 10 个客户端证书。如果某个证书的私钥丢失,您必须新建一个证书,因为私钥无法恢复。

Console(第二代)

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。

    转到“Cloud SQL 实例”页面

  2. 点击实例名称,以打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 向下滚动到配置 SSL 客户端证书部分。
  5. 点击创建客户端证书
  6. 创建客户端证书对话框中,添加一个唯一名称。
  7. 点击创建
  8. 已创建新的 SSL 证书对话框的第一部分,点击下载 client-key.pem,将私钥下载到名为 client-key.pem 的文件中。
  9. 在第二部分,点击下载 client-cert.pem,将客户端证书下载到名为 client-cert.pem 的文件中。
  10. 在第三部分,点击下载 server-ca.pem,将服务器证书下载到名为 server-ca.pem 的文件中。
  11. 点击关闭

Console(第一代)

此任务需要重启 Cloud SQL 实例。

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。

    转到“Cloud SQL 实例”页面

  2. 点击实例名称,以打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 客户端证书部分中,点击创建客户端证书
  5. 新建客户端证书对话框中,为证书指定一个唯一名称,然后点击添加
  6. 已创建新的 SSL 证书对话框的第一部分,点击链接,将私钥下载到名为 client-key.pem 的文件中。
  7. 在第二部分,点击链接,将客户端证书下载到名为 client-cert.pem 的文件中。
  8. 在第三部分,点击链接,将服务器证书下载到名为 server-ca.pem 的文件中。
  9. 点击关闭并重启以立即重启实例,或点击关闭并在稍后手动重启实例。

    启用证书需要重启实例。

gcloud

对于第一代实例,此任务需要重启 Cloud SQL 实例。

  1. 使用 ssl client-certs create 命令创建客户端证书:

    gcloud sql ssl client-certs create [CERT_NAME] client-key.pem --instance=[INSTANCE_NAME]
    
  2. 使用 ssl client-certs describe 命令检索您刚刚创建的证书的公钥,并将其复制到 client-cert.pem 文件中:

    gcloud sql ssl client-certs describe [CERT_NAME] --instance=[INSTANCE_NAME] --format="value(cert)" > client-cert.pem
    
  3. 使用 instances describe 命令将服务器证书复制到 server-ca.pem 文件:

    gcloud sql instances describe [INSTANCE_NAME]  --format="value(serverCaCert.cert)" > server-ca.pem
    
  4. 重启实例以启用证书和 SSL/TLS 配置更改(对于第一代实例)。

    gcloud sql instances restart [INSTANCE_NAME]
    

REST

对于第一代实例,此任务需要重启 Cloud SQL 实例。

  1. 创建一个 SSL/TLS 证书,为其指定对于此实例唯一的名称:

    在使用下面的请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID
    • client-cert-name:客户端证书名称

    HTTP 方法和网址:

    POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts

    请求 JSON 正文:

    {
      "commonName" : "client-cert-name"
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应会收到如下所示的 JSON 响应:

  2. 将响应中引号内的所有证书内容(不包括引号本身)复制到本地文件中,具体如下:
    1. serverCaCert.cert 复制到 server-ca.pem
    2. clientCert.cert 复制到 client-cert.pem
    3. certPrivateKey 复制到 client-key.pem
  3. 重启实例(对于第一代实例):

    在使用下面的请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID
    • activation-policy:激活政策为 ALWAYSNEVER

    HTTP 方法和网址:

    POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/restart

    请求 JSON 正文:

    {
      "settings": {
        "activationPolicy": "activation-policy"
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应会收到如下所示的 JSON 响应:

    {
      "kind": "sql#operation",
      "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "RESTART",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

此时,您会获得如下结果:

  • 另存为 server-ca.pem 的服务器证书。
  • 另存为 client-cert.pem 的客户端公钥证书。
  • 另存为 client-key.pem 的客户端私钥。

根据您在建立连接时所使用工具的不同,这三个项目的指定方式也会有所不同。例如,使用 MySQL 客户端建立连接时,这三个文件分别是 --ssl-ca--ssl-cert--ssl-key 命令选项的值。如需查看使用 MySQL 客户端和 SSL/TLS 的连接示例,请参阅使用 MySQL 客户端建立连接

后续步骤