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

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

使用加密連線

進一步瞭解 SQL Server 如何使用加密連線

管理伺服器 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 檔案,更新所有 SQL Server 用戶端以使用新資訊。

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

  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
       

查看伺服器憑證的內容

您可以使用 nmap 查看伺服器憑證的內容。如要下載及安裝 nmap,請前往 https://nmap.org/
gcloud

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

nmap -sV -p 1433 --script ssl-cert INSTANCE_IP_ADDRESS -Pn

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 檔案,即可更新所有 SQL Server 用戶端,以使用新資訊。

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

  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
       

下載共用 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
  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"
    }
    

後續步驟