疑難排解程序取決於使用的 SSL 憑證類型。
排解 Google 代管憑證問題
如果是 Google 代管的憑證,狀態分為兩種:
- 管理狀態
- 網域狀態
管理狀態
如要檢查憑證狀態,請執行下列指令:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(name,managed.status)"
管理狀態的值如下:
管理狀態 | 說明 |
---|---|
PROVISIONING |
Google 代管的憑證已建立完畢, Google Cloud 正在與憑證授權單位合作來簽署憑證。 DNS 和負載平衡器設定變更在網路上全面生效後,系統最多可能需要 60 分鐘才能佈建 Google 代管的憑證。如果您最近更新了 DNS 設定,變更可能需要一段時間才會全面生效。有時全球傳播最多需要 72 小時,但通常只需幾小時。如要進一步瞭解 DNS 傳播,請參閱「變更傳播」。 如果憑證仍處於 |
ACTIVE |
Google 代管的 SSL 憑證是由憑證授權單位提供。負載平衡器可能需要額外 30 分鐘才能使用。 |
PROVISIONING_FAILED |
即使憑證實際上是 ACTIVE ,您也可能會短暫看到 PROVISIONING_FAILED 。
重新檢查狀態。如果狀態維持在 PROVISIONING_FAILED ,代表 Google 代管的憑證已建立完畢,但憑證授權單位無法簽署憑證。請確認您已完成「使用 Google 代管的 SSL 憑證」一文中的所有步驟。Google Cloud 重試 佈建,直到成功或狀態變更為 PROVISIONING_FAILED_PERMANENTLY 。
|
PROVISIONING_FAILED_PERMANENTLY |
Google 代管的憑證已建立完畢,但憑證授權單位因 DNS 或負載平衡器設定問題而無法簽署憑證。在此狀態下, Google Cloud 不會重試佈建。 建立替代的 Google 代管 SSL 憑證,並確認替代憑證已與負載平衡器的目標 Proxy 建立關聯。 請驗證或完成「 使用 Google 代管的 SSL 憑證」中的所有步驟。之後,您可以 刪除無法佈建的憑證。 |
RENEWAL_FAILED |
負載平衡器或 DNS 設定發生問題,因此無法更新 Google 代管的憑證。如果受管理憑證中的任何網域或子網域,並未透過 A/AAAA 記錄指向負載平衡器的 IP 位址,續約程序就會失敗。系統會繼續使用現有的憑證,但這些憑證很快就會過期。檢查設定。 如果狀態仍為 如要進一步瞭解憑證續約,請參閱「 更新 Google 代管的 SSL 憑證」。 |
網域狀態
如要檢查網域狀態,請執行下列指令:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(managed.domainStatus)"
下表說明「網域狀態」的值。
網域狀態 | 說明 |
---|---|
PROVISIONING |
系統會為網域建立 Google 代管憑證。 Google Cloud 正在與憑證授權單位合作,簽署憑證。 |
ACTIVE |
網域已通過驗證,可佈建憑證。如果 SSL 憑證適用於多個網域,只有在所有網域都處於 ACTIVE 狀態,且憑證的管理狀態也為 ACTIVE 時,才能佈建憑證。 |
FAILED_NOT_VISIBLE |
網域的憑證佈建作業尚未完成。問題可能出在下列任一處:
PROVISIONING , Google Cloud 會繼續重試佈建,即使網域狀態為 FAILED_NOT_VISIBLE 也是如此。 |
FAILED_CAA_CHECKING |
網域的 CAA 記錄發生設定問題,因此無法佈建憑證。請確認您已 按照正確程序操作。 |
FAILED_CAA_FORBIDDEN |
網域的 CAA 記錄未指定 Google Cloud 必須使用的 CA,因此無法佈建憑證。請確認您已按照正確程序操作。 |
FAILED_RATE_LIMITED |
憑證授權單位收到的憑證簽署要求設有頻率限制,因此無法佈建憑證。您可以 佈建新憑證、切換為使用新憑證,然後刪除舊憑證,也可以聯絡Google Cloud 支援團隊。 |
代管憑證續訂
為確保憑證在續訂程序的網域驗證步驟中不會失敗,請查看 DNS A 和 AAAA 記錄的規定。
多角度網域驗證
Google Cloud 定期向憑證授權單位 (CA) 申請,以續約 Google 代管憑證。Google Cloud 合作續約憑證的 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 記錄後,您可以建立新憑證並將其連線至負載平衡器,連同現有憑證一併驗證是否正確。這個步驟會強制立即向憑證授權單位檢查憑證佈建作業,讓您在幾分鐘內驗證設定變更。否則現有憑證的自動續約作業可能需要數天或數週,導致設定狀態不明。
如果憑證狀態變成 ACTIVE
,表示憑證已核發,因此 DNS 設定正確無誤。此時,建議您移除先前的憑證,以免同一個網域有兩個不同的憑證。這個程序不會中斷負載平衡器的流量。
新憑證可做為驗證工具,建立憑證即表示使用 MPIC 的多角度網域驗證功能可正常運作。
CDN 後方的負載平衡器
如果負載平衡器已啟用 CDN,要求路徑中的部分第三方 CDN 供應商可能會導致驗證要求失敗。如果 CDN 供應商主動代理 HTTP(S) 流量,就可能發生這種情況。
在這種情況下,建議您將憑證遷移至 Certificate Manager,並使用 DNS 授權方法佈建 Google 代管憑證。後者不需要 CA 聯絡負載平衡器。
排解自行管理的安全資料傳輸層 (SSL) 憑證問題
本指南說明如何排解自行管理的 SSL 憑證設定問題。
無法剖析憑證
Google Cloud 需要 PEM 格式的憑證。如果憑證是 PEM 格式,請檢查以下事項:
您可以透過下列 OpenSSL 指令驗證憑證,並將 CERTIFICATE_FILE
替換為憑證檔案的路徑:
openssl x509 -in CERTIFICATE_FILE -text -noout
如果 OpenSSL 無法剖析憑證,請按照下列步驟操作:
- 請向 CA 尋求協助。
- 建立新的私密金鑰和憑證。
缺少通用名稱或主體別名
Google Cloud 規定憑證必須具備共用名稱 (CN
) 或主體別名 (SAN
) 屬性。詳情請參閱「建立 CSR」。
如果缺少這兩個屬性,當您嘗試建立自行管理的憑證時, Google Cloud 會顯示類似下列的錯誤訊息:
ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
- The SSL certificate is missing a Common Name(CN) or Subject Alternative
Name(SAN).
無法剖析私密金鑰
Google Cloud 需要符合私密金鑰標準的 PEM 格式私密金鑰。
您可以使用下列 OpenSSL 指令驗證私密金鑰,並將 PRIVATE_KEY_FILE
替換為私密金鑰的路徑:
openssl rsa -in PRIVATE_KEY_FILE -check
如果出現下列回應,表示私密金鑰有問題:
unable to load Private Key
Expecting: ANY PRIVATE KEY
RSA key error: n does not equal p q
RSA key error: d e not congruent to 1
RSA key error: dmp1 not congruent to d
RSA key error: dmq1 not congruent to d
RSA key error: iqmp not inverse of q
如要修正問題,請建立新的私密金鑰和憑證。
含有通關密語的私密金鑰
如果 OpenSSL 提示您輸入通關密語,您必須先從私密金鑰中移除通關密語,才能搭配 Google Cloud使用。您可以使用下列 OpenSSL 指令:
openssl rsa -in PRIVATE_KEY_FILE \ -out REPLACEMENT_PRIVATE_KEY_FILE
將預留位置替換為有效值:
PRIVATE_KEY_FILE
:以通關密語保護的私密金鑰路徑REPLACEMENT_PRIVATE_KEY_FILE
:您要儲存純文字私密金鑰副本的路徑
即將到期的中繼憑證
如果中繼憑證在伺服器 (葉) 憑證到期前過期,可能表示您的 CA 未遵循最佳做法。
中繼憑證過期時,Google Cloud 中使用的葉子憑證可能會失效。這取決於 SSL 用戶端,如下所示:
- 部分 SSL 用戶端只會查看葉子憑證的到期時間,並忽略過期的中繼憑證。
- 部分 SSL 用戶端會將含有任何過期中繼憑證的鏈結視為無效,並顯示警告。
如何解決這個問題:
- 等待 CA 切換至新的中繼憑證。
- 向他們要求新憑證。
- 使用新金鑰重新上傳新憑證。
您的 CA 也可能允許中繼憑證的交叉簽署。請與 CA 確認。
RSA 公開指數過大
如果 RSA 公開指數大於 65537,就會顯示以下錯誤訊息。請務必使用 65537
,如 RFC 4871 所述。
ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
- The RSA public exponent is too large.
從目標 Proxy 移除 SSL 憑證
下列步驟說明如何移除附加至目標 HTTPS Proxy 的單一 SSL 憑證:
將 target-https-proxy 匯出至暫存檔案。
gcloud compute target-https-proxies export TARGET_PROXY_NAME > /tmp/proxy
編輯
/tmp/proxy
檔案並移除下列幾行:sslCertificates: - https://www.googleapis.com/compute/v1/projects/...
匯入
/tmp/proxy
檔案。gcloud compute target-https-proxies import TARGET_PROXY_NAME \ --source=/tmp/proxy
選用:刪除 SSL 憑證。
gcloud compute ssl-certificates delete SSL_CERT_NAME
更改下列內容:
TARGET_PROXY_NAME
:目標 HTTPS 代理程式資源的名稱。SSL_CERT_NAME
:SSL 憑證的名稱。