設定後端 mTLS

本頁說明如何使用自行管理的憑證設定後端 mTLS。

設定後端 mTLS 的步驟與後端驗證的 TLS 類似,但您也需要為負載平衡器建立憑證。這個憑證也稱為用戶端憑證,會附加至後端驗證設定資源。負載平衡器會使用這個用戶端憑證向後端驗證自身。

如要設定後端 mTLS,請執行下列操作。本文後續章節將說明這些步驟。

  1. 建立信任設定資源,其中包含根憑證和中繼憑證。
  2. 建立用戶端憑證,並上傳至憑證管理工具。
  3. 建立後端驗證設定資源,同時參照信任設定和用戶端憑證。
  4. 將後端驗證設定資源附加至負載平衡器的後端服務。

事前準備

  • 請參閱後端驗證的 TLS 和後端 mTLS 總覽
  • 查看管理信任設定
  • 如要使用 Google Cloud CLI 按照本指南中的操作說明進行,請安裝該 CLI。您可以在 API 和 gcloud CLI 參考資料中找到與負載平衡相關的指令。

    如果您之前沒有執行過 gcloud CLI,請先執行 gcloud init 指令進行驗證。

  • 啟用下列 API:Compute Engine API、Certificate Manager API、Network Security 和 Network Services API。詳情請參閱「啟用 API」。

  • 設定負載平衡器,並使用下列任一支援的後端:

    • VM 執行個體群組後端
    • 混合式連線 NEG
    • 區域性 NEG

權限

本節列出設定後端 mTLS 時所需的權限。
作業 權限
建立信任設定 目標 Google Cloud 專案的 certificatemanager.trustconfigs.create 權限
建立用戶端憑證 目標 Google Cloud 專案的 certificatemanager.certs.create 權限
建立後端驗證設定資源
  • 目標憑證的 certificatemanager.certs.use
  • 目標信任設定的 certificatemanager.trustconfigs.use
  • 目標networksecurity.backendauthenticationconfigs.create專案的 Google Cloud 權限
  • 將後端驗證設定資源附加至負載平衡器的後端服務
  • compute.backendservice.update 目標後端服務
  • 目標後端驗證設定資源上的 networksecurity.backendauthenticationconfigs.use
  • 設定總覽

    以下各節說明如何根據下圖所示的架構,設定後端 mTLS。

    後端 mTLS 的元件。
    後端 mTLS 元件 (按一下可放大)。

    建立根憑證和中繼憑證

    本節使用 OpenSSL 程式庫建立根憑證 (信任錨點) 和中繼憑證。

    根憑證位於憑證鏈的頂端,中繼憑證是信任鏈結的一部分,可追溯至根憑證。中繼憑證由根憑證以密碼編譯方式簽署。負載平衡器收到伺服器憑證時,會建立從伺服器憑證到已設定信任錨點的信任鏈,藉此驗證憑證。

    使用下列指令建立根憑證和中繼憑證。

    1. 建立 OpenSSL 設定檔

      在下列範例中,設定檔 (example.cnf) 包含 [ca_exts] 區段,其中指定了 X.509 擴充功能,可將憑證標示為適用於 CA。如要進一步瞭解根憑證和中繼憑證的規定,請參閱「憑證規定」。

      cat > example.cnf << EOF
      [req]
      distinguished_name = empty_distinguished_name
      
      [empty_distinguished_name]
      # Kept empty to allow setting via -subj command-line argument.
      
      [ca_exts]
      basicConstraints=critical,CA:TRUE
      keyUsage=keyCertSign
      extendedKeyUsage=serverAuth
      
      EOF
      
    2. 建立自行簽署的 X.509 根憑證 (root.cert)。根憑證會使用自己的私密金鑰 (root.key) 自行簽署。

      openssl req -x509 \
          -new -sha256 -newkey rsa:2048 -nodes \
          -days 3650 -subj '/CN=root' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout root.key -out root.cert
      
    3. 建立中繼憑證的憑證簽署要求 (CSR) int.req

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -subj '/CN=int' \
          -config example.cnf \
          -extensions ca_exts \
          -keyout int.key -out int.req
      
    4. 簽署 CSR,建立 X.509 中繼憑證 (int.cert)。CSR 是使用根憑證簽署。

      openssl x509 -req \
          -CAkey root.key -CA root.cert \
          -set_serial 1 \
          -days 3650 \
          -extfile example.cnf \
          -extensions ca_exts \
          -in int.req -out int.cert
      

    設定憑證格式

    如要在信任存放區中加入新憑證或現有憑證,請將憑證格式設為單行,並儲存在環境變數中,以便信任設定 YAML 檔案參照。

    export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    
    export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    

    建立信任設定

    信任設定是 Certificate Manager 中的資源,代表您的公用金鑰基礎架構 (PKI) 設定。

    如要建立信任設定資源,請完成下列步驟:

    控制台

    1. 前往 Google Cloud 控制台的「Certificate Manager」頁面。

      前往 Certificate Manager

    2. 在「信任設定」分頁中,按一下「新增信任設定」

    3. 輸入設定名稱。

    4. 在「位置」部分,選取「全域」或「區域」

      位置代表信任設定資源的儲存位置。如果是全域外部應用程式負載平衡器,請建立全域信任設定資源。如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請建立區域信任設定資源。

    5. 在「信任儲存庫」部分中,按一下「新增信任錨點」,然後上傳 PEM 編碼憑證檔案,或複製憑證內容。

    6. 按一下「新增」。

    7. 在「信任存放區」部分中,按一下「新增中繼 CA」,然後上傳 PEM 編碼憑證檔案,或複製憑證內容。這個步驟可讓您在根憑證和伺服器憑證之間新增信任層級。

    8. 按一下「新增」,即可新增中繼 CA。

    9. 如要新增您加入允許清單的憑證,請按一下「新增」

    10. 點選「建立」

    確認新的信任設定資源是否顯示在設定清單中。

    gcloud

    1. 建立信任設定 YAML 檔案 (trust_config.yaml),指定信任設定參數。這個範例信任設定資源包含信任儲存庫,以及信任錨點和中繼憑證。這個信任設定資源範例會從上一個「設定憑證格式」步驟中建立的環境變數讀取憑證內容。

      cat << EOF > trust_config.yaml
      trustStores:
      - trustAnchors:
        - pemCertificate: "${ROOT_CERT}"
        intermediateCas:
        - pemCertificate: "${INTERMEDIATE_CERT}"
      EOF
      

      如要使用其他信任錨點或中繼憑證建立信任儲存區,請在適當的區段中新增 pemCertificate 列。

    2. 如要匯入信任設定 YAML 檔案,請使用 gcloud certificate-manager trust-configs import 指令

      全球

      如果是全域外部應用程式負載平衡器,請指定 global 做為信任設定資源的儲存位置。

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
          --source=trust_config.yaml \
          --location=global
      

      TRUST_CONFIG_NAME 替換為信任設定的名稱。

      區域

      如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請指定儲存信任設定資源的區域。

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
          --source=trust_config.yaml \
          --location=REGION
      

      更改下列內容:

      • TRUST_CONFIG_NAME:信任設定資源的名稱
      • REGION:儲存信任設定資源的區域

    建立用戶端憑證

    在後端 mTLS 中,負載平衡器會做為用戶端,後端則做為伺服器。

    如要啟用後端 mTLS,負載平衡器必須向後端證明自己的身分。這項驗證是透過負載平衡器向後端提供的用戶端憑證進行。後端伺服器必須使用自己的信任鏈結驗證用戶端憑證。

    連線至後端伺服器時,負載平衡器會將伺服器名稱指示 (SNI) 設為 TLS 設定中指定的主機名稱。後端伺服器會根據這個 SNI 值選取適當的 SSL/TLS 憑證。負載平衡器會比對 SNI 值與後端伺服器憑證中列出的主體別名 (SAN)。

    用戶端憑證可以是透過憑證授權單位服務,從私有 CA 取得的代管憑證,也可以是自行管理的私有 PKI 憑證。在本範例中,用戶端憑證是使用自行管理的憑證核發。本節使用 OpenSSL 程式庫建立根 CA 憑證和用戶端憑證。

    如要建立用戶端憑證,請完成下列步驟:

    1. 建立 OpenSSL 設定檔

      在下列範例中,設定檔 (example.cnf) 包含 [ca_exts] 區段,其中指定 X.509 擴充功能,將憑證標示為適合憑證授權單位 (CA)。extendedKeyUsage 屬性設為 clientAuth。如要進一步瞭解根憑證和中繼憑證的規定,請參閱「憑證規定」。

        cat > example.cnf << EOF
        [req]
        distinguished_name = empty_distinguished_name
      
        [empty_distinguished_name]
        # Kept empty to allow setting via -subj command-line argument.
      
        [ca_exts]
        basicConstraints=critical,CA:TRUE
        keyUsage=keyCertSign
        extendedKeyUsage=clientAuth
      
        EOF
      
    2. 建立自行簽署的 X.509 根憑證授權單位憑證 (root.cert)。根憑證會使用自己的私密金鑰 (root.key) 自行簽署。

        openssl req -x509 \
            -new -sha256 -newkey rsa:2048 -nodes \
            -days 3650 -subj '/CN=root' \
            -config example.cnf \
            -extensions ca_exts \
            -keyout root.key -out root.cert
      
    3. 建立設定檔,產生用戶端憑證的 CSR。

      下列設定檔 (client.config) 包含 [extension_requirements] 區段,用於指定要納入 CSR 的 X.509 擴充功能。如要進一步瞭解用戶端憑證規定,請參閱「憑證規定」。

        cat > client.config << EOF
        [req]
        default_bits              = 2048
        req_extensions            = extension_requirements
        distinguished_name        = dn_requirements
        prompt                    = no
      
        [extension_requirements]
        basicConstraints          = critical, CA:FALSE
        keyUsage                  = critical, nonRepudiation, digitalSignature, keyEncipherment
        extendedKeyUsage          = clientAuth
      
        [dn_requirements]
        countryName               = US
        stateOrProvinceName       = California
        localityName              = San Francisco
        0.organizationName        = example
        organizationalUnitName    = test
        commonName                = test.example.com
        emailAddress              = test@example.com
      
        EOF
      
    4. 建立用戶端憑證的 CSR (client.csr)。

        openssl req -new \
            -config client.config \
            -keyout client.key -out client.csr
      
    5. 從 CSR 建立用戶端憑證 (client.cert)。CSR 會由根 CA 憑證簽署,以核發 X.509 用戶端憑證。

        openssl x509 -req \
            -CAkey root.key -CA root.cert \
            -days 365 \
            -extfile client.config \
            -extensions extension_requirements \
            -in client.csr -out client.cert
      

    將用戶端憑證上傳至 Certificate Manager

    如要將用戶端憑證上傳至 Certificate Manager,請完成下列步驟:

    控制台

    1. 前往 Google Cloud 控制台的「Certificate Manager」頁面。

      前往 Certificate Manager

    2. 在「憑證」分頁中,按一下「新增憑證」

    3. 輸入憑證名稱。

      此名稱在專案中不得重複。

    4. 選用:輸入憑證說明。描述有助於日後識別特定憑證。

    5. 在「位置」部分,選取「全域」或「區域」

      位置代表信任設定資源的儲存位置。如果是全域外部應用程式負載平衡器,請建立全域信任設定資源。如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請建立區域性信任設定資源。

    6. 在「範圍」部分,選取「用戶端驗證」

    7. 在「憑證類型」中,選擇「建立自行管理的憑證」

    8. 在「憑證」欄位中,上傳 PEM 編碼憑證檔案,或複製並貼上 PEM 編碼憑證的內容。

    9. 在「私密金鑰憑證」欄位中,上傳未受密碼保護的 PEM 編碼私密金鑰,或複製並貼上 PEM 編碼私密金鑰的內容。

    10. 指定要與憑證建立關聯的標籤。您可以視需要新增多個標籤。如要新增標籤,請按一下「新增標籤」按鈕,並為標籤指定 keyvalue

    11. 點按「Create」(建立)。確認新憑證是否顯示在憑證清單中。

    gcloud

    1. 如要將用戶端憑證上傳至 Certificate Manager,請使用 gcloud certificate-manager certificates create 指令。這個憑證的範圍是 client-auth,表示這個憑證在後端 mTLS 中做為用戶端憑證使用。

      全球

      如果是全域外部應用程式負載平衡器,請建立全域 Certificate Manager 憑證。

      gcloud certificate-manager certificates create CLIENT_ CERTIFICATE_NAME \
          --certificate-file=client.cert \
          --private-key-file=client.key \
          --scope=client-auth \
          --location=global
      

      CLIENT_CERTIFICATE_NAME 替換為用戶端憑證資源的名稱。後端驗證設定資源會使用這個範圍為 client-auth 的用戶端憑證。

      區域

      如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請建立區域性 Certificate Manager 憑證。

      gcloud certificate-manager certificates create CLIENT_ CERTIFICATE_NAME \
          --certificate-file=client.cert \
          --private-key-file=client.key \
          --scope=client-auth \
          --location=REGION
      

      更改下列內容:

      • CLIENT_CERTIFICATE_NAME:用戶端憑證資源的名稱。後端驗證設定資源會使用這個範圍為 client-auth 的用戶端憑證。
      • REGION:要建立憑證的區域。

    建立後端驗證設定資源

    如要建立後端驗證設定 (BackendAuthenticationConfig) 資源,請完成下列步驟。

    控制台

    1. 前往 Google Cloud 控制台的「Authentication Configuration」(驗證設定) 頁面。

      前往「驗證設定」

    2. 在「Backend Authentication」(後端驗證) 分頁中,按一下「Create」(建立)
    3. 輸入後端驗證設定資源的名稱。
    4. 在「位置」部分,選取「全域」或「區域」
    5. 選取您先前建立的用戶端憑證資源。
    6. 選用:選取公開信任根。
    7. 選取您先前建立的信任設定資源。
    8. 點選「建立」

    確認後端驗證設定資源是否顯示。

    gcloud

    1. 建立 YAML 檔案,以宣告方式指定後端驗證設定資源的不同屬性。

      全球

      將用戶端憑證附加至後端驗證設定資源,即可啟用後端 mTLS。

      cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml
      name: projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
      trustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      clientCertificate: projects/PROJECT_ID/locations/global/certificates/CLIENT_ CERTIFICATE_NAME
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      更改下列內容:

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME :定義後端驗證設定資源的 YAML 檔案名稱
      • PROJECT_ID: Google Cloud 專案的 ID
      • BACKEND_AUTH_CONFIG_NAME:後端驗證設定資源的名稱
      • TRUST_CONFIG_NAME:您先前建立的信任設定資源名稱
      • CLIENT_CERTIFICATE_NAME:您先前建立的用戶端憑證資源名稱

      區域

      將用戶端憑證附加至後端驗證設定資源,即可啟用後端 mTLS。

      cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml
      name: projects/PROJECT_ID/locations/REGION/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
      trustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      clientCertificate: projects/PROJECT_ID/locations/REGION/certificates/CLIENT_ CERTIFICATE_NAME
      wellKnownRoots: PUBLIC_ROOTS
      EOF
      

      更改下列內容:

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME :定義後端驗證設定資源的 YAML 檔案名稱
      • PROJECT_ID: Google Cloud 專案的 ID
      • REGION:區域名稱
      • BACKEND_AUTH_CONFIG_NAME:後端驗證設定資源的名稱
      • TRUST_CONFIG_NAME:您先前建立的信任設定資源名稱
      • CLIENT_CERTIFICATE_NAME:您先前建立的用戶端憑證資源名稱
    2. 如要匯入後端驗證設定,請使用 gcloud network-security backend-authentication-configs import 指令

      全球

      gcloud network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \
          --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \
          --location=global
      

      更改下列內容:

      • BACKEND_AUTH_CONFIG_NAME:後端驗證設定資源的名稱

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME:定義後端驗證設定資源的 YAML 檔案名稱

      區域

      gcloud network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \
          --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \
          --location=REGION
      

      更改下列內容:

      • BACKEND_AUTH_CONFIG_NAME:後端驗證設定資源的名稱

      • BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME:定義後端驗證設定資源的 YAML 檔案名稱

      • REGION:區域名稱

    將後端驗證設定資源附加至負載平衡器的後端服務

    如要將後端驗證設定 (BackendAuthenticationConfig 資源) 附加至負載平衡器的後端服務,請完成下列步驟。

    控制台

    1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。

      前往「Load balancing」(負載平衡) 頁面

    2. 在「後端」分頁中,選取要啟用後端驗證 TLS 和後端 mTLS 的後端服務。

    3. 按一下「Edit」(編輯)

    4. 展開「進階設定」部分。

    5. 在「Backend authentication」(後端驗證) 部分,選取「Enable」(啟用) 核取方塊。

    6. 選用:指定 SNI 主機名稱和接受的 SAN,以驗證後端憑證

    7. 如要將後端驗證設定資源附加至後端服務,請在「後端驗證設定」清單中選取後端驗證設定資源。

    8. 按一下「繼續」

    9. 如要更新後端服務設定,請按一下「更新」

    gcloud

    1. 如要列出專案中的所有後端服務資源,請使用 gcloud compute backend-services list 指令

      gcloud compute backend-services list
      

      請記下要將 BackendAuthenticationConfig 資源附加至的後端服務名稱。後續步驟會將這個名稱稱為 BACKEND_SERVICE_NAME

    2. 如要將後端服務設定匯出至檔案,請使用 gcloud compute backend-services export 指令

      全球

      gcloud compute backend-services export BACKEND_SERVICE_NAME \
          --destination=BACKEND_SERVICE_FILENAME.yaml \
          --global
      

      更改下列內容:

      • BACKEND_SERVICE_NAME:後端服務的名稱
      • BACKEND_SERVICE_FILENAME:YAML 檔案的名稱和路徑,後端服務設定會匯出至該檔案

      區域

      gcloud compute backend-services export BACKEND_SERVICE_NAME \
          --destination=BACKEND_SERVICE_FILENAME.yaml \
          --region=REGION
      

      更改下列內容:

      • BACKEND_SERVICE_NAME:後端服務的名稱
      • BACKEND_SERVICE_FILENAME:YAML 檔案的名稱和路徑,後端服務設定會匯出至該檔案
      • REGION:後端服務所在的Google Cloud 區域名稱
    3. 更新後端服務的 tlsSettings 屬性,將其指向後端驗證設定資源。此外,您可以在後端服務上設定 SNI 主機名稱和接受的 SAN,以驗證後端憑證

      全球

      將全域後端驗證設定資源附加至後端服務。

      下列 YAML 宣告中的 SNI 和 SAN 值僅供參考。您可以將這些值替換為與設定相關的實際值。

        cat << EOF >> BACKEND_SERVICE_FILENAME.yaml
        tlsSettings:
          authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
          sni: examplepetstore.com
          subjectAltNames:
          - dnsName: examplepetstore.com
          - dnsName: api.examplepetstore.com
        EOF
        

      更改下列內容:

      • BACKEND_SERVICE_FILENAME:匯出後端服務設定的 YAML 檔案名稱

      • PROJECT_ID: Google Cloud 專案的 ID

      • BACKEND_AUTH_CONFIG_NAME:後端驗證設定資源的名稱

      區域

      將區域後端驗證設定資源附加至後端服務。

      下列 YAML 宣告中的 SNI 和 SAN 值僅供參考。您可以將這些值替換為與設定相關的實際值。

        cat << EOF >> BACKEND_SERVICE_FILENAME.yaml
        tlsSettings:
          authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/REGION/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME
          sni: examplepetstore.com
          subjectAltNames:
          - dnsName: examplepetstore.com
          - dnsName: api.examplepetstore.com
        EOF
        

      更改下列內容:

      • BACKEND_SERVICE_FILENAME:匯出後端服務設定的 YAML 檔案名稱

      • PROJECT_ID: Google Cloud 專案的 ID

      • REGION:建立後端驗證設定的Google Cloud 區域名稱

      • BACKEND_AUTH_CONFIG_NAME:後端驗證設定資源的名稱

    4. 如要從檔案匯入更新後的後端服務設定,請使用 gcloud compute backend-services import 指令

      全球

        gcloud compute backend-services import BACKEND_SERVICE_NAME \
            --source=BACKEND_SERVICE_FILENAME.yaml \
            --global
      

      更改下列內容:

      • BACKEND_SERVICE_NAME:後端服務的名稱
      • BACKEND_SERVICE_FILENAME:後端服務設定 YAML 檔案的名稱

      區域

        gcloud compute backend-services import BACKEND_SERVICE_NAME \
            --source=BACKEND_SERVICE_FILENAME.yaml \
            --region=REGION
      

      更改下列內容:

      • BACKEND_SERVICE_NAME:後端服務的名稱
      • BACKEND_SERVICE_FILENAME:後端服務設定 YAML 檔案的名稱
      • REGION:後端服務所在的Google Cloud 區域名稱

    建立後端伺服器憑證

    本節提供額外的設定選項,可建立由中繼憑證簽署的伺服器 (葉) 憑證,這是信任設定的一部分。這可確保從伺服器憑證到信任錨點之間,可以建立信任鏈結。

    如果您已建立包含中繼憑證的信任設定資源,請按照下列步驟操作:

    1. 建立設定檔,產生伺服器憑證的 CSR。

      下列設定檔 (server.config) 包含 [extension_requirements] 區段,用於指定要納入 CSR 的 X.509 擴充功能。如要進一步瞭解伺服器憑證的規定,請參閱「憑證規定」。

      cat > server.config << EOF
      [req]
      default_bits              = 2048
      req_extensions            = extension_requirements
      distinguished_name        = dn_requirements
      prompt                    = no
      
      [extension_requirements]
      basicConstraints          = critical, CA:FALSE
      keyUsage                  = critical, nonRepudiation, digitalSignature, keyEncipherment
      extendedKeyUsage          = serverAuth
      subjectAltName            = @alt_names
      
      [alt_names]
      DNS.1 = examplepetstore.com
      DNS.2 = api.examplepetstore.com
      
      [dn_requirements]
      countryName               = US
      stateOrProvinceName       = California
      localityName              = San Francisco
      0.organizationName        = example
      organizationalUnitName    = test
      commonName                = examplepetstore.com
      emailAddress              = test@examplepetstore.com
      
      EOF
      
    2. 建立伺服器憑證的 CSR (server.csr)。

      openssl req -new \
          -sha256 -newkey rsa:2048 -nodes \
          -config server.config \
          -keyout server.key -out server.csr
      
    3. 簽署 CSR,核發 X.509 伺服器憑證 (server.cert)。CSR 由中繼憑證簽署。

      openssl x509 -req \
          -CAkey int.key -CA int.cert \
          -days 365 \
          -extfile server.config \
          -extensions extension_requirements \
          -in server.csr -out server.cert
      

      負載平衡器連線至後端伺服器時,後端伺服器會出示憑證 (server.cert) 向負載平衡器驗證自身,完成後端驗證程序。

    Apache 網路伺服器的其他 SSL 設定選項

    這個選用章節會逐步說明如何根據您先前建立的用戶端和伺服器憑證,更新 Apache 伺服器上的 SSL 設定選項。

    1. 將伺服器私密金鑰 (server.key) 和伺服器憑證 (server.cert) 複製到 Apache 網路伺服器。

          cat > server.key << EOF
          -----BEGIN PRIVATE KEY-----
          [...]
          -----END PRIVATE KEY-----
          EOF
      
          sudo cp ./server.key /etc/ssl/private/server.key
          

      [...] 替換為您先前建立的 PEM 編碼伺服器私密金鑰。

          cat > server.cert << EOF
          -----BEGIN CERTIFICATE-----
          [...]
          -----END CERTIFICATE-----
          EOF
      
          sudo cp ./server.cert /etc/ssl/certs/server.cert
          

      [...] 替換為您先前建立的 PEM 編碼伺服器憑證。

    2. 將用戶端憑證上傳至伺服器的信任設定, 以便驗證用戶端憑證。

            cat > client.cert << EOF
            -----BEGIN CERTIFICATE-----
            [...]
            -----END CERTIFICATE-----
            EOF
      
            sudo cp ./client.cert /etc/ssl/certs/client.cert
            

      [...] 替換為您先前建立的 PEM 編碼用戶端憑證。

    3. 更新 Apache 網路伺服器的 SSL 設定。

      更新 Apache 的 SSL 設定,使用指定的 SSL 憑證和私密金鑰啟用 HTTPS 流量。

          sudo vi /etc/apache2/sites-available/default-ssl.conf
      
          ----
          SSLCertificateFile      /etc/ssl/certs/server.cert
          SSLCertificateKeyFile /etc/ssl/private/server.key
          ----
          

      更新 Apache 的 SSL 設定,要求用戶端憑證驗證,並指定用於驗證的 CA 憑證。

          sudo vi /etc/apache2/sites-available/default-ssl.conf
      
          ----
          SSLVerifyClient require
          SSLVerifyDepth 5
          SSLCACertificateFile /etc/ssl/certs/client.cert
          ----
          
    4. 重新雜湊 CA 憑證。

          sudo c_rehash /etc/ssl/certs/
          
    5. 重新啟動 Apache 網路伺服器,即可套用變更。

          sudo systemctl restart apache2.service
          

    後續步驟