管理安全資料傳輸層 (SSL)/傳輸層安全標準 (TLS) 憑證

本頁說明如何管理用戶端和伺服器憑證授權單位 (CA) 憑證。

管理用戶端憑證

請按照下列程序,在 Cloud SQL 中管理用戶端憑證。

擷取用戶端憑證

您可以擷取用戶端憑證的公開金鑰部分,但無法擷取私密金鑰。如果您已遺失私密金鑰,則必須建立新的憑證。

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中,選取「Connections」(連結)
  4. 選取「安全性」分頁標籤。
  5. 在「管理用戶端憑證」中,按一下憑證名稱。
  6. 「SSL Client Certificate」(SSL 用戶端憑證) 頁面會隨即開啟,並顯示用戶端憑證 (client-cert.pem) 和憑證下載連結。

使用 ssl client-certs describe 指令來擷取用戶端憑證的公開金鑰:

gcloud sql ssl client-certs describe CERT_NAME \
--instance=INSTANCE_NAME \
--format="value(cert)" > client-cert.pem
  1. 列出執行個體上的憑證,取得您要擷取之憑證的指紋:

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#sslCertsList",
      "items": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint"
          "instance": "instance-id",
          "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint",
          "createTime": "2020-02-13T00:10:20.595Z",
          "expirationTime": "2030-02-10T00:11:20.595Z"
        }
      ]
    }
    

    記錄要擷取憑證的 sha1Fingerprint 欄位。請勿加上引號。

  2. 擷取憑證:

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • sha1FingerPrint:憑證的 sha1FingerPrint

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#sslCert",
      "certSerialNumber": "cert-serial-number",
      "cert": "cert-value",
      "commonName": "ca-server-name",
      "sha1Fingerprint": "sha1Fingerprint"
      "instance": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint",
      "createTime": "2020-02-13T00:10:20.595Z",
      "expirationTime": "2030-02-10T00:11:20.595Z"
    }
    
  3. 將引號內的所有憑證資料複製到檔案中,例如 client-cert.pem。請勿複製引號本身。
  1. 列出執行個體上的憑證,取得您要擷取之憑證的指紋:

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

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

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#sslCertsList",
      "items": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint"
          "instance": "instance-id",
          "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint",
          "createTime": "2020-02-13T00:10:20.595Z",
          "expirationTime": "2030-02-10T00:11:20.595Z"
        }
      ]
    }
    

    記錄要擷取憑證的 sha1Fingerprint 欄位。請勿加上引號。

  2. 擷取憑證:

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • sha1FingerPrint:憑證的 sha1FingerPrint

    HTTP 方法和網址:

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

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#sslCert",
      "certSerialNumber": "cert-serial-number",
      "cert": "cert-value",
      "commonName": "ca-server-name",
      "sha1Fingerprint": "sha1Fingerprint"
      "instance": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint",
      "createTime": "2020-02-13T00:10:20.595Z",
      "expirationTime": "2030-02-10T00:11:20.595Z"
    }
    
  3. 將引號內的所有憑證資料複製到檔案中,例如 client-cert.pem。請勿複製引號本身。

刪除用戶端憑證

刪除用戶端憑證後,資料庫伺服器會更新,不需要重新啟動。

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中,選取「Connections」(連結)
  4. 選取「安全性」分頁標籤。
  5. 在「管理用戶端憑證」中,找到要刪除的憑證,然後按一下 。
  6. 在「Delete client certificate」(刪除用戶端憑證) 窗格中,按一下「Ok」(確定)

使用 ssl client-certs delete 指令刪除用戶端憑證:

gcloud sql ssl client-certs delete CERT_NAME \
--instance=INSTANCE_NAME
  1. 列出執行個體上的憑證,取得您要刪除之憑證的指紋:

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#sslCertsList",
      "items": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint"
          "instance": "instance-id",
          "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint",
          "createTime": "2020-02-13T00:10:20.595Z",
          "expirationTime": "2030-02-10T00:11:20.595Z"
        }
      ]
    }
    

    記錄要刪除憑證的 sha1Fingerprint 欄位。請勿加上引號。

  2. 刪除憑證:

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • sha1FingerPrint:憑證的 sha1FingerPrint

    HTTP 方法和網址:

    DELETE https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method DELETE `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
  1. 列出執行個體上的憑證,取得您要刪除之憑證的指紋:

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

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

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#sslCertsList",
      "items": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint"
          "instance": "instance-id",
          "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint",
          "createTime": "2020-02-13T00:10:20.595Z",
          "expirationTime": "2030-02-10T00:11:20.595Z"
        }
      ]
    }
    

    記錄要刪除憑證的 sha1Fingerprint 欄位。請勿加上引號。

  2. 刪除憑證:

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • sha1FingerPrint:憑證的 sha1FingerPrint

    HTTP 方法和網址:

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

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method DELETE `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

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

管理伺服器 CA 憑證 (每個執行個體的 CA)

本節說明如何管理 Cloud SQL 內部建立的伺服器 CA 憑證。這是 Cloud SQL 的預設伺服器 CA 模式。在這個憑證授權單位階層中,Cloud SQL 會為每個執行個體建立伺服器 CA。

輪換伺服器 CA 憑證

如果收到憑證即將到期的通知,或是想啟動輪替程序,請按照下列步驟完成輪替。開始輪替前,您必須在執行個體上安裝新的伺服器 CA。如果已建立新的伺服器 CA,可以略過下列程序的第一個步驟。

  1. 建立新的伺服器 CA。
  2. 下載新的伺服器 CA 憑證資訊。
  3. 更新用戶端,以使用新的伺服器 CA 憑證資訊。
  4. 完成輪替,這樣會將使用中的憑證移至「上一個」運算單元,並將新增的憑證更新為使用中的憑證。

將以 PEM 檔案編碼的新伺服器 CA 憑證下載至本機環境:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中,選取「Connections」(連結)
  4. 選取「安全性」分頁標籤。
  5. 按一下即可展開「管理憑證」
  6. 選取「輪換 CA 憑證」

    如果沒有符合資格的憑證,就無法使用輪替選項。您必須建立新的伺服器 CA 憑證

  7. 按一下「下載認證」

將下載的檔案複製到用戶端主機,取代現有的 server-ca.pem 檔案,更新所有 MySQL 用戶端以使用新資訊。

當您更新完用戶端之後,完成輪替:

  1. 返回「安全性」分頁標籤。
  2. 按一下即可展開「管理憑證」
  3. 選取「輪換 CA 憑證」
  4. 確認您的用戶端正確連線。
  5. 如果有任何用戶端未使用剛輪替的憑證進行連線,您可以選取「Rollback CA certificate」(復原 CA 憑證)復原到先前的設定。

  1. 建立伺服器 CA 憑證:
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE
  2. 將憑證資訊下載至本機 PEM 檔案:
    gcloud sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
  3. 將下載的檔案複製到用戶端主機,取代現有的 server-ca.pem 檔案,更新所有用戶端以使用新資訊。
  4. 當您更新完用戶端之後,完成輪替:
    gcloud sql ssl server-ca-certs rotate \
    --instance=INSTANCE_NAME
          
  5. 確認您的用戶端正確連線。
  6. 如果有任何用戶端未使用剛輪替的憑證進行連線,您可以復原到先前的設定。

  1. 下載伺服器 CA 憑證: <

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "certs": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint",
          "instance": "instance-id",
          "createTime": "2020-02-10T17:18:54.935Z",
          "expirationTime": "2030-02-07T17:19:54.935Z"
        },
        {
          "kind": "sql#sslCert",
           certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint",
          "instance": "instance-id",
          "createTime": "2019-11-14T22:43:56.458Z",
          "expirationTime": "2029-11-11T22:44:56.458Z"
        }
      ],
      "activeVersion": "active-version",
      "kind": "sql#instancesListServerCas"
    }
    
    
  2. 完成輪替: <

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "" \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
  1. 下載伺服器 CA 憑證: <

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

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

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/listServerCas"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/listServerCas" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "certs": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint",
          "instance": "instance-id",
          "createTime": "2020-02-10T17:18:54.935Z",
          "expirationTime": "2030-02-07T17:19:54.935Z"
        },
        {
          "kind": "sql#sslCert",
           certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint",
          "instance": "instance-id",
          "createTime": "2019-11-14T22:43:56.458Z",
          "expirationTime": "2029-11-11T22:44:56.458Z"
        }
      ],
      "activeVersion": "active-version",
      "kind": "sql#instancesListServerCas"
    }
    
    
  2. 完成輪替: <

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

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

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

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

如果您嘗試輪替憑證時收到錯誤訊息,指出 No upcoming/previous Server CA Certificate exists,請確認您是在使用每個執行個體 CA 層級的執行個體上執行指令。您可以使用 gcloud sql instances describe 指令,查看為 Cloud SQL 執行個體設定的 CA 層級。詳情請參閱「查看執行個體資訊」。

復原憑證輪替作業

當您完成憑證輪替之後,您的用戶端必須全都使用新憑證來連線至 Cloud SQL 執行個體。如果用戶端未正確更新為使用新憑證資訊,將無法使用 SSL/TLS 連線至您的執行個體。如果發生這種情況,您可以回復先前的憑證設定。

回溯作業會將有效憑證移至「即將推出」運算單元 (取代任何「即將推出」憑證)。「上一個」憑證會成為有效憑證,將憑證設定還原為完成輪替前的狀態。

復原至上一個憑證設定:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中,選取「Connections」(連結)
  4. 選取「安全性」分頁標籤。
  5. 按一下即可展開「管理憑證」
  6. 選取「復原 CA 憑證」

    如果沒有符合資格的憑證,就無法使用復原選項。否則,回溯動作會在幾秒後完成。

gcloud sql ssl server-ca-certs rollback \
--instance=INSTANCE_NAME
   
  1. 下載伺服器 CA 憑證: <

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "certs": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint",
          "instance": "instance-id",
          "createTime": "2020-02-10T17:18:54.935Z",
          "expirationTime": "2030-02-07T17:19:54.935Z"
        },
        {
          "kind": "sql#sslCert",
           certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint",
          "instance": "instance-id",
          "createTime": "2019-11-14T22:43:56.458Z",
          "expirationTime": "2029-11-11T22:44:56.458Z"
        }
      ],
      "activeVersion": "active-version",
      "kind": "sql#instancesListServerCas"
    }
    
    
  2. 複製要還原版本的 sha1Fingerprint 欄位。

    找出 createTime 值比 activeVersion 顯示的 sha1Fingerprint 值早的版本。

  3. 復原輪替: <x0A> <x0A> <x0A> <x0A> <x0A> <

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa

    JSON 要求主體:

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

    如要傳送要求,請展開以下其中一個選項:

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
  1. 下載伺服器 CA 憑證: <

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

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

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/listServerCas"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/listServerCas" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "certs": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint",
          "instance": "instance-id",
          "createTime": "2020-02-10T17:18:54.935Z",
          "expirationTime": "2030-02-07T17:19:54.935Z"
        },
        {
          "kind": "sql#sslCert",
           certSerialNumber": "cert-serial-number",
          "cert": "cert-value",
          "commonName": "ca-server-name",
          "sha1Fingerprint": "sha1Fingerprint",
          "instance": "instance-id",
          "createTime": "2019-11-14T22:43:56.458Z",
          "expirationTime": "2029-11-11T22:44:56.458Z"
        }
      ],
      "activeVersion": "active-version",
      "kind": "sql#instancesListServerCas"
    }
    
    
  2. 複製要還原版本的 sha1Fingerprint 欄位。

    找出 createTime 值比 activeVersion 顯示的 sha1Fingerprint 值早的版本。

  3. 復原輪替: <x0A> <x0A> <x0A> <x0A> <x0A> <

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

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

    JSON 要求主體:

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

    如要傳送要求,請展開以下其中一個選項:

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

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

如果嘗試回溯憑證 CA 輪替時收到 No upcoming/previous Server CA Certificate exists 錯誤訊息,請確認您是在使用每個執行個體 CA 層級的執行個體上執行指令。您可以使用 gcloud sql instances describe 指令,查看為 Cloud SQL 執行個體設定的 CA 層級。詳情請參閱「查看執行個體資訊」。

啟動輪替

您不必等待 Cloud SQL 的電子郵件,即可開始輪替。 你隨時可以發起一項。當您開始輪替時,會建立新憑證,並將它放進「接下來的」運算單元中。如果要求時「即將到期」欄位已有憑證,系統會刪除該憑證。只能有一個即將到期的憑證。

開始輪替:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中,選取「Connections」(連結)
  4. 選取「安全性」分頁標籤。
  5. 按一下即可展開「管理憑證」
  6. 按一下「建立新的 CA 憑證」
  7. 選取「輪換 CA 憑證」

    如果沒有符合資格的憑證,就無法使用輪替選項。

  8. 按照「輪替伺服器 CA 憑證」的說明,完成輪替。
  1. 開始輪替:
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
         
  2. 按照「輪替伺服器 CA 憑證」的說明,完成輪替。
  1. 使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "" \
    "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
  2. 按照「輪替伺服器 CA 憑證」的說明,完成輪替。
  1. 使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

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

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
  2. 按照「輪替伺服器 CA 憑證」的說明,完成輪替。

取得伺服器 CA 憑證的相關資訊

您可以取得伺服器 CA 憑證的相關資訊,例如到期日或提供的加密等級。

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中,選取「Connections」(連結)
  4. 選取「安全性」分頁標籤。

    在「管理伺服器 CA 憑證」中,您可以在表格中查看伺服器 CA 憑證的到期日。

    如要查看憑證類型,請使用 gcloud sql ssl server-ca-certs list --instance=INSTANCE_NAME 指令。

gcloud sql ssl server-ca-certs list \
--instance=INSTANCE_NAME

描述執行個體時,您可以查看伺服器 CA 憑證的詳細資料:

使用任何要求資料之前,請先替換以下項目:

  • project-id:專案 ID
  • instance-id:執行個體 ID

HTTP 方法和網址:

GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=serverCaCert

如要傳送要求,請展開以下其中一個選項:

執行下列指令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=serverCaCert"

執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=serverCaCert" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "serverCaCert":
  {
    "kind": "sql#sslCert",
    "certSerialNumber": "cert-serial-number",
    "cert": "cert-value-",
    "commonName": "ca-server-name",
    "sha1Fingerprint": "sha1Fingerprint",
    "instance": "instance-id",
    "createTime": "2020-02-10T17:18:54.935Z",
    "expirationTime": "2030-02-07T17:19:54.935Z"
  }
}

描述執行個體時,您可以查看伺服器 CA 憑證的詳細資料:

使用任何要求資料之前,請先替換以下項目:

  • project-id:專案 ID
  • instance-id:執行個體 ID

HTTP 方法和網址:

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

如要傳送要求,請展開以下其中一個選項:

執行下列指令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=serverCaCert"

執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=serverCaCert" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "serverCaCert":
  {
    "kind": "sql#sslCert",
    "certSerialNumber": "cert-serial-number",
    "cert": "cert-value-",
    "commonName": "ca-server-name",
    "sha1Fingerprint": "sha1Fingerprint",
    "instance": "instance-id",
    "createTime": "2020-02-10T17:18:54.935Z",
    "expirationTime": "2030-02-07T17:19:54.935Z"
  }
}

查看 CA 憑證內容

您可以使用 openssl storeutl 查看 CA 憑證的內容。

執行 sql ssl server-ca-certs list 指令時,您可能會從先前的輪替相關作業取得多個 CA 憑證。

gcloud
  1. 請執行下列指令:
    gcloud sql ssl server-ca-certs list \
      --instance=INSTANCE_NAME \
      --format='value(cert)' > temp_cert.pem

    INSTANCE_NAME 替換為執行個體的名稱。

  2. 使用 openssl 檢查 CA 憑證的內容。
  3. openssl storeutl -noout -text temp_cert.pem
       

查看伺服器憑證的內容

您可以使用 openssl s_client 查看伺服器憑證的內容。
gcloud

如要查看伺服器憑證內容,請執行下列指令:

openssl s_client -starttls mysql -connect INSTANCE_IP_ADDRESS:3306

INSTANCE_IP_ADDRESS 替換為執行個體的 IP 位址。

外部伺服器 SSL 憑證到期通知

  • 如果外部伺服器的伺服器 CA 憑證即將到期,請輪替 SSL 憑證,包括地端執行個體上的伺服器 CA 憑證。這個步驟取決於內部部署執行個體的管理方式。舉例來說,如果您使用的是 RDS 伺服器 CA 憑證、Cloud SQL 伺服器 CA 憑證或資料庫一般伺服器 CA 憑證,步驟可能會有所不同。
  • 如果用戶端憑證即將過期,您需要產生新的憑證和金鑰。這項限制適用於 Google Cloud代管 SSL 憑證和自行簽署的憑證。
  • 使用新的 SSL 憑證更新 Cloud SQL 來源代表執行個體。

管理伺服器憑證 (共用 CA)

本節說明如何管理使用共用 CA 或客戶管理 CA 的執行個體伺服器憑證。

如要選擇使用共用 CA 做為執行個體的伺服器 CA 模式,請在建立執行個體時,為 serverCaMode 設定 (Cloud SQL Admin API) 或 --server-ca-mode 旗標 (gcloud CLI) 指定 GOOGLE_MANAGED_CAS_CA

如要將客戶管理的 CA 做為執行個體的伺服器 CA 模式,您必須在建立執行個體時,指定 CUSTOMER_MANAGED_CAS_CA 設定 (Cloud SQL Admin API) 或 --server-ca-mode 旗標 (gcloud CLI),且必須有有效的 CA 集區和 CA。serverCaMode詳情請參閱「使用客戶代管的 CA」。

輪替伺服器憑證

如果收到伺服器憑證即將到期的通知,或想啟動輪替作業,請按照下列步驟完成輪替。開始輪替前,請務必先為即將進行的輪替建立新的伺服器憑證。如果已為即將進行的輪替作業建立新的伺服器憑證,則可以略過下列程序的第一個步驟。

如要在執行個體上輪替伺服器憑證,請執行下列步驟:

  1. 如需新伺服器憑證,請建立憑證

  2. 如果用戶端已信任根 CA,則可略過這個步驟。不過,如需更新用戶端的伺服器 CA 資訊,請按照下列步驟操作:

    1. 下載最新的伺服器 CA 資訊。
    2. 更新用戶端,使用最新的伺服器 CA 資訊。
  3. 完成輪替,將使用中的憑證移至上一個運算單元,並將新憑證更新為使用中的憑證。

將以 PEM 檔案編碼的伺服器 CA 憑證資訊下載至本機環境:

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中,選取「Connections」(連結)
  4. 選取「安全性」分頁標籤。
  5. 按一下即可展開「管理憑證」
  6. 確認「輪替伺服器憑證」選項顯示為可用選項,但請先不要選取。

    如果沒有符合資格的憑證,就無法使用輪替選項。您必須建立新的伺服器憑證

  7. 按一下「下載憑證」

將下載的檔案複製到用戶端主機,取代現有的 server-ca.pem 檔案,即可更新所有 MySQL 用戶端,以使用新資訊。

當您更新完用戶端之後,完成輪替:

  1. 返回「安全性」分頁標籤。
  2. 按一下即可展開「管理憑證」
  3. 選取「輪替憑證」
  4. 在「確認憑證輪替」對話方塊中,按一下「輪替」
  5. 確認您的用戶端正確連線。

    如果有任何用戶端未使用剛輪替的憑證進行連線,您可以選取「Rollback certificate」復原到先前的設定。

  1. 如要建立伺服器憑證,請使用下列指令:
    gcloud sql ssl server-certs create \
    --instance=INSTANCE
  2. INSTANCE 替換為執行個體的名稱。
  3. 請確認您使用的是最新版 CA 組合。 如果您使用的不是最新版 CA 組合,請執行下列指令,將執行個體的最新伺服器 CA 資訊下載至本機 PEM 檔案:
    gcloud sql ssl server-certs list \
    --format="value(ca_cert.cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/server-ca.pem

    或者,您也可以從本頁面的根和區域 CA 憑證組合表格下載 CA 組合。

    然後將下載的檔案複製到用戶端主機,取代現有的 server-ca.pem 檔案,更新所有用戶端以使用新的伺服器 CA 資訊。

  4. 更新所有用戶端 (如需更新) 後,請完成輪替:
    gcloud sql ssl server-certs rotate \
    --instance=INSTANCE_NAME
          
  5. 確認您的用戶端正確連線。

    如果有任何用戶端未使用剛輪替的伺服器憑證進行連線,請復原到先前的設定。

  1. 建立伺服器憑證。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/addServerCertificate

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "" \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/addServerCertificate"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/addServerCertificate" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2024-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    
  2. 如要下載伺服器 CA 憑證資訊,可以使用下列指令。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "caCerts": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "CERT_SERIAL_NUMBER_CA_CERT_ONE",
          "cert": "CERT_VALUE",
          "commonName": "CA_SERVER_NAME",
          "sha1Fingerprint": "sha1Fingerprint_CA_CERT_ONE",
          "instance": "INSTANCE_NAME",
          "createTime": "2024-07-10T17:18:54.935Z",
          "expirationTime": "2034-07-10T17:19:54.935Z"
        },
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "CERT_SERIAL_NUMBER_CA_CERT_TWO",
          "cert": "CERT_VALUE",
          "commonName": "CA_SERVER_NAME",
          "sha1Fingerprint": "sha1Fingerprint_CA_CERT_TWO",
          "instance": "INSTANCE_NAME",
          "createTime": "2024-07-14T22:43:56.458Z",
          "expirationTime": "2034-11-11T22:44:56.458Z"
        }
      ],
      "serverCerts": [
      {
        "kind": "sql#sslCert",
        "certSerialNumber": "CERT_SERIAL_NUMBER_SERVER_CERT_ONE",
        "cert": "CERT_VALUE"
        "commonName": "SUBJECT_VALUE",
        "sha1Fingerprint": "sha1Fingerprint_SERVER_CERT_ONE",
        "instance": "INSTANCE_NAME",
        "createTime": "2024-09-16T18:11:39Z",
        "expirationTime": "2025-09-16T18:11:38Z"
      },
      {
        "kind": "sql#sslCert",
        "certSerialNumber": "CERT_SERIAL_NUMBER_SERVER_CERT_TWO",
        "cert": "CERT_VALUE"
        "commonName": "SUBJECT_VALUE",
        "sha1Fingerprint": "sha1Fingerprint_SERVER_CERT_TWO",
        "instance": "INSTANCE_NAME",
        "createTime": "2024-09-10T20:56:06Z",
        "expirationTime": "2025-09-10T20:56:05Z"
      }
    ],
      "activeVersion": "sha1Fingerprint_SERVER_CERT_TWO",
      "kind": "sql#instancesListServerCertificates"
    }
    
    
  3. 完成輪替。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "" \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2024-09-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/operation-id",
      "targetProject": "PROJECT_ID"
    }
    
  1. 建立伺服器憑證。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/addServerCertificate

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/addServerCertificate"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/addServerCertificate" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2024-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    
  2. 如要下載伺服器 CA 憑證資訊,可以使用下列指令。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "caCerts": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "CERT_SERIAL_NUMBER_CA_CERT_ONE",
          "cert": "CERT_VALUE",
          "commonName": "CA_SERVER_NAME",
          "sha1Fingerprint": "sha1Fingerprint_CA_CERT_ONE",
          "instance": "INSTANCE_NAME",
          "createTime": "2024-07-10T17:18:54.935Z",
          "expirationTime": "2034-07-10T17:19:54.935Z"
        },
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "CERT_SERIAL_NUMBER_CA_CERT_TWO",
          "cert": "CERT_VALUE",
          "commonName": "CA_SERVER_NAME",
          "sha1Fingerprint": "sha1Fingerprint_CA_CERT_TWO",
          "instance": "INSTANCE_NAME",
          "createTime": "2024-07-14T22:43:56.458Z",
          "expirationTime": "2034-11-11T22:44:56.458Z"
        }
      ],
      "serverCerts": [
      {
        "kind": "sql#sslCert",
        "certSerialNumber": "CERT_SERIAL_NUMBER_SERVER_CERT_ONE",
        "cert": "CERT_VALUE"
        "commonName": "SUBJECT_VALUE",
        "sha1Fingerprint": "sha1Fingerprint_SERVER_CERT_ONE",
        "instance": "INSTANCE_NAME",
        "createTime": "2024-09-16T18:11:39Z",
        "expirationTime": "2025-09-16T18:11:38Z"
      },
      {
        "kind": "sql#sslCert",
        "certSerialNumber": "CERT_SERIAL_NUMBER_SERVER_CERT_TWO",
        "cert": "CERT_VALUE"
        "commonName": "SUBJECT_VALUE",
        "sha1Fingerprint": "sha1Fingerprint_SERVER_CERT_TWO",
        "instance": "INSTANCE_NAME",
        "createTime": "2024-09-10T20:56:06Z",
        "expirationTime": "2025-09-10T20:56:05Z"
      }
    ],
      "activeVersion": "sha1Fingerprint_SERVER_CERT_TWO",
      "kind": "sql#instancesListServerCertificates"
    }
    
    
  3. 完成輪替。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2024-09-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

復原憑證輪替

完成伺服器憑證輪替後,所有用戶端都必須使用新憑證連線至 Cloud SQL 執行個體。如果用戶端未正確更新為使用新憑證資訊,將無法使用 SSL/TLS 連線至您的執行個體。如果發生這種情況,您可以復原先前的憑證設定。

回溯作業會將有效憑證移至「即將推出」運算單元,並取代任何「即將推出」憑證。「上一個」憑證會成為有效憑證,並將憑證設定還原至輪替完成前的狀態。

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中,選取「Connections」(連結)
  4. 選取「安全性」分頁標籤。
  5. 按一下即可展開「管理憑證」
  6. 選取「復原伺服器憑證」

    如果沒有符合資格的憑證,就無法使用復原選項。

  7. 在「確認憑證復原」對話方塊中,選取「復原」

    回溯作業可能需要幾秒鐘才能完成。

gcloud sql ssl server-certs rollback \
--instance=INSTANCE_NAME
   
  1. 列出伺服器憑證。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "caCerts": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "CERT_SERIAL_NUMBER_CA_CERT_ONE",
          "cert": "CERT_VALUE",
          "commonName": "CA_SERVER_NAME",
          "sha1Fingerprint": "sha1Fingerprint_CA_CERT_ONE",
          "instance": "INSTANCE_NAME",
          "createTime": "2024-07-10T17:18:54.935Z",
          "expirationTime": "2034-07-10T17:19:54.935Z"
        },
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "CERT_SERIAL_NUMBER_CA_CERT_TWO",
          "cert": "CERT_VALUE",
          "commonName": "CA_SERVER_NAME",
          "sha1Fingerprint": "sha1Fingerprint_CA_CERT_TWO",
          "instance": "INSTANCE_NAME",
          "createTime": "2024-07-14T22:43:56.458Z",
          "expirationTime": "2034-11-11T22:44:56.458Z"
        }
      ],
      "serverCerts": [
      {
        "kind": "sql#sslCert",
        "certSerialNumber": "CERT_SERIAL_NUMBER_SERVER_CERT_ONE",
        "cert": "CERT_VALUE"
        "commonName": "SUBJECT_VALUE",
        "sha1Fingerprint": "sha1Fingerprint_SERVER_CERT_ONE",
        "instance": "INSTANCE_NAME",
        "createTime": "2024-09-16T18:11:39Z",
        "expirationTime": "2025-09-16T18:11:38Z"
      },
      {
        "kind": "sql#sslCert",
        "certSerialNumber": "CERT_SERIAL_NUMBER_SERVER_CERT_TWO",
        "cert": "CERT_VALUE"
        "commonName": "SUBJECT_VALUE",
        "sha1Fingerprint": "sha1Fingerprint_SERVER_CERT_TWO",
        "instance": "INSTANCE_NAME",
        "createTime": "2024-09-10T20:56:06Z",
        "expirationTime": "2025-09-10T20:56:05Z"
      }
    ],
      "activeVersion": "sha1Fingerprint_SERVER_CERT_TWO",
      "kind": "sql#instancesListServerCertificates"
    }
    
    
  2. 複製要還原版本的 sha1Fingerprint 欄位。

    找出 createTime 值比顯示為 activeVersionsha1Fingerprint 值早的版本。

  3. 復原輪替。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate

    JSON 要求主體:

    {
      "rotateServerCertificateContext": {"nextVersion": "sha1Fingerprint"}
    }
    

    如要傳送要求,請展開以下其中一個選項:

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    
  1. 列出伺服器憑證。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/listServerCertificates" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "caCerts": [
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "CERT_SERIAL_NUMBER_CA_CERT_ONE",
          "cert": "CERT_VALUE",
          "commonName": "CA_SERVER_NAME",
          "sha1Fingerprint": "sha1Fingerprint_CA_CERT_ONE",
          "instance": "INSTANCE_NAME",
          "createTime": "2024-07-10T17:18:54.935Z",
          "expirationTime": "2034-07-10T17:19:54.935Z"
        },
        {
          "kind": "sql#sslCert",
          "certSerialNumber": "CERT_SERIAL_NUMBER_CA_CERT_TWO",
          "cert": "CERT_VALUE",
          "commonName": "CA_SERVER_NAME",
          "sha1Fingerprint": "sha1Fingerprint_CA_CERT_TWO",
          "instance": "INSTANCE_NAME",
          "createTime": "2024-07-14T22:43:56.458Z",
          "expirationTime": "2034-11-11T22:44:56.458Z"
        }
      ],
      "serverCerts": [
      {
        "kind": "sql#sslCert",
        "certSerialNumber": "CERT_SERIAL_NUMBER_SERVER_CERT_ONE",
        "cert": "CERT_VALUE"
        "commonName": "SUBJECT_VALUE",
        "sha1Fingerprint": "sha1Fingerprint_SERVER_CERT_ONE",
        "instance": "INSTANCE_NAME",
        "createTime": "2024-09-16T18:11:39Z",
        "expirationTime": "2025-09-16T18:11:38Z"
      },
      {
        "kind": "sql#sslCert",
        "certSerialNumber": "CERT_SERIAL_NUMBER_SERVER_CERT_TWO",
        "cert": "CERT_VALUE"
        "commonName": "SUBJECT_VALUE",
        "sha1Fingerprint": "sha1Fingerprint_SERVER_CERT_TWO",
        "instance": "INSTANCE_NAME",
        "createTime": "2024-09-10T20:56:06Z",
        "expirationTime": "2025-09-10T20:56:05Z"
      }
    ],
      "activeVersion": "sha1Fingerprint_SERVER_CERT_TWO",
      "kind": "sql#instancesListServerCertificates"
    }
    
    
  2. 複製要還原版本的 sha1Fingerprint 欄位。

    找出 createTime 值比顯示為 activeVersionsha1Fingerprint 值早的版本。

  3. 復原輪替。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:專案 ID
    • INSTANCE_ID:執行個體 ID

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate

    JSON 要求主體:

    {
      "rotateServerCertificateContext": {"nextVersion": "sha1Fingerprint"}
    }
    

    如要傳送要求,請展開以下其中一個選項:

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate"

    將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rotateServerCertificate" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_ID",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

查看 CA 憑證內容

您可以使用 openssl storeutl 公用程式查看 CA 憑證的內容。

執行 sql ssl server-certs list 指令時,由於信任鏈結的關係,您一律會取得多個 CA 憑證。您也可能會從先前的輪替相關作業取得多個 CA 憑證。

gcloud
  1. 請執行下列指令:
    gcloud sql ssl server-certs list \
      --instance=INSTANCE_NAME \
      --format='value(cert)' > temp_cert.pem

    INSTANCE_NAME 替換為執行個體的名稱。

  2. 使用 openssl 檢查 CA 憑證的內容。
  3. openssl storeutl -noout -text temp_cert.pem
       

查看伺服器憑證的內容

您可以使用 openssl 公用程式和 sql ssl server-certs list 指令,查看伺服器憑證的內容。

執行 gcloud CLI 指令時,由於信任鏈的關係,您一律會取得多個 CA 憑證。您也可能從先前的輪替相關作業取得多個 CA 憑證。

gcloud

只使用 openssl s_client

openssl s_client -starttls mysql -connect INSTANCE_IP_ADDRESS:3306

INSTANCE_IP_ADDRESS 替換為執行個體的 IP 位址。

使用 gcloud CLIopenssl storeutl

  1. 請執行下列指令:
    gcloud sql ssl server-certs list \
      --instance=INSTANCE_NAME \
      --format='value(ssl_cert.cert)' > temp_cert.pem

    INSTANCE_NAME 替換為執行個體的名稱。

  2. 使用 openssl 檢查伺服器憑證的內容。
  3. openssl storeutl -noout -text temp_cert.pem
       

下載共用 CA 的根和區域 CA 憑證組合

如果您使用 Google 代管的共用 CA 設定,可以從下表下載根 CA 和區域 CA 憑證套件。

這些憑證套件不適用於使用執行個體專屬或客戶管理 CA 選項的執行個體。

地區名稱 位置 憑證組合
全球
所有區域的 CA 所有位置 global.pem
亞洲
asia-east1 台灣 asia-east1.pem
asia-east2 香港 asia-east2.pem
asia-northeast1 東京 asia-northeast1.pem
asia-northeast2 大阪 asia-northeast2.pem
asia-northeast3 首爾 asia-northeast3.pem
asia-south1 孟買 asia-south1.pem
asia-south2 德里 asia-south2.pem
asia-southeast1 新加坡 asia-southeast1.pem
asia-southeast2 雅加達 asia-southeast2.pem
非洲
africa-south1 約翰尼斯堡 africa-south1.pem
澳洲
australia-southeast1 雪梨 australia-southeast1.pem
australia-southeast2 墨爾本 australia-southeast2.pem
歐洲
europe-central2 華沙 europe-central2.pem
europe-north1 芬蘭 europe-north1.pem
europe-north2 斯德哥爾摩 europe-north2.pem
europe-southwest1 馬德里 europe-southwest1.pem
europe-west1 比利時 europe-west1.pem
europe-west2 倫敦 europe-west2.pem
europe-west3 法蘭克福 europe-west3.pem
europe-west4 荷蘭 europe-west4.pem
europe-west6 蘇黎世 europe-west6.pem
europe-west8 米蘭 europe-west8.pem
europe-west9 巴黎 europe-west9.pem
europe-west10 柏林 europe-west10.pem
europe-west12 杜林 europe-west12.pem
中東地區
me-central1 杜哈 me-central1.pem
me-central2 達曼 me-central2.pem
me-west1 特拉維夫市 me-west1.pem
北美洲
northamerica-northeast1 蒙特婁 northamerica-northeast1.pem
northamerica-northeast2 多倫多 northamerica-northeast2.pem
northamerica-south1 墨西哥 northamerica-south1.pem
us-central1 愛荷華州 us-central1.pem
us-east1 南卡羅來納州 us-east1.pem
us-east4 北維吉尼亞州 us-east4.pem
us-east5 哥倫布 us-east5.pem
us-south1 達拉斯 us-south1.pem
us-west1 奧勒岡州 us-west1.pem
us-west2 洛杉磯 us-west2.pem
us-west3 鹽湖城 us-west3.pem
us-west4 拉斯維加斯 us-west4.pem
南美洲
southamerica-east1 聖保羅 southamerica-east1.pem
southamerica-west1 聖地亞哥 southamerica-west1.pem

重設 SSL/TLS 設定

您可以完全重設 SSL/TLS 設定。

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在 SQL 導覽選單中,選取「Connections」(連結)
  4. 前往「重設安全資料傳輸層 (SSL) 設定」部分。
  5. 按一下「重設安全資料傳輸層 (SSL) 的設定」
  1. 重新整理憑證:

    gcloud sql instances reset-ssl-config INSTANCE_NAME
  2. gcloud sql instances restart INSTANCE_NAME
  3. 建立新的用戶端憑證
  1. 重新整理憑證:

    使用任何要求資料之前,請先替換以下項目:

    • project-id:專案 ID
    • instance-id:執行個體 ID

    HTTP 方法和網址:

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

    如要傳送要求,請展開以下其中一個選項:

    執行下列指令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d "" \
    "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/resetSslConfig"

    執行下列指令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/resetSslConfig" | Select-Object -Expand Content

    您應該會收到如下的 JSON 回應:

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "UPDATE",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    
  2. 建立新的用戶端憑證

後續步驟