透過安全資料傳輸層 (SSL) 保護自訂網域

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 簽署代管憑證。

如何確認憑證已佈建完成:

  1. 在 Google Cloud 控制台中,依序前往「App Engine」 >「Settings」 >「Custom Domains」

    前往「Custom Domains」(自訂網域)

  2. 「SSL security」(SSL 安全性) 會顯示為「Google 代管」

排解代管安全資料傳輸層 (SSL) 憑證相關問題

升級至代管安全資料傳輸層 (SSL) 憑證

在您升級至 Google 代管安全資料傳輸層 (SSL) 憑證之前,請注意代管憑證「不支援」萬用字元對應。

如果您使用子網域,且憑證是由 Let's Encrypt 核發,每個基礎網域每週的代管憑證數量上限為 50 個。如果達到上限,App Engine 會繼續嘗試核發代管憑證,直到所有要求都處理完畢。

如要將自己的安全資料傳輸層 (SSL) 憑證更換為 Google 代管安全資料傳輸層 (SSL) 憑證,或是將代管安全資料傳輸層 (SSL) 憑證新增到自訂網域中的現有應用程式,請更新您的網域對應關係:

  1. 在 Google Cloud 控制台中,依序前往「App Engine」 >「Settings」 >「Custom Domains」

    前往「Custom Domains」(自訂網域)

  2. 選取要保護的網域,然後按一下「啟用受管理的安全性」

停用代管安全資料傳輸層 (SSL) 憑證

停用代管安全資料傳輸層 (SSL) 憑證的方式如下:

  1. 在 Google Cloud 控制台中,依序前往「App Engine」 >「Settings」 >「Custom Domains」

    前往「Custom Domains」(自訂網域)

  2. 選取網域,然後按一下「停用受管理的安全性」

使用您自己的安全資料傳輸層 (SSL) 憑證

您可以選擇不使用代管安全資料傳輸層 (SSL) 憑證,改用自己的憑證。如果您的憑證沒有透明化證明,您的應用程式可能會因為 Chrome 強制要求憑證透明化證明,而在 Chrome 中顯示安全資料傳輸層 (SSL) 警告。如要進一步瞭解憑證透明化證明以及符合相關要求的方式,請參閱強制要求憑證透明化一文。

如要使用及管理自己的安全資料傳輸層 (SSL) 憑證,而非 Google 代管憑證:

  1. 確認您已在 App Engine 專案中設定自訂網域

  2. 停用預設的 Google 代管憑證

  3. 請向您選擇的憑證授權單位 (CA) 取得網域憑證。確切的程序可能因授權單位而異。

  4. 將私密金鑰和安全資料傳輸層 (SSL) 憑證檔案轉換成 App Engine 支援的格式。您必須先將私密金鑰轉換成 RSA 私密金鑰,並將安全資料傳輸層 (SSL) 憑證串聯成單一檔案,接著才能上傳檔案。

  5. 確認您在 Google Cloud 主控台中擁有正確權限,且對所有相關網域或其上層網域的已驗證的擁有權 (步驟 3)。例如:

    • 如果是 www.example.com 的憑證,您可以驗證 www.example.comexample.com 的擁有權。
    • 如果是 www.example.comsub.example.com 的憑證,您可以驗證 www.example.comsub.example.com 的擁有權,或是 example.com 的擁有權。
    • 如果是 *.example.com 的憑證,則必須驗證 example.com 的所有權。
  6. 上傳您的私密金鑰和安全資料傳輸層 (SSL) 憑證,然後將您的網域對應至應用程式:

    1. 在 Google Cloud 控制台中,依序前往「App Engine」 >「Settings」(設定) >「SSL certificates」(SSL 憑證)

      前往「SSL 憑證」

    2. 按一下 [Upload a new certificate] (上傳新憑證)。

    3. 針對「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
    4. 按一下 [上傳]。每個您上傳的安全資料傳輸層 (SSL) 憑證都會顯示,並且可供所有其他的 Google Cloud 專案使用,因此您不必重複上傳相同的憑證。
    5. 選取您要指派到網域的憑證,然後按一下 [Save] (儲存),即可為該網域套用安全資料傳輸層 (SSL)。

  7. 在瀏覽器中使用 https (例如 https://www.example.com) 造訪您的網域來測試變更。

將對應從服務憑證轉移至新憑證

憑證到期日接近時,您必須上傳新憑證,並將舊憑證現有的對應關係轉移至新憑證。下列程序假設現有憑證尚未到期,目前正在服務您的自訂網域。

如何從使用中的服務憑證轉移對應關係:

  1. 請向您選擇的憑證授權單位 (CA) 取得網域的新憑證

  2. 將私密金鑰與安全資料傳輸層 (SSL) 憑證檔案轉換成 App Engine 支援的格式。

  3. 上傳您的 RSA 私密金鑰和串聯的安全資料傳輸層 (SSL) 憑證:

    1. 在「SSL certificates」頁面上傳 SSL 憑證。

      前往「SSL 憑證」
      1. 按一下 [Upload a new certificate] (上傳新憑證)

      2. 針對「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
      3. 按一下「上傳」
    2. 從憑證清單選取您剛剛新增的新憑證,然後選取舊憑證服務的網域。
    3. 按一下「Save」,將對應關係從舊憑證轉移到新憑證。

取得憑證

取得安全資料傳輸層 (SSL) 憑證的程序會因您使用的憑證授權單位而有所不同,您可能需要稍微調整這裡提供的操作說明。一般而言,每個憑證授權單位都會提供操作說明,協助您完成程序。

如何取得憑證以搭配使用 App Engine 應用程式:

  1. 使用 openssl 工具,產生私密金鑰與憑證簽署要求 (CSR):

    1. 從您要建立 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. 系統提示時,請輸入下列資訊:

      • 2 個字母的國家/地區代碼,例如 US 代表美國。
      • 您所在的城市名稱。
      • 您的公司名稱。如果您沒有公司,可以使用自己的姓名。
      • 您的機構單位。如果沒有,請輸入 NA
      • 代表您網域的一般名稱,例如:www.example.com
      • 您的電子郵件地址。

      其他值皆可自由選填。

  2. 判斷您適合的憑證授權單位,然後購買憑證。例如,您可以使用 SSLMateThawteComodo 或任何其他憑證授權單位提供的憑證。

    如要進一步瞭解支援的憑證類型,請參閱「SSL 憑證類型」。

  3. 當憑證授權單位要求您提供 CSR 檔案的內容時,請按照他們的操作說明,將之前產生的 .csr 檔案 (例如 server.csr) 內容複製貼上。

  4. 當您的憑證授權單位要求網域擁有者核准時,請按照提示操作。

  5. 在您提供網域擁有者核准後,憑證授權單位就會將憑證傳送給您,通常為 zip 檔案。請將該檔案解壓縮到工作目錄,以將這些憑證串聯在一起並上傳到 App Engine。

轉換私密金鑰及串聯安全資料傳輸層 (SSL) 憑證

您必須將私密金鑰轉換成 RSA 私密金鑰,並串聯所有的安全資料傳輸層 (SSL) 憑證,才能將私密金鑰和安全資料傳輸層 (SSL) 憑證上傳到 App Engine。

  1. 將您之前產生的私密金鑰檔案轉換成未加密的 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
      
  2. 執行下列指令,將憑證授權單位發出的所有 .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
      
  3. 驗證您的安全資料傳輸層 (SSL) 憑證和私密金鑰:

    1. 如要驗證私密金鑰與憑證是否相符,您可以執行 openssl x509openssl rsa 指令。範例:

      openssl x509 -noout -modulus -in concat.crt | openssl md5
      openssl rsa -noout -modulus -in myserver.key.pem | openssl md5
      

      openssl x509openssl rsa 指令應會傳回相同的輸出內容。

    2. 如要驗證某憑證與該憑證的憑證授權單位串連是否有效,您可以執行 openssl verify 指令。例如:

      openssl verify -verbose -CAfile concat.crt concat.crt
      
  4. 準備就緒後,即可將您的 RSA 私密金鑰和串聯的憑證上傳至 App Engine

SSL 憑證類型

App Engine 支援下列憑證類型:

  • 單一網域/主機名稱
  • 自行簽署
  • 萬用字元
  • 主體別名 (SAN)/多網域

您的憑證和金鑰須符合下列要求:

  • 私密金鑰與憑證須以 PEM 格式上傳。
  • 私密金鑰絕不可加密。
  • 憑證檔案最多可包含五個憑證,串連與中繼憑證都算在內。
  • 主機憑證上的所有主體名稱都應相符,或是必須為使用者已驗證網域的子網域。
  • 私密金鑰必須使用 RSA 加密。
  • 允許的金鑰模數上限:2048 位元

如果主機憑證要求提供多數憑證授權單位 (CA) 都會核發的中繼或串連憑證,您必須將中繼或串連憑證附加到公開憑證檔案末端。

部分 App Engine 功能使用特殊的子網域。舉例來說,應用程式可使用子網域來處理應用程式服務,或處理應用程式的不同版本。如要將安全資料傳輸層 (SSL) 用於這些子網域,可以設定 SAN 或萬用字元憑證。萬用字元憑證僅支援單一層級的子網域。

移除自訂 SSL 憑證

如要停止使用自訂 SSL 憑證,請執行下列步驟:

  1. 在 Google Cloud 控制台中,前往 App Engine 的「SSL 憑證」設定頁面。

    前往 SSL 憑證設定

  2. 按一下要從網域中移除的憑證。

  3. 取消選取不再需要使用 SSL 憑證的網域名稱,然後按一下「Save」

使用 Strict-Transport-Security 標頭

基於安全性考量,所有應用程式皆應鼓勵用戶端使用 https 連線。如要指示瀏覽器採用 https 而非 http,請使用 Strict-Transport-Security 標頭

後續步驟