本頁面將說明如何建立及使用 Compute Engine 的 Google 代管 SSL 憑證。
如要使用 Certificate Manager 建立 Google 代管憑證,請參閱部署概覽。
Google 代管的 SSL 憑證是Google Cloud 為您的網域取得及管理的網域驗證 (DV) 憑證。這類憑證可支援每個憑證中的多個主機名稱,且 Google 會自動續約憑證。
下列負載平衡器支援 Google 代管憑證:
- 全域外部應用程式負載平衡器
- 傳統版應用程式負載平衡器
- 外部 Proxy 網路負載平衡器 (含目標 SSL Proxy)
Compute Engine Google 代管安全資料傳輸層 (SSL) 憑證不適用於區域外部應用程式負載平衡器、區域內部應用程式負載平衡器或跨區域內部應用程式負載平衡器。針對這些負載平衡器,您可以使用 Compute Engine 自行管理的 SSL 憑證,或改用 憑證管理工具。
您也可以在 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 代管憑證。在Google Cloud 控制台中建立負載平衡器的過程中,您可以使用 Google Cloud 控制台建立憑證。您也可以在建立負載平衡器之前或之後建立憑證。本步驟將說明如何建立可稍後新增至一或多個負載平衡器的憑證。
如果您已建立 Google 代管的 SSL 憑證,可以略過這個步驟。
主控台
您可以在「Certificate Manager」頁面的「Classic Certificates」分頁中,使用全球 SSL 憑證。
- 前往 Google Cloud 控制台的「Classic Certificates」分頁。
前往傳統版憑證 - 按一下「建立 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.googleapis.com/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 憑證的狀態。
- 前往 Google Cloud 控制台的「Classic Certificates」分頁。
前往傳統版憑證 - 選用:篩選 SSL 憑證清單。
- 查看「狀態」欄。
- 如要查看更多詳細資料,請按一下證照名稱。
gcloud
如要判斷 Google 代管憑證的狀態,您可以使用 gcloud compute
指令。執行適當指令後,請注意下列事項:
- 管理狀態。
- 網域狀態。
如要列出 Google 代管的 SSL 憑證,請搭配使用 --global
旗標執行 gcloud
compute ssl-certificates
list
指令。
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 網路負載平衡器
或者,您也可以使用此指令更新現有的負載平衡器,如以下所述:
主控台
使用Google Cloud 控制台更新全域外部應用程式負載平衡器或外部 Proxy 網路負載平衡器時, Google Cloud 會自動將 SSL 憑證與正確的目標 Proxy 建立關聯。
- 前往 Google Cloud 控制台的「負載平衡」頁面。
前往「負載平衡」 - 點選負載平衡器的名稱。
- 按一下「編輯」圖示 。
- 按一下「前端設定」。
- 按一下正確的前端 (必須是 HTTPS、HTTP/2、SSL)。
- 按一下「Additional certificates」,然後從下拉式清單中選取 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
。 Google 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 解析器不在Google 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 憑證網域狀態一節。
多重觀點網域驗證
Google Cloud 會定期向憑證授權單位 (CA) 索取 Google 代管憑證,Google Cloud 與之合作續發憑證的 CA 會使用多角度網域驗證方法,也就是「多角度核發佐證」(MPIC)。在這個程序中,憑證授權單位會檢查網域的 DNS 設定,並嘗試與網域 IP 位址後方的伺服器聯絡,藉此驗證網域控制權。這些驗證作業會從網路上的多個角度進行。如果驗證程序失敗,Google 代管的憑證就無法續約。因此,負載平衡器會向用戶端提供已過期的憑證,導致瀏覽器使用者遇到憑證錯誤,而 API 用戶端則發生連線失敗。
為避免 DNS 記錄設定錯誤導致多重觀點網域驗證失敗,請注意下列事項:
- 網域和任何子網域的 DNS A 記錄 (IPv4) 和 DNS AAAA (IPv6) 記錄僅指向與負載平衡器轉送規則相關聯的 IP 位址 (或多個 IP 位址)。記錄中存在任何其他地址都可能導致驗證失敗。
- CA 會執行 DNS 記錄驗證,並查詢多個位置的 DNS 記錄。請確保 DNS 供應商對所有全球網域驗證要求一律回應。
- 使用 GeoDNS (根據要求位置傳回不同的 IP 位址) 或以位置為依據的 DNS 政策,可能會導致回應不一致,並導致驗證失敗。如果 DNS 供應商使用 GeoDNS,請停用該功能,或確保所有區域都會傳回相同的負載平衡器 IP 位址。
- 您必須在 DNS 設定中明確指定負載平衡器的 IP 位址。CDN 等中介層可能會導致無法預測的行為。IP 位址必須可直接存取,且要求路徑中不得有任何重新導向、防火牆或 CDN。詳情請參閱本文件的「CDN 後方的負載平衡器」一節。
- 建議您使用所選的 DNS 全球傳播檢查工具,確認所有相關 DNS 記錄在全球範圍內都能正確解析且一致。
確認設定變更
設定 DNS 記錄後,您可以建立新的憑證,並將其連結至負載平衡器和現有的憑證,藉此驗證 DNS 記錄是否正確。這個步驟會強制與憑證授權單位進行即時憑證佈建檢查,讓您在幾分鐘內驗證設定變更。否則,自動續約現有憑證可能需要數天或數週的時間,導致設定不確定。
如果憑證狀態變成 ACTIVE
,表示憑證已核發,因此可確認 DNS 設定正確無誤。此時,建議您移除先前的憑證,以免同一個網域有兩個不同的憑證。這項程序不會中斷負載平衡器的流量。
新憑證可做為驗證工具,建立新憑證後,系統會確認使用 MPIC 的多重視角網域驗證功能是否能正確運作。
CDN 後方的負載平衡器
如果負載平衡器已啟用 CDN,要求路徑中的部分第三方 CDN 供應商可能會導致驗證要求失敗。如果 CDN 供應商正在主動代理 HTTP(S) 流量,就可能發生這種情況。
在這種情況下,建議您將憑證遷移至憑證管理工具,並使用 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 管理憑證,並明確指出每個憑證的相關網域。
Google Cloud 實作伺服器名稱指示 (SNI),如 RFC 6066 中所定義。
為確保證書在續約程序的網域驗證步驟中不會失敗,請詳閱 DNS A 和 AAAA 記錄的相關規定。
更新 Google 代管的 SSL 憑證
Google Cloud 會佈建有效期限為 90 天的受管理憑證。在到期日的一個月前,系統會自動開始續約程序。為此,您必須選擇一個憑證授權單位 (CA),該單位必須同時出現在網域的憑證授權單位授權 (CAA) DNS 記錄和CA 清單中。
用於續約的 CA 可能與核發舊版 Google 代管憑證的 CA 不同。您可以控制Google 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 建立及續購憑證。我們不建議採用這種做法。
首次建立憑證時, Google Cloud 會選取 pki.goog
或 letsencrypt.org
,並使用該憑證簽發憑證。Google 續約時,憑證可能會由其他 CA 核發,具體取決於您在 CAA 記錄中指定的 CA (如果您已建立 CA)。在下列任一情況下,您的憑證可能會由其他 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 的步驟如下:
等待替換的 SSL 憑證完成佈建作業。佈建作業最多可能需要 60 分鐘。佈建完成後,憑證狀態會變成
ACTIVE
。請再等候 30 分鐘,確保所有 Google Front End (GFE) 都能使用替換憑證。
更新目標 Proxy,將要替換的 SSL 憑證從參照憑證清單中移除。更新目標 Proxy 的步驟如下:
請等候 10 分鐘,確認負載平衡器使用的是替換的 SSL 憑證,而非舊憑證。
再次更新目標 Proxy,移除舊的 SSL 憑證資源。如果 SSL 憑證資源不再由任何目標 Proxy 參照,您可以刪除該資源。
如果您沒有刪除舊的 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 憑證。
- 前往 Google Cloud 控制台的「Classic Certificates」分頁。
前往傳統版憑證 - 選取要刪除的 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 範例。