App Engine 的安全資料傳輸層 (SSL) 支援服務提供遍布全球的 SSL 端點和內建的負載平衡技術,讓您的應用程式能夠安全、可靠又迅速地服務全世界的目標對象。
根據預設,系統會使用代管安全資料傳輸層 (SSL) 憑證,自動啟用您自訂網域上的 HTTPS 連線。將自訂網域對應至應用程式並更新 DNS 記錄後,App Engine 會佈建代管安全資料傳輸層 (SSL) 憑證、續約,並在您將自訂網域從應用程式移除時撤銷憑證。
事前準備
確認您已在 App Engine 專案中設定自訂網域。
如果您使用 Cloud Load Balancing 和無伺服器網路端點群組 (NEGS),將流量轉送至 App Engine 應用程式,建議您將自訂網域對應至負載平衡器,而非直接對應至應用程式,並使用為負載平衡器建立的 Google 代管 SSL 憑證。這樣一來,您就不需要為每個無伺服器應用程式管理個別的 SSL 憑證。您可以使用 Cloud Load Balancing 設定 SSL 政策,控管負載平衡器與用戶端交涉的 SSL 功能。
如需詳細資訊,請參閱以下頁面:
請注意下列限制:
- 建議您使用入口控管機制,讓應用程式只接收來自負載平衡器 (以及您使用的 VPC,如果有) 的要求。否則,使用者可以使用應用程式的 App Engine 網址,略過負載平衡器、Google Cloud Armor 安全政策、SSL 憑證和透過負載平衡器傳遞的私密金鑰。
驗證代管憑證
在您設定自訂網域並更新 DNS 記錄後,系統會在幾分鐘內自動提供代管安全資料傳輸層 (SSL) 憑證。系統會自動選取憑證授權單位,由 Google Trust Services (GTS) 或 Let's Encrypt 簽署代管憑證。
如何確認憑證已佈建完成:
在 Google Cloud 控制台中,依序前往「App Engine」 >「Settings」 >「Custom Domains」:
「SSL security」(SSL 安全性) 會顯示為「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
) 造訪您的網域來測試變更。
將對應從服務憑證轉移至新憑證
憑證到期日接近時,您必須上傳新憑證,並將舊憑證現有的對應關係轉移至新憑證。下列程序假設現有憑證尚未到期,目前正在服務您的自訂網域。
如何從使用中的服務憑證轉移對應關係:
將私密金鑰與安全資料傳輸層 (SSL) 憑證檔案轉換成 App Engine 支援的格式。
上傳您的 RSA 私密金鑰和串聯的安全資料傳輸層 (SSL) 憑證:
-
在「SSL certificates」頁面上傳 SSL 憑證。
前往「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
。 - 按一下「上傳」。
-
- 從憑證清單選取您剛剛新增的新憑證,然後選取舊憑證服務的網域。
- 按一下「Save」,將對應關係從舊憑證轉移到新憑證。
-
取得憑證
取得安全資料傳輸層 (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 憑證」設定頁面。
按一下要從網域中移除的憑證。
取消選取不再需要使用 SSL 憑證的網域名稱,然後按一下「Save」。
使用 Strict-Transport-Security 標頭
基於安全性考量,所有應用程式皆應鼓勵用戶端使用 https
連線。如要指示瀏覽器採用 https
而非 http
,請使用 Strict-Transport-Security
標頭。
後續步驟
如要升級現有應用程式,只允許 TLS 1.2 以上版本的安全流量,請參閱「使用最低 TLS 版本保護應用程式」。
如果您想讓 Cloud Load Balancing 管理自訂網域的傳入要求,請參閱「將 App Engine 自訂網域遷移至 Cloud Load Balancing」。