管理 SSL/TLS 证书

本页面介绍如何管理客户端和服务器证书。

管理客户端证书

检索客户端证书

您可以检索客户端证书的公钥部分,但不能检索私钥。如果私钥丢失,则必须创建一个新证书。

控制台

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

    转到“Cloud SQL 实例”页面

  2. 点击实例名称,打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 向下滚动到配置 SSL 客户端证书部分。
  5. 点击证书名称。随即将打开 SSL 客户端证书对话框,并显示客户端证书 (client-cert.pem)。

gcloud

使用 ssl client-certs describe 命令检索客户端证书公钥:

gcloud sql ssl client-certs describe [CERT_NAME] --instance=[INSTANCE_NAME] --format="value(cert)" > client-cert.pem

REST

  1. 列出实例的证书,以获取待检索证书的指纹:

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

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

    HTTP 方法和网址:

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

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

    您应该收到类似以下内容的 JSON 响应:

    记录待检索证书的 sha1Fingerprint 字段。不要包含引号。

  2. 检索证书:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • sha1FingerPrint:证书的 sha1FingerPrint

    HTTP 方法和网址:

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

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

    您应该收到类似以下内容的 JSON 响应:

  3. 将引号内包含的所有证书数据复制到一个文件中(例如 client-cert.pem)。不要复制引号本身。

删除客户端证书

Console(第二代)

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

    转到“Cloud SQL 实例”页面

  2. 点击实例名称,打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 向下滚动到配置 SSL 客户端证书部分。
  5. 找到待删除的证书,然后点击 删除。
  6. 删除客户端证书对话框中,点击确定

Console(第一代)

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

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

    转到“Cloud SQL 实例”页面

  2. 点击实例名称,打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 向下滚动到配置 SSL 客户端证书部分,找到您要删除的证书,然后点击删除图标 删除。
  5. 删除客户端证书对话框中,点击立即重启

    必须重启实例才能完成此操作。

gcloud

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

  1. 使用 ssl client-certs delete 命令删除客户端证书:

    gcloud sql ssl client-certs delete [CERT_NAME] --instance=[INSTANCE_NAME]
    
  2. 重启实例(对于第一代实例):

    gcloud sql instances restart [INSTANCE_NAME]
    

REST

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

  1. 列出实例的证书,以获取要删除的证书的指纹:

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

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

    HTTP 方法和网址:

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

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

    您应该收到类似以下内容的 JSON 响应:

    记录待删除证书的 sha1Fingerprint 字段。不要包含引号。

  2. 删除证书:

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

    • project-id:项目 ID
    • instance-id:实例 ID
    • sha1FingerPrint:证书的 sha1FingerPrint

    HTTP 方法和网址:

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

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

    您应该收到类似以下内容的 JSON 响应:

  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"
    }
    

管理服务器证书

轮替服务器证书

如果您收到了一封有关证书失效的通知,或者您已经发起了轮替,那么必须按照以下步骤执行操作,以完成轮替:

  1. 下载新服务器证书的信息。
  2. 更新客户端,改用新服务器证书信息。
  3. 完成轮替,以将当前的有效证书转入“上一个”时隙,并将新添加的证书更新为有效证书。

控制台

下载新服务器证书的信息:

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。
    转到“Cloud SQL 实例”页面
  2. 点击实例名称,打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 向下滚动到配置 SSL 服务器证书部分。
  5. 点击创建新证书
  6. 向下滚动到下载 SSL 服务器证书部分。
  7. 点击下载

此时会显示编码为 PEM 文件的服务器证书信息,您可以将此文件下载到本地环境中:

  • 通过将下载的文件复制到客户端主机上并替换现有的 server-ca.pem 文件,将所有 MySQL 客户端更新为使用新信息。

更新完各客户端后,完成轮替:

  1. 返回配置 SSL 服务器证书部分。
  2. 点击轮替证书
  3. 确认您的客户端连接正确。
  4. 如果有客户端未使用新轮替的证书进行连接,您可以点击回滚证书回滚到先前的配置。

gcloud

  1. 将证书信息下载到本地 PEM 文件中:
    gcloud beta sql ssl server-ca-certs list --format="value(cert)" \
    --instance=[INSTANCE_NAME] > [FILE_PATH]/[FILE_NAME].pem
  2. 通过将下载的文件复制到客户端主机上并替换现有的 server-ca.pem 文件,将所有客户端更新为使用新信息。
  3. 更新完各客户端后,完成轮替:
            gcloud beta sql ssl server-ca-certs rotate --instance=[INSTANCE_NAME]
          
  4. 确认您的客户端连接正确。

    如果有客户端未使用新轮替的证书连接,您可以回滚到先前的配置。

REST

  1. 下载服务器证书:

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

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

    HTTP 方法和网址:

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

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

    您应该收到类似以下内容的 JSON 响应:

  2. 完成轮替:

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

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

    HTTP 方法和网址:

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

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

    您应该收到类似以下内容的 JSON 响应:

回滚证书轮替操作

完成证书轮替之后,您的客户端必须全部使用新证书连接到 Cloud SQL 实例。如果客户端未正确更新为使用新证书信息,它们就无法使用 SSL/TLS 连接到您的实例。如果发生这种情况,您可以回滚到先前的证书配置。

回滚操作会将当前有效证书转入“即将生效”时隙(取代当前的任何“即将生效”证书)。“上一个”证书成为当前有效证书,证书配置也会返回到完成轮替之前的状态。

要回滚到先前的证书配置,请按如下所述操作:

控制台

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。
    转到“Cloud SQL 实例”页面
  2. 点击实例名称,打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 向下滚动到配置 SSL 服务器证书部分。
  5. 点击轮替证书。完成此操作需要几秒钟的时间。
  6. 点击回滚证书

gcloud

gcloud beta sql ssl server-ca-certs rollback --instance=[INSTANCE_NAME]
   

REST

  1. 下载服务器证书:

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

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

    HTTP 方法和网址:

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

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

    您应该收到类似以下内容的 JSON 响应:

  2. 复制回滚目标版本的 sha1Fingerprint 字段。

    先找出 sha1Fingerprint 值显示为 activeVersion 的版本,然后找到 createTime 值在该版本之前并且间隔最近的那个版本。

  3. 按如下方式回滚轮替:

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

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

    HTTP 方法和网址:

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

    请求 JSON 正文:

    {
      "rotateServerCaContext": {"nextVersion": "sha1Fingerprint"}
    }
    

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

    您应该会收到类似以下内容的 JSON 响应:

启动轮替

您无需等收到 Cloud SQL 发来的电子邮件后再启动轮替, 而是可以随时启动。启动轮替后,系统会创建一个新证书,并将其置于“即将生效”时隙中。如果“即将生效”时隙中已有一个证书,该证书则会被删除;即将生效证书只能有一个。

如需启动轮替,请按如下所述操作:

控制台

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。
    转到“Cloud SQL 实例”页面
  2. 点击实例名称,打开其实例详情页面。
  3. 点击左侧导航窗格中的连接链接。
  4. 向下滚动到配置 SSL 服务器证书部分。
  5. 点击创建新证书
  6. 按照轮替服务器证书中的说明完成轮替。

gcloud

  1. 启动轮替:
         gcloud beta sql ssl server-ca-certs create --instance=[INSTANCE_NAME]
         
  2. 按照轮替服务器证书中的说明完成轮替。

REST

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

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

    HTTP 方法和网址:

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

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

    您应该收到类似以下内容的 JSON 响应:

  2. 按照轮替服务器证书中的说明完成轮替。

获取服务器证书相关信息

您可以获取有关服务器证书的信息,例如,该证书何时失效或者提供何种加密级别。

控制台

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

    转到“Cloud SQL 实例”页面

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

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

    如需查看证书类型,请使用 gcloud beta sql ssl server-ca-certs list --instance=[INSTANCE_NAME] 命令。

gcloud

gcloud beta sql ssl server-ca-certs list --instance=[INSTANCE_NAME]

REST

在描述实例时,您可以查看有关服务器证书的详细信息:

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

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

HTTP 方法和网址:

GET https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=serverCaCert

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

您应该收到类似以下内容的 JSON 响应:

重置 SSL/TLS 配置

您可以完全重置 SSL/TLS 配置。

gcloud

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

  1. 刷新证书:

    gcloud sql instances reset-ssl-config [INSTANCE_NAME]
    
  2. 重启实例以完成刷新(对于第一代实例):

    gcloud sql instances restart [INSTANCE_NAME]
    
  3. 新建客户端证书

REST

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

  1. 刷新证书:

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

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

    HTTP 方法和网址:

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

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

    您应该收到类似以下内容的 JSON 响应:

  2. 重启实例(对于第一代实例):

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

    • 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"
    }
    
  3. 新建客户端证书

后续步骤