使用 Google 代管的 SSL 憑證

本頁說明如何建立及使用 Compute Engine Google 代管的 SSL 憑證。

如要使用 Certificate Manager 建立 Google 代管的憑證,請參閱部署總覽

Google 代管的 SSL 憑證是網域驗證 (DV) 憑證,由Trusted Cloud by S3NS 取得及管理。每個憑證支援多個主機名稱,且 Google 會自動續約憑證。

下列負載平衡器支援 Google 代管憑證:

  • 全域外部應用程式負載平衡器
  • 傳統版應用程式負載平衡器
  • 外部 Proxy 網路負載平衡器 (搭配目標 SSL Proxy)

Compute Engine Google 代管 SSL 憑證不支援區域外部應用程式負載平衡器、區域內部應用程式負載平衡器或跨區域內部應用程式負載平衡器。對於這些負載平衡器,您可以選擇使用 Compute Engine 自行管理的 SSL 憑證,或考慮改用 Certificate Manager

您也可以在 Google Kubernetes Engine 中使用代管的 SSL 憑證。詳情請參閱「使用 Google 代管的 SSL 憑證」。

您可以在建立負載平衡器之前、期間或之後建立 Google 代管憑證。本頁假設您是在建立負載平衡器之前或之後建立 Compute Engine 憑證,而不是在建立期間。如要在建立負載平衡器時建立憑證,請參閱負載平衡器操作說明頁面。

事前準備

權限

如要按照本指南操作,您必須能在專案中建立及修改 SSL 憑證。如要這麼做,必須符合下列任一條件:

  • 您是專案擁有者或編輯者 (roles/ownerroles/editor)。
  • 您在專案中同時具備 Compute 安全性管理員角色 (compute.securityAdmin) 和 Compute 網路管理員角色 (compute.networkAdmin)。
  • 您擁有專案的自訂角色,其中包含 compute.sslCertificates.* 權限,以及 compute.targetHttpsProxies.*compute.targetSslProxies.* 其中一項或兩項權限,視您使用的負載平衡器類型而定。

步驟 1:建立 Google 代管的 SSL 憑證

您可以在建立負載平衡器之前、期間或之後建立 Google 代管憑證。在Trusted Cloud 控制台中建立負載平衡器時,您可以使用 Trusted Cloud 控制台建立憑證。您也可以在建立負載平衡器之前或之後建立憑證。這個步驟說明如何建立憑證,以便稍後新增至一或多個負載平衡器。

如果您已建立 Google 代管的 SSL 憑證,可以略過這個步驟。

主控台

您可以在「Certificate Manager」(憑證管理工具) 頁面的「Classic Certificates」(傳統憑證) 分頁上,使用全域 SSL 憑證。

  1. 前往 Trusted Cloud 控制台的「傳統憑證」分頁。
    前往「傳統憑證」
  2. 按一下「建立 SSL 憑證」
  3. 輸入憑證名稱,並視需要輸入說明。
  4. 選取「建立 Google 代管憑證」
  5. 新增網域。
  6. 點選「建立」

gcloud

如要為全域外部應用程式負載平衡器或外部 Proxy 網路負載平衡器建立全域 Google 代管的 SSL 憑證,請使用 gcloud compute ssl-certificates create 指令:

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --description=DESCRIPTION \
    --domains=DOMAIN_LIST \
    --global

更改下列內容:

  • CERTIFICATE_NAME:全域 SSL 憑證的名稱
  • DESCRIPTION:全域 SSL 憑證的說明
  • DOMAIN_LIST:單一網域名稱,或以半形逗號分隔的網域名稱清單,用於這個憑證

Terraform

如要建立 Google 代管的 SSL 憑證,請使用 google_compute_managed_ssl_certificate 資源。

resource "google_compute_managed_ssl_certificate" "lb_default" {
  provider = google-beta
  name     = "myservice-ssl-cert"

  managed {
    domains = ["example.com"]
  }
}

API

建立 Google 管理的憑證資源 sslCertificates.insert 方法,並將 PROJECT_ID 替換為您的專案 ID。

POST https://compute.s3nsapis.fr/compute/v1/projects/<var>PROJECT_ID</var>/global/sslCertificates
{
  "name": "ssl-certificate-name",
  "managed": {
    "domains": [
      "www.example.com"
    ]
  },
  "type": "MANAGED"
}

查看 Google 代管的 SSL 憑證狀態

主控台

您可以在「Certificate Manager」頁面的「Classic Certificates」分頁中,查看全域 SSL 憑證的狀態。

  1. 前往 Trusted Cloud 控制台的「傳統憑證」分頁。
    前往「傳統憑證」
  2. 選用:篩選 SSL 憑證清單。
  3. 查看「狀態」欄。
  4. 如要查看更多詳細資料,請按一下憑證名稱。

gcloud

如要判斷 Google 代管憑證的狀態,可以使用 gcloud compute 指令。執行適當的指令後,請注意下列事項:

  • 管理狀態
  • 網域狀態

如要列出 Google 代管的 SSL 憑證,請使用 gcloud compute ssl-certificates list 指令搭配 --global 旗標。

gcloud compute ssl-certificates list \
   --global

您可以使用 gcloud compute ssl-certificates describe 指令,並取代 CERTIFICATE_NAME

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
   --global \
   --format="get(name,managed.status, managed.domainStatus)"

此時,憑證狀態和網域狀態為 PROVISIONING。 完成本頁的步驟後,狀態會變更為 ACTIVE

如要進一步瞭解狀態,請參閱疑難排解頁面

步驟 2:建立或更新負載平衡器

如要成為 ACTIVE,Google 代管的 SSL 憑證必須與負載平衡器建立關聯,具體來說,就是負載平衡器的目標 Proxy。

建立 SSL 憑證並處於 PROVISIONING 狀態後,您就可以在建立負載平衡器時使用該憑證,詳情請參閱下列操作說明指南:

您也可以使用這個工具更新現有的負載平衡器,詳情請參閱:

主控台

使用Trusted Cloud 控制台 Trusted Cloud 更新全域外部應用程式負載平衡器或外部 Proxy 網路負載平衡器時,系統會自動將 SSL 憑證與正確的目標 Proxy 建立關聯。

  1. 前往 Trusted Cloud 控制台的「Load balancing」(負載平衡) 頁面。
    前往「Load balancing」(負載平衡) 頁面
  2. 點選負載平衡器的名稱。
  3. 按一下「編輯」圖示
  4. 按一下「前端設定」
  5. 按一下正確的前端 (必須是 HTTPS、HTTP/2、SSL)。
  6. 按一下「其他憑證」,然後從下拉式選單中選取 Google 管理的憑證。
  7. 點選「建立」

gcloud

如要將 SSL 憑證與全域外部應用程式負載平衡器的目標 HTTPS Proxy 建立關聯,請使用 gcloud compute target-https-proxies update 指令,並搭配 --global-ssl-certificates--global 旗標:

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --ssl-certificates SSL_CERTIFICATE_LIST \
    --global-ssl-certificates \
    --global

如要將 SSL 憑證與外部 Proxy 網路負載平衡器的目標 SSL Proxy 建立關聯,請使用 gcloud compute target-ssl-proxies update 指令:

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --ssl-certificates SSL_CERTIFICATE_LIST

更改下列內容:

  • TARGET_PROXY_NAME:負載平衡器的目標 Proxy 名稱
  • SSL_CERTIFICATE_LIST:以逗號分隔的 SSL 憑證資源清單

    請確認參照憑證清單包含所有舊的有效 SSL 憑證,以及新的 SSL 憑證。gcloud compute target-ssl-proxies update 指令會以新值覆寫 --ssl-certificates 的原始值。

Terraform

如要建立目標 HTTPS Proxy,請使用 google_compute_target_https_proxy 資源。

如要建立目標 SSL Proxy,請使用 google_compute_target_ssl_proxy 資源。

resource "google_compute_target_https_proxy" "lb_default" {
  provider = google-beta
  name     = "myservice-https-proxy"
  url_map  = google_compute_url_map.lb_default.id
  ssl_certificates = [
    google_compute_managed_ssl_certificate.lb_default.name
  ]
  depends_on = [
    google_compute_managed_ssl_certificate.lb_default
  ]
}

每個目標 HTTPS Proxy 或目標 SSL Proxy 都必須參照至少一個 SSL 憑證。目標 Proxy 可以參照多個 SSL 憑證。 詳情請參閱負載平衡資源配額與限制中的「目標集區和目標 Proxy」。

步驟 3:驗證目標 Proxy 關聯

建立或更新負載平衡器後,您可以確認 SSL 憑證是否與負載平衡器的目標 Proxy 建立關聯。

如果您還不知道目標 Proxy 的名稱,請使用 gcloud compute target-https-proxies listgcloud compute target-ssl-proxies list 指令,列出專案中的目標 Proxy。

執行下列指令,驗證 SSL 憑證與目標 Proxy 之間的關聯。

全域外部應用程式負載平衡器:

gcloud compute target-https-proxies describe TARGET_HTTPS_PROXY_NAME \
    --global \
    --format="get(sslCertificates)"

外部 Proxy 網路負載平衡器:

gcloud compute target-ssl-proxies describe TARGET_SSL_PROXY_NAME \
    --format="get(sslCertificates)"

此時,Google 代管的憑證狀態可能仍為「PROVISIONING」 Trusted Cloud ,表示系統正在與憑證授權單位合作核發憑證。佈建 Google 管理的憑證最多可能需要 60 分鐘。

步驟 4:更新 DNS A 和 AAAA 記錄,指向負載平衡器的 IP 位址

您的 DNS 記錄可能是在註冊商網站、DNS 主機或網際網路服務供應商 (ISP) 管理。

管理記錄時,請注意下列事項:

  • 請確保網域和所有子網域的 DNS A 記錄 (適用於 IPv4) 和 DNS AAAA 記錄 (適用於 IPv6) 指向與負載平衡器轉送規則相關聯的 IP 位址。

    如要佈建 SSL 憑證,請確保 A 和 AAAA 記錄在公開 DNS 中指向負載平衡器的 IP 位址。

  • 如果您使用 Cloud DNS,請設定網域更新名稱伺服器

  • 如果 Google 管理的憑證中有多個網域,請為所有網域和子網域新增或更新 DNS 記錄,指向負載平衡器的 IP 位址。如果 Google 管理的憑證中的網域和子網域指向的 IP 與負載平衡器的轉送規則 IP 位址不同,憑證驗證就會失敗。

  • 請確保 DNS 供應商一律會回應所有全域網域驗證要求

如果符合下列條件,受管理憑證就會佈建成功:

  • 網域的 DNS 記錄使用 CNAME 記錄,指向其他網域。
  • 其他網域含有指向負載平衡器 IP 位址的 A 或 AAAA 記錄。

執行 dig 指令即可驗證設定。舉例來說,假設您的網域是 www.example.com。執行下列 dig 指令:

dig www.example.com
; <<>> DiG 9.10.6 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31748
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.example.com.           IN  A

;; ANSWER SECTION:
www.example.com. 1742    IN      CNAME   example.net.
example.net.      12     IN      A       34.95.64.10

;; Query time: 43 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Jun 03 16:54:44 PDT 2020
;; MSG SIZE  rcvd: 193

在本範例中,34.95.64.10 是負載平衡器的 IP 位址。

網際網路上的 DNS 解析器不受Trusted Cloud控制。這些解析器會根據資源記錄集的存留時間 (TTL) 快取記錄,因此 dignslookup 指令可能會傳回快取值。如果您使用 Cloud DNS,請參閱「變更的傳播」一文。

DNS 記錄傳播時間

新更新的 DNS A 和 AAAA 記錄可能需要相當長的時間才能完全傳播。有時變更可能需要最多 72 小時才會在全球生效,但通常只需幾小時。

重新執行下列指令:

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --format="get(managed.domainStatus)"

如果網域狀態為「FAILED_NOT_VISIBLE」,可能是因為傳播尚未完成。

詳情請參閱「疑難排解」頁面中的「Google 代管的 SSL 憑證網域狀態」一節

多角度網域驗證

Trusted Cloud by S3NS 定期向憑證授權單位 (CA) 申請,以續約 Google 代管憑證。Trusted Cloud by S3NS 合作續約憑證的 CA 會使用多角度網域驗證方法,也就是多角度核發佐證 (MPIC)。在這個過程中,憑證授權單位會檢查網域的 DNS 設定,並嘗試聯絡網域 IP 位址後方的伺服器,藉此驗證網域控制權。這些驗證會從網路上多個有利位置進行。如果驗證程序失敗,Google 代管的憑證就無法續約。因此,負載平衡器會向用戶端提供過期的憑證,導致瀏覽器使用者遇到憑證錯誤,API 用戶端則會發生連線失敗的問題。

為避免 DNS 記錄設定錯誤導致多角度網域驗證失敗,請注意下列事項:

  • 網域和任何子網域的 DNS A 記錄 (IPv4) 和 DNS AAAA (IPv6) 記錄只能指向與負載平衡器轉送規則相關聯的 IP 位址。記錄中如有任何其他地址,驗證就會失敗。
  • CA 會驗證 DNS 記錄,並從多個位置查詢 DNS 記錄。請確保 DNS 供應商一律回應所有全球網域驗證要求。
  • 使用 GeoDNS (根據要求位置傳回不同的 IP 位址) 或位置型 DNS 政策可能會導致回應不一致,並造成驗證失敗。如果 DNS 供應商使用 GeoDNS,請停用這項服務,或確保所有區域傳回的負載平衡器 IP 位址相同。
  • 您必須在 DNS 設定中明確指定負載平衡器的 IP 位址。CDN 等中繼層可能會導致無法預測的行為。IP 位址必須可直接存取,要求路徑中不得有任何重新導向、防火牆或 CDN。詳情請參閱本文的「CDN 後方的負載平衡器」一節。
  • 建議您使用所選的 DNS 全域傳播檢查工具,確認所有相關 DNS 記錄在全球各地都能正確且一致地解析。

確認設定變更

設定 DNS 記錄後,您可以建立新憑證並將其連線至負載平衡器,連同現有憑證一併驗證是否正確。這個步驟會強制立即向 CA 檢查憑證佈建作業,讓您在幾分鐘內驗證設定變更。否則,現有憑證的自動續約作業可能需要數天或數週才能完成,導致設定狀態不明。

如果憑證狀態變成 ACTIVE,表示憑證已核發,因此 DNS 設定正確無誤。此時,建議您移除先前的憑證,以免同一個網域有兩個不同的憑證。這個程序不會中斷負載平衡器的流量。

新憑證可做為驗證工具,建立憑證即表示使用 MPIC 的多角度網域驗證功能可正常運作。

CDN 後方的負載平衡器

如果負載平衡器已啟用 CDN,要求路徑中的部分第三方 CDN 供應商可能會導致驗證要求失敗。如果 CDN 供應商主動代理 HTTP(S) 流量,就可能發生這種情況。

在這種情況下,建議您將憑證遷移至 Certificate Manager,並使用 DNS 授權方法佈建 Google 代管憑證。後者不需要 CA 聯絡負載平衡器。

步驟 5:使用 OpenSSL 進行測試

憑證和網域狀態為「有效」後,負載平衡器最多需要 30 分鐘,才會開始使用 Google 代管的 SSL 憑證。

如要測試,請執行下列 OpenSSL 指令,並將 DOMAIN 替換為您的 DNS 名稱,IP_ADDRESS 則替換為負載平衡器的 IP 位址。

echo | openssl s_client -showcerts -servername DOMAIN -connect IP_ADDRESS:443 -verify 99 -verify_return_error

這個指令會輸出負載平衡器向用戶端提供的憑證。除了其他詳細資訊外,輸出內容應包含憑證鏈和 Verify return code: 0 (ok)

其他程序

本節包含管理憑證的其他程序。

使用 Google 代管的 SSL 憑證支援多個網域

支援多個主體別名。每個 Google 代管的 SSL 憑證最多支援每個 Google 代管 SSL 憑證的網域數量上限

如果網域數量超過上限,您必須申請多個 Google 管理的憑證。舉例來說,如果您嘗試建立 Google 管理的憑證,但網域數量超過上限 1 個,Google 就不會核發任何憑證。您必須建立兩個以上的 Google 管理憑證,並明確指出每個憑證關聯的網域。

Trusted Cloud 實作伺服器名稱指標 (SNI),如 RFC 6066 中所定義。

為確保憑證在續訂程序的網域驗證步驟中不會失敗,請參閱 DNS A 和 AAAA 記錄的規定

更新 Google 代管的 SSL 憑證

Trusted Cloud 佈建效期 90 天的管理型憑證。憑證到期前約一個月,系統會自動啟動憑證續約程序。為此,請選擇同時位於網域憑證授權單位授權 (CAA) DNS 記錄和憑證授權單位清單中的憑證授權單位 (CA)。

續約時使用的 CA 可能與核發先前版本 Google 代管憑證的 CA 不同。如要控管Trusted Cloud 用於續約的 CA,請確保網域的 CAA DNS 記錄指定 Google 代管憑證使用的 CA 清單中,只有一個 CA。

為確保憑證在續訂程序的網域驗證步驟中不會失敗,請參閱 DNS A 和 AAAA 記錄的規定

指定可核發 Google 代管憑證的 CA

在 DNS 軟體中,建議您明確授權要允許核發 Google 代管憑證的 CA。雖然並非所有情況都必須這麼做,但在某些情況下,這是必要步驟。

舉例來說,如果您使用外部 DNS 服務,且 Google 管理的憑證遭到撤銷,該服務可能只會驗證由一或多個特定 CA 核發的新憑證。

如要執行這項操作,請建立或修改 CAA 記錄,加入 pki.googletsencrypt.org,或兩者都加入。如果沒有 CAA 記錄,預設行為是允許 pki.googletsencrypt.org

DOMAIN. CAA 0 issue "pki.goog"
DOMAIN. CAA 0 issue "letsencrypt.org"

系統會盡力支援 letsencrypt.org 憑證。為確保最佳可靠性,請同時允許 pki.googletsencrypt.org。如果您只指定其中一個 CA,系統只會使用該 CA 建立及續約憑證。我們不建議採用這種做法。

首次建立憑證時, Trusted Cloud 會選取 pki.googletsencrypt.org,並使用該憑證核發憑證。Google 續約憑證時,可能會由其他 CA 核發憑證,具體取決於您在 CAA 記錄中指定的 CA (如果您已建立 CAA 記錄)。在下列任一情況下,您的憑證可能會由其他 CA 續約:

  • 您的網域沒有 DNS CAA 記錄。
  • 您已在 DNS CAA 記錄中加入這兩個 CA。

詳情請參閱 RFC CAA DNS 記錄

letsencrypt.org問題 國際化網域名稱 (IDN)pki.goog目前不支援 IDN。

如果您使用 Cloud DNS,請參閱這篇文章瞭解如何新增記錄,並務必將 --type 標記設為 CAA

取代現有的 SSL 憑證

如要替換現有的 SSL 憑證,請按照下列步驟操作:

  1. 開始建立替代的 Google 代管 SSL 憑證。此時憑證不會生效。

  2. 更新目標 Proxy,使參照憑證清單包含替代 SSL 憑證和目前的 SSL 憑證。更新目標 Proxy 的步驟因情況而異,如下所示:

  3. 等待系統完成佈建替代 SSL 憑證。 佈建作業最多可能需要 60 分鐘。佈建完成後,「憑證狀態」會變成 ACTIVE

  4. 請再等待 30 分鐘,確保所有 Google Front Ends (GFE) 都能使用替代憑證。

  5. 更新目標 Proxy,從參照憑證清單中移除要替換的 SSL 憑證。更新目標 Proxy 的步驟因情況而異,如下所示:

  6. 等待 10 分鐘,確認負載平衡器使用的是替代 SSL 憑證,而非舊憑證。

  7. 再次更新目標 Proxy,移除舊的 SSL 憑證資源。如果目標 Proxy 不再參照 SSL 憑證資源,您可以刪除該資源

如果未刪除舊的 SSL 憑證,該憑證會維持「ACTIVE」狀態,直到過期為止。

從自行管理的 SSL 憑證遷移至 Google 代管的 SSL 憑證

如果要將負載平衡器從使用自行管理的 SSL 憑證遷移至使用 Google 代管的 SSL 憑證,請依序執行下列步驟:

  1. 建立新的 Google 代管憑證
  2. 將新的 Google 代管憑證與正確的目標 Proxy 建立關聯,同時維持目標 Proxy 與現有自行管理憑證的關聯。
  3. 等待Google 代管憑證狀態顯示為 ACTIVE
  4. 等待 30 分鐘,讓新憑證傳播至提供服務的 Google Front End (GFE)
  5. 再次更新目標 Proxy,移除自行管理的憑證資源。如果目標 Proxy 不再參照自行管理 SSL 憑證資源,您可以刪除該資源

刪除 SSL 憑證

刪除 SSL 憑證前,請確認沒有 HTTPS 或 SSL 目標 Proxy 參照這個憑證。操作方式有以下兩種:

如要刪除一或多個 SSL 憑證:

主控台

您可以在「Certificate Manager」(憑證管理工具) 頁面的「Classic Certificates」(傳統憑證) 分頁中,刪除全域 SSL 憑證。

  1. 前往 Trusted Cloud 控制台的「傳統憑證」分頁。
    前往「傳統憑證」
  2. 選取要刪除的 SSL 憑證。
  3. 按一下 「Delete」(刪除)
  4. 再次按一下「刪除」確認。

gcloud

如要刪除全域 SSL 憑證 (適用於全域外部應用程式負載平衡器或外部 Proxy 網路負載平衡器),請使用 gcloud compute ssl-certificates delete 指令搭配 --global 指令:

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --global

更改下列內容:

  • CERTIFICATE_NAME:SSL 憑證的名稱

後續步驟

  • 如要排解 SSL 憑證問題,請參閱「排解 SSL 憑證問題」。
  • 如要使用 Terraform 指令碼建立 Google 代管憑證,請參閱「外部應用程式負載平衡器的 Terraform 模組範例」頁面上的 Cloud Run 範例