App Engine SSL 支援服務提供遍布全球的 SSL 端點和內建的負載平衡技術,讓您的應用程式能夠安全、可靠又迅速地服務全世界的目標對象。
根據預設,系統會使用代管安全資料傳輸層 (SSL) 憑證,自動啟用您自訂網域上的 HTTPS 連線。將自訂網域對應到應用程式並更新 DNS 記錄後,App Engine 會佈建代管安全資料傳輸層 (SSL) 憑證、續購憑證,以及在您將自訂網域從應用程式移除時撤銷憑證。
事前準備
- 確認您已在 App Engine 專案中設定自訂網域。 
- 如果您使用 Cloud Load Balancing 和無伺服器網路端點群組 (NEG),將流量轉送至 App Engine 應用程式,建議您將自訂網域對應至負載平衡器,而非直接對應至應用程式,並使用為負載平衡器建立的 Google 代管 SSL 憑證。這樣一來,您就不必為每個無伺服器應用程式管理個別的 SSL 憑證。透過 Cloud Load Balancing,您可以設定 SSL 政策,控管負載平衡器與用戶端交涉的 SSL 功能。 - 如需詳細資訊,請參閱以下頁面: - 請注意下列限制: - 建議您使用 Ingress 控制項,確保應用程式只會接收負載平衡器 (以及您使用的 VPC) 傳送的要求。否則,使用者可以透過應用程式的 App Engine 網址略過負載平衡器、Cloud Armor 安全性政策、SSL 憑證,以及透過負載平衡器傳遞的私密金鑰。
 
驗證代管憑證
設定自訂網域並更新 DNS 記錄後,系統會在幾分鐘內自動提供代管安全資料傳輸層 (SSL) 憑證。系統會自動選取憑證授權單位,代管憑證由 Google Trust Services (GTS) 或 Let's Encrypt 簽署。
如何確認憑證已佈建完成:
- 在 Google Cloud 控制台中,依序前往「App Engine」 >「Settings」 >「Custom Domains」: 
- 「SSL security」(SSL 安全性) 顯示為「Google-managed」(由 Google 管理)。 
排解代管安全資料傳輸層 (SSL) 憑證問題
- 您可能需要更新自訂網域的 DNS 記錄,以驗證您的網域名稱。App Engine 無法為尚未驗證的網域佈建憑證。 
- 您可以透過 Admin API,使用 AuthorizedCertificate.GET 要求檢查憑證的狀態。 
- 如果系統因無法取得 DNS 記錄而未佈建代管憑證,則 - ManagedCertificate.ManagementStatus欄位可能會顯示- FAILED_RETRYING_NOT_VISIBLE。請確認您的 DNS 記錄為最新,並在數分鐘後再試一次。DNS 記錄最多可能需要 24 小時才能提供。
- 如果狀態為 - FAILED_PERMANENT,則代表所有續購嘗試均失敗。 請檢查 DNS 設定,然後按照更新為代管安全資料傳輸層 (SSL) 憑證章節中的步驟,更新您的自訂網域對應。
升級至代管安全資料傳輸層 (SSL) 憑證
在您升級至 Google 代管安全資料傳輸層 (SSL) 憑證之前,請注意代管憑證「不支援」萬用字元對應。
如果您使用子網域,且憑證是由 Let's Encrypt 核發,每個基礎網域一週的代管憑證數量上限為 50 個。如果達到上限,App Engine 會繼續嘗試核發代管憑證,直到所有要求都處理完畢。
如要將自己的安全資料傳輸層 (SSL) 憑證更換為 Google 代管安全資料傳輸層 (SSL) 憑證,或是將代管安全資料傳輸層 (SSL) 憑證新增到自訂網域中的現有應用程式,請更新您的網域對應關係:
- 在 Google Cloud 控制台中,依序前往「App Engine」 >「Settings」 >「Custom Domains」: 
- 選取要保護的網域,然後按一下「啟用受管理的安全防護」。 
停用代管安全資料傳輸層 (SSL) 憑證
停用代管安全資料傳輸層 (SSL) 憑證的方式如下:
- 在 Google Cloud 控制台中,依序前往「App Engine」 >「Settings」 >「Custom Domains」: 
- 選取網域,然後按一下「停用受管理的安全防護」。 
使用您自己的 SSL 憑證
您可以選擇不使用代管安全資料傳輸層 (SSL) 憑證,改用自己的憑證。如果您的憑證沒有透明化證明,您的應用程式可能會因為 Chrome 強制要求憑證透明化證明,而在 Chrome 中顯示安全資料傳輸層 (SSL) 警告。如要進一步瞭解憑證透明化證明以及符合相關要求的方式,請參閱強制要求憑證透明化一文。
如要使用及管理自己的安全資料傳輸層 (SSL) 憑證,而非 Google 代管憑證:
- 確認您已在 App Engine 專案中設定自訂網域。 
- 請向您選擇的憑證授權單位 (CA) 取得網域憑證。確切的程序可能因授權單位而異。 
- 將私密金鑰和安全資料傳輸層 (SSL) 憑證檔案轉換成 App Engine 支援的格式。您必須先將私密金鑰轉換成 RSA 私密金鑰,並將安全資料傳輸層 (SSL) 憑證串聯成單一檔案,接著才能上傳檔案。 
- 確認您在Google Cloud 控制台中擁有正確權限,且對所有相關網域或其上層網域的擁有權已通過驗證 (步驟 3)。例如: - 如果是 www.example.com的憑證,您可以驗證www.example.com或example.com的擁有權。
- 如果是 www.example.com和sub.example.com的憑證,您可以驗證www.example.com和sub.example.com的擁有權,或是example.com的擁有權。
- 如果是 *.example.com的憑證,則必須驗證example.com的所有權。
 
- 如果是 
- 上傳您的私密金鑰和安全資料傳輸層 (SSL) 憑證,然後將您的網域對應至應用程式: - 
        在 Google Cloud 控制台中,依序前往「App Engine」 >「Settings」(設定) >「SSL certificates」(SSL 憑證): 
- 
        按一下 [Upload a new certificate] (上傳新憑證)。 
- 
        針對「PEM encoded X.509 public key certificate」(PEM 編碼 X.509 公用金鑰憑證) 上傳concat.crt等串聯安全資料傳輸層 (SSL) 憑證,然後針對「Unencrypted PEM encoded RSA private key」(未加密的 PEM 編碼 RSA 私密金鑰) 上傳 RSA 私密金鑰,例如myserver.key.pem。
- 按一下 [上傳]。每個您上傳的 SSL 憑證都會顯示,並且可供所有其他的 Google Cloud 專案使用,因此您不必重複上傳相同的憑證。
- 選取您要指派到網域的憑證,然後按一下 [Save] (儲存),即可為該網域套用安全資料傳輸層 (SSL)。
 
- 
        
- 在瀏覽器中使用 - https(例如- https://www.example.com) 造訪您的網域來測試變更。
將對應從服務憑證轉移至新憑證
憑證到期日接近時,您必須上傳新憑證,並將舊憑證現有的對應關係轉移至新憑證。下列程序假設現有憑證尚未到期,目前正在服務您的自訂網域。
如何從使用中的服務憑證轉移對應關係:
- 向您選擇的憑證授權單位 (CA) 取得網域的新憑證。 
- 上傳您的 RSA 私密金鑰和串聯的安全資料傳輸層 (SSL) 憑證: - 
    在「SSL certificates」(SSL 憑證) 頁面上傳安全資料傳輸層 (SSL) 憑證。 前往「SSL Certificates」(SSL 憑證)- 
        按一下 [Upload a new certificate] (上傳新憑證)。 
- 
        針對「PEM encoded X.509 public key certificate」(PEM 編碼 X.509 公用金鑰憑證) 上傳 concat.crt等串聯安全資料傳輸層 (SSL) 憑證,然後針對「Unencrypted PEM encoded RSA private key」(未加密的 PEM 編碼 RSA 私密金鑰) 上傳 RSA 私密金鑰,例如myserver.key.pem。
- 按一下「上傳」。
 
- 
        
- 從憑證清單選取您剛剛新增的新憑證,然後選取舊憑證服務的網域。
- 按一下「儲存」,將對應關係從舊憑證轉移到新憑證。
 
- 
    
取得憑證
取得安全資料傳輸層 (SSL) 憑證的程序會因您使用的憑證授權單位而有所不同,您可能需要稍微調整這裡提供的操作說明。一般而言,每個憑證授權單位都會提供操作說明,協助您完成程序。
如何取得憑證以搭配使用 App Engine 應用程式:
- 使用 openssl 工具,產生私密金鑰與憑證簽署要求 (CSR): - 從您要建立 - server.csr檔案的目錄執行下列指令:- openssl req -nodes -newkey rsa:2048 -keyout [MY_PRIVATE_KEY].key -out [MY_CSR].csr- 其中: - [MY_PRIVATE_KEY].key是執行指令後產生的檔案,私密金鑰會儲存在這個檔案中。範例:- myserver.key
- [MY_CSR].csr是針對憑證簽署要求而產生的檔案。範例:- server.csr
 
- 系統提示時,請輸入下列資訊: - 2 個字母的國家/地區代碼,例如 US代表美國。
- 您所在的城市名稱。
- 您的公司名稱。如果您沒有公司,可以使用自己的姓名。
- 您的機構單位。如果沒有,請輸入 NA。
- 代表您網域的一般名稱,例如:www.example.com。
- 您的電子郵件地址。
 - 其他值皆可自由選填。 
- 2 個字母的國家/地區代碼,例如 
 
- 判斷您適合的憑證授權單位,然後購買憑證。例如,您可以使用 SSLMate、Thawte、Comodo 或任何其他憑證授權單位提供的憑證。 - 如要進一步瞭解支援的憑證類型,請參閱安全資料傳輸層 (SSL) 憑證類型一文。 
- 當憑證授權單位要求您提供 CSR 檔案的內容時,請按照他們的操作說明,將之前產生的 - .csr檔案 (例如- server.csr) 內容複製貼上。
- 當您的憑證授權單位要求網域擁有者核准時,請按照提示操作。 
- 在您提供網域擁有者核准後,憑證授權單位就會將憑證傳送給您,檔案格式通常為 zip 檔。請將該檔案解壓縮到工作目錄,以便將這些憑證串聯在一起並上傳至 App Engine。 
轉換私密金鑰及串聯安全資料傳輸層 (SSL) 憑證
您必須將私密金鑰轉換成 RSA 私密金鑰,並串聯所有的安全資料傳輸層 (SSL) 憑證,才能將私密金鑰和安全資料傳輸層 (SSL) 憑證上傳到 App Engine。
- 將您之前產生的私密金鑰檔案轉換成未加密的 RSA 私密金鑰。舉例來說,您可以執行下列 - openssl rsa指令:- openssl rsa -in [MY_PRIVATE_KEY].key -out [MY_RSA_KEY].key.pem- 其中: - [MY_PRIVATE_KEY].key是執行指令後所產生的檔案,內含私密金鑰。範例:- myserver.key
- [MY_RSA_KEY].key是執行指令後所產生的檔案,內含未加密的 RSA 私密金鑰。範例:- myserver.key.pem- 範例: - openssl rsa -in myserver.key -out myserver.key.pem
 
- 執行下列指令,將憑證授權單位發出的所有 - .crt檔案串聯成一個檔案:- cat [MY_DOMAIN_CERT].crt [MY_SecureServerCA].crt [MY_TrustCA].crt [MY_TrustExternalCARoot].crt > [MY_CONCAT_CERT].crt- 其中 - [MY_DOMAIN_CERT].crt是您網域的憑證。範例:- www_example_com.crt
- [MY_SecureServerCA].crt、- [MY_TrustCA].crt和- [MY_TrustExternalCARoot].crt是您的憑證授權單位提供的其他憑證檔案。
- [MY_CONCAT_CERT].crt是串聯檔案,內含憑證授權單位發出的所有- .crt憑證。範例:- concat.crt- 範例: - cat www_example_com.crt AddTrustExternalCARoot.crt RSADomainValidationSecureServerCA.crt RSAAddTrustCA.crt > concat.crt
 
- 驗證您的安全資料傳輸層 (SSL) 憑證和私密金鑰: - 如要驗證私密金鑰與憑證是否相符,您可以執行 - openssl x509和- openssl rsa指令。範例:- openssl x509 -noout -modulus -in concat.crt | openssl md5 openssl rsa -noout -modulus -in myserver.key.pem | openssl md5- openssl x509 和 openssl rsa 指令應會傳回相同的輸出內容。 
- 如要驗證某憑證與該憑證的憑證授權單位串連是否有效,您可以執行 openssl verify 指令。例如: - openssl verify -verbose -CAfile concat.crt concat.crt
 
- 準備就緒後,即可將您的 RSA 私密金鑰和串聯的憑證上傳至 App Engine。 
SSL 憑證類型
App Engine 支援下列憑證類型:
- 單一網域/主機名稱
- 自行簽署
- 萬用字元
- 主體別名 (SAN)/多網域
您的憑證和金鑰須符合下列要求:
- 私密金鑰與憑證須以 PEM 格式上傳。
- 私密金鑰絕不可加密。
- 憑證檔案最多可包含五個憑證,串連與中繼憑證都算在內。
- 主機憑證上的所有主體名稱都應相符,或是必須為使用者已驗證網域的子網域。
- 私密金鑰必須使用 RSA 加密。
- 允許的金鑰模數上限:2048 位元
如果主機憑證要求提供多數憑證授權單位 (CA) 都會核發的中繼或串連憑證,您必須將中繼或串連憑證附加到公開憑證檔案末端。
部分 App Engine 功能使用特殊的子網域。舉例來說,應用程式可使用子網域來處理應用程式服務,或處理應用程式的不同版本。如要將安全資料傳輸層 (SSL) 用於這些子網域,可以設定 SAN 或萬用字元憑證。萬用字元憑證僅支援單一層級的子網域。
移除自訂 SSL 憑證
如要停止使用自訂 SSL 憑證,請按照下列步驟操作:
- 在 Google Cloud 控制台中,前往 App Engine 的「SSL certificates」(SSL 憑證) 設定頁面。 
- 按一下要從網域移除的憑證。 
- 取消選取不再要使用 SSL 憑證的網域名稱,然後按一下「儲存」。 
使用 Strict-Transport-Security 標頭
基於安全性考量,所有應用程式皆應鼓勵用戶端使用 https 連線。如要指示瀏覽器採用 https 而非 http,請使用 Strict-Transport-Security 標頭。
後續步驟
- 如要升級現有應用程式,只允許傳輸層安全標準 (TLS) 1.2 以上版本的安全流量,請參閱「使用最低傳輸層安全標準 (TLS) 保護應用程式」。 
- 如要讓 Cloud Load Balancing 管理傳入自訂網域的要求,請參閱「將 App Engine 自訂網域遷移至 Cloud Load Balancing」。