本頁說明如何建立及使用 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 憑證總覽。
- 請確認您擁有要用於 Google 代管 SSL 憑證的網域名稱。如果使用 Cloud Domains,請參閱「註冊網域」一文。
請確認您已為專案啟用 Compute Engine API。
權限
如要按照本指南操作,您必須能在專案中建立及修改 SSL 憑證。如要這麼做,必須符合下列任一條件:
- 您是專案擁有者或編輯者 (
roles/owner
或roles/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 憑證。
- 前往 Trusted Cloud 控制台的「傳統憑證」分頁。
前往「傳統憑證」 - 按一下「建立 SSL 憑證」。
- 輸入憑證名稱,並視需要輸入說明。
- 選取「建立 Google 代管憑證」。
- 新增網域。
- 點選「建立」。
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
資源。
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 憑證的狀態。
- 前往 Trusted Cloud 控制台的「傳統憑證」分頁。
前往「傳統憑證」 - 選用:篩選 SSL 憑證清單。
- 查看「狀態」欄。
- 如要查看更多詳細資料,請按一下憑證名稱。
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
狀態後,您就可以在建立負載平衡器時使用該憑證,詳情請參閱下列操作說明指南:
- 設定具有 Compute Engine 後端的全域外部應用程式負載平衡器
- 設定後端為 Compute Engine 的傳統版應用程式負載平衡器
- 設定具有 SSL Proxy 的外部 Proxy 網路負載平衡器
您也可以使用這個工具更新現有的負載平衡器,詳情請參閱:
主控台
使用Trusted Cloud 控制台 Trusted Cloud 更新全域外部應用程式負載平衡器或外部 Proxy 網路負載平衡器時,系統會自動將 SSL 憑證與正確的目標 Proxy 建立關聯。
- 前往 Trusted Cloud 控制台的「Load balancing」(負載平衡) 頁面。
前往「Load balancing」(負載平衡) 頁面 - 點選負載平衡器的名稱。
- 按一下「編輯」圖示 。
- 按一下「前端設定」。
- 按一下正確的前端 (必須是 HTTPS、HTTP/2、SSL)。
- 按一下「其他憑證」,然後從下拉式選單中選取 Google 管理的憑證。
- 點選「建立」。
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
資源。
每個目標 HTTPS Proxy 或目標 SSL Proxy 都必須參照至少一個 SSL 憑證。目標 Proxy 可以參照多個 SSL 憑證。 詳情請參閱負載平衡資源配額與限制中的「目標集區和目標 Proxy」。
步驟 3:驗證目標 Proxy 關聯
建立或更新負載平衡器後,您可以確認 SSL 憑證是否與負載平衡器的目標 Proxy 建立關聯。
如果您還不知道目標 Proxy 的名稱,請使用 gcloud compute target-https-proxies list
和 gcloud 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 位址。
如果 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) 快取記錄,因此 dig
或 nslookup
指令可能會傳回快取值。如果您使用 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.goog
或 letsencrypt.org
,或兩者都加入。如果沒有 CAA 記錄,預設行為是允許 pki.goog
和 letsencrypt.org
。
DOMAIN. CAA 0 issue "pki.goog" DOMAIN. CAA 0 issue "letsencrypt.org"
系統會盡力支援 letsencrypt.org
憑證。為確保最佳可靠性,請同時允許 pki.goog
和 letsencrypt.org
。如果您只指定其中一個 CA,系統只會使用該 CA 建立及續約憑證。我們不建議採用這種做法。
首次建立憑證時, Trusted Cloud 會選取 pki.goog
或 letsencrypt.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 憑證,請按照下列步驟操作:
開始建立替代的 Google 代管 SSL 憑證。此時憑證不會生效。
更新目標 Proxy,使參照憑證清單包含替代 SSL 憑證和目前的 SSL 憑證。更新目標 Proxy 的步驟因情況而異,如下所示:
請再等待 30 分鐘,確保所有 Google Front Ends (GFE) 都能使用替代憑證。
更新目標 Proxy,從參照憑證清單中移除要替換的 SSL 憑證。更新目標 Proxy 的步驟因情況而異,如下所示:
等待 10 分鐘,確認負載平衡器使用的是替代 SSL 憑證,而非舊憑證。
再次更新目標 Proxy,移除舊的 SSL 憑證資源。如果目標 Proxy 不再參照 SSL 憑證資源,您可以刪除該資源。
如果未刪除舊的 SSL 憑證,該憑證會維持「ACTIVE」狀態,直到過期為止。
從自行管理的 SSL 憑證遷移至 Google 代管的 SSL 憑證
如果要將負載平衡器從使用自行管理的 SSL 憑證遷移至使用 Google 代管的 SSL 憑證,請依序執行下列步驟:
- 建立新的 Google 代管憑證。
- 將新的 Google 代管憑證與正確的目標 Proxy 建立關聯,同時維持目標 Proxy 與現有自行管理憑證的關聯。
- 等待Google 代管憑證狀態顯示為
ACTIVE
。 - 等待 30 分鐘,讓新憑證傳播至提供服務的 Google Front End (GFE)
- 再次更新目標 Proxy,移除自行管理的憑證資源。如果目標 Proxy 不再參照自行管理 SSL 憑證資源,您可以刪除該資源。
刪除 SSL 憑證
刪除 SSL 憑證前,請確認沒有 HTTPS 或 SSL 目標 Proxy 參照這個憑證。操作方式有以下兩種:
更新參照這個憑證的目標 Proxy,將其排除。步驟如下:
如要刪除一或多個 SSL 憑證:
主控台
您可以在「Certificate Manager」(憑證管理工具) 頁面的「Classic Certificates」(傳統憑證) 分頁中,刪除全域 SSL 憑證。
- 前往 Trusted Cloud 控制台的「傳統憑證」分頁。
前往「傳統憑證」 - 選取要刪除的 SSL 憑證。
- 按一下 「Delete」(刪除)。
- 再次按一下「刪除」 確認。
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 範例。