

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS CloudHSM 使用 NGINX 或 Apache 搭配 OpenSSL 在 Linux 上卸載 SSL/TLS
<a name="third-offload-linux-openssl"></a>

本主題提供在 Linux Web 伺服器上設定 SSL/TLS 卸載搭配 AWS CloudHSM 的逐步說明。

**Topics**
+ [概觀](#ssl-offload-linux-openssl-overview)
+ [步驟 1：設定先決條件](#ssl-offload-prerequisites)
+ [步驟 2：產生私有金鑰和 SSL/TLS 憑證](#ssl-offload-import-or-generate-private-key-and-certificate)
+ [步驟 3：設定 Web 伺服器](#ssl-offload-configure-web-server)
+ [步驟 4：啟用 HTTPS 流量並驗證憑證](#ssl-offload-enable-traffic-and-verify-certificate)

## 概觀
<a name="ssl-offload-linux-openssl-overview"></a>

在 Linux 上，[NGINX](https://nginx.org/en/) 和 [Apache HTTP Server](https://httpd.apache.org/) Web 伺服器軟體與 [OpenSSL](https://www.openssl.org/) 整合以支援 HTTPS。[適用於 OpenSSL 之AWS CloudHSM 動態引擎](openssl-library.md)提供的界面，可讓 Web 伺服器軟體使用叢集中的 HSM 進行密碼編譯卸載和金鑰儲存。OpenSSL 引擎是將 Web 伺服器連線到 AWS CloudHSM 叢集的橋樑。

若要完成此教學課程，您必須先選擇是否要在 Linux 上使用 NGINX 或 Apache Web 伺服器軟體。然後，教學課程會向您示範如何執行以下操作：
+ 在 Amazon EC2 執行個體上安裝 Web 伺服器軟體。
+ 將 Web 伺服器軟體設定為使用儲存在 AWS CloudHSM 叢集中的私有金鑰來支援 HTTPS。
+ (選用) 使用 Amazon EC2 建立第二個 Web 伺服器執行個體，并使用 Elastic Load Balancing 建立負載平衡器。使用負載平衡器可將負載分散到多部伺服器，進而提升效能。它也可以在一或多個伺服器失敗時提供備援和高可用性。

當您準備好開始時，請移至[步驟 1：設定先決條件](#ssl-offload-prerequisites)。

## 步驟 1：設定先決條件
<a name="ssl-offload-prerequisites"></a>

不同平台需要不同的先決條件。請使用下方符合您平台的先決條件區段。

### 用戶端 SDK 5 的先決條件
<a name="new-versions"></a>

若要設定 Web 伺服器 SSL/TLS 卸載搭配 Client SDK 5，您需要下列項目：
+ 具有至少兩個硬體安全模組 (HSM) 的作用中 AWS CloudHSM 叢集
**注意**  
您可以使用單一 HSM 叢集，但必須先停用用戶端金鑰耐久性。如需詳細資訊，請參閱[管理用戶端金鑰耐久性設定](working-client-sync.md#client-sync-sdk8)和[用戶端 SDK 5 設定工具](configure-sdk-5.md)。
+ 執行 Linux 作業系統的 Amazon EC2 執行個體，其中已安裝下列軟體：
  + 一個 Web 伺服器 (無論是 NGINX 或 Apache)
  + 適用於用戶端 SDK 5 的 OpenSSL 動態引擎
+ [加密使用者](understanding-users.md#crypto-user-chsm-cli) (CU)，擁有及管理 HSM 上 Web 伺服器的私有金鑰。

**設定 Linux Web 伺服器執行個體，並在 HSM 上建立 CU**

1. 安裝和設定 的 OpenSSL 動態引擎 AWS CloudHSM。如需關於安裝 OpenSSL 動態引擎的詳細資訊，請參閱[用戶端 SDK 5 的 OpenSSL 動態引擎](openssl5-install.md)。

1. 在可存取叢集的 EC2 Linux 執行個體上，安裝 NGINX 或 Apache Web 伺服器：

------
#### [ Amazon Linux 2 ]
   + 如需如何在 Amazon Linux 2 上下載最新版本的 NGINX 的資訊，請參閱 [NGINX 網站](https://nginx.org/en/linux_packages.html)。

     可用於 Amazon Linux 2 的最新版本 NGINX 使用的 OpenSSL 版本比系統版本的 OpenSSL 更新。安裝 NGINX 之後，您需要建立從 AWS CloudHSM OpenSSL 動態引擎程式庫到此 OpenSSL 版本預期位置的符號連結 

     ```
     $ sudo ln -sf /opt/cloudhsm/lib/libcloudhsm_openssl_engine.so /usr/lib64/engines-1.1/cloudhsm.so
     ```
   + Apache

     ```
     $ sudo yum install httpd mod_ssl
     ```

------
#### [ Amazon Linux 2023 ]
   + NGINX

     ```
     $ sudo yum install nginx
     ```
   + Apache

     ```
     $ sudo yum install httpd mod_ssl
     ```

------
#### [ Red Hat 8 ]
   + NGINX

     ```
     $ sudo yum install nginx
     ```
   + Apache

     ```
     $ sudo yum install httpd mod_ssl
     ```

------
#### [ Red Hat 9 ]
   + NGINX

     ```
     $ sudo yum install nginx
     ```
   + Apache

     ```
     $ sudo yum install httpd mod_ssl
     ```

------
#### [ Ubuntu 22.04 ]
   + NGINX

     ```
     $ sudo apt install nginx
     ```
   + Apache

     ```
     $ sudo apt install apache2
     ```

------
#### [ Ubuntu 24.04 ]
   + NGINX

     ```
     $ sudo apt install nginx
     ```
   + Apache

     ```
     $ sudo apt install apache2
     ```

------

1. 使用 CloudHSM CLI 建立[加密使用者](understanding-users.md#crypto-user-chsm-cli)。如需關於管理 HSM 使用者的詳細資訊，請參閱[使用 CloudHSM CLI 管理 HSM 使用者](manage-hsm-users-chsm-cli.md)。
**提示**  
保持追蹤 CU 使用者名稱和密碼。之後在為您的 Web 伺服器產生或匯入 HTTPS 私有金鑰和憑證時，您將會需要該資訊。

完成這些步驟之後，請移至 [步驟 2：產生私有金鑰和 SSL/TLS 憑證](#ssl-offload-import-or-generate-private-key-and-certificate)。

#### 備註
<a name="note-ssl5-pre"></a>
+ 若要使用 Security-Enhanced Linux (SELinux) 和 Web 伺服器，您必須在連接埠 2223 上允許傳出 TCP 連線，也就是用戶端 SDK 5 用來與 HSM 通訊的連接埠。
+ 若要建立和啟用叢集並授予 EC2 執行個體存取叢集的權限，請完成[AWS CloudHSM入門](getting-started.md)中的步驟。入門提供使用 HSM 和 Amazon EC2 用戶端執行個體建立作用中叢集的逐步說明。可以使用此用戶端執行個體做為 Web 伺服器。
+ 若要避免停用用戶端金鑰耐久性，請在叢集中新增多個 HSM。如需詳細資訊，請參閱[將 HSM 新增至 AWS CloudHSM 叢集](add-hsm.md)。
+ 要連接到用戶端執行個體，可以使用 SSH 或 PuTTY。如需詳細資訊，請參閱 Amazon EC2 文件中的[使用 SSH 連接至您的 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)或[使用 PuTTY 從 Windows 連接至您的 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)。

## 步驟 2：產生私有金鑰和 SSL/TLS 憑證
<a name="ssl-offload-import-or-generate-private-key-and-certificate"></a>

若要啟用 HTTPS，您的 Web 伺服器應用程式 (NGINX 或 Apache) 需要私有金鑰和對應的 SSL/TLS 憑證。若要搭配 使用 Web 伺服器 SSL/TLS 卸載 AWS CloudHSM，您必須將私有金鑰存放在 AWS CloudHSM 叢集的 HSM 中。您會先產生私有金鑰，並使用金鑰來建立憑證簽署請求 (CSR)。然後，您從 HSM 匯出*仿造 PEM 私有金鑰*，這是 PEM 格式的私有金鑰檔案，其中包含 HSM 上存放之私有金鑰的參考 （這不是實際的私有金鑰）。在 SSL/TLS 卸載期間，Web 伺服器會使用仿造的 PEM 私有金鑰檔案識別 HSM 上的私有金鑰。

### 產生私有金鑰和憑證
<a name="ssl-offload-generate-private-key-and-certificate"></a>

#### 產生私有金鑰
<a name="ssl-offload-generate-private-key"></a>

本節說明如何使用 [CloudHSM CLI ](cloudhsm_cli.md)產生金鑰對。一旦在 HSM 內產生金鑰對，您就可以將其匯出為仿造 PEM 檔案，並產生對應的憑證。<a name="ssl-offload-generate-private-key-prerequisites"></a>

**安裝和設定 CloudHSM CLI**

1. [安裝和設定](cloudhsm_cli-getting-started.md) CloudHSM CLI。

1. 使用下列命令來啟動 CloudHSM CLI。

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

1. 執行以下命令來登入 HSM。將 *<user name>* 取代為您的 crypto-user 的使用者名稱

   ```
   Command: login --username <user name> --role crypto-user
   ```

**產生私有金鑰**

根據您的使用案例，您可以產生 RSA 或 EC 金鑰對。執行以下任意一項：
+ 在 HSM 上產生 RSA 私有金鑰

  使用 [`key generate-asymmetric-pair rsa`](cloudhsm_cli-key-generate-asymmetric-pair-rsa.md) 命令來產生 RSA 金鑰對。此範例會產生一個 RSA 金鑰對，其模數為 2048、公有指數為 65537、公有金鑰標籤為 *tls\$1rsa\$1pub*，以及私有金鑰標籤為 *tls\$1rsa\$1private*。

  ```
  aws-cloudhsm > key generate-asymmetric-pair rsa \
  --public-exponent 65537 \
  --modulus-size-bits 2048 \
  --public-label tls_rsa_pub \
  --private-label tls_rsa_private \
  --private-attributes sign=true
  {
    "error_code": 0,
    "data": {
      "public_key": {
        "key-reference": "0x0000000000280cc8",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "full"
        },
        "attributes": {
          "key-type": "rsa",
          "label": "tls_rsa_pub",
          "id": "",
          "check-value": "0x01fe6e",
          "class": "public-key",
          "encrypt": true,
          "decrypt": false,
          "token": true,
          "always-sensitive": false,
          "derive": false,
          "destroyable": true,
          "extractable": true,
          "local": true,
          "modifiable": true,
          "never-extractable": false,
          "private": true,
          "sensitive": false,
          "sign": false,
          "trusted": false,
          "unwrap": false,
          "verify": false,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 512,
          "public-exponent": "0x010001",
          "modulus": "0xb1d27e857a876f4e9fd5de748a763c539b359f937eb4b4260e30d1435485a732c878cdad9c72538e2215351b1d41358c9bf80b599c
  73a80fdb457aa7b20cd61e486c326e2cfd5e124a7f6a996437437812b542e3caf85928aa866f0298580f7967ee6aa01440297d7308fdd9b76b70d1b67f12634d
  f6e6296d6c116d5744c6d60d14d3bf3cb978fe6b75ac67b7089bafd50d8687213b31abc7dc1bad422780d29c851d5102b56f932551eaf52a9591fd8c43d81ecc
  133022653225bd129f8491101725e9ea33e1ded83fb57af35f847e532eb30cd7e726f23910d2671c6364092e834697ec3cef72cc23615a1ba7c5e100156ae0ac
  ac3160f0ca9725d38318b7",
          "modulus-size-bits": 2048
        }
      },
      "private_key": {
        "key-reference": "0x0000000000280cc7",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "full"
        },
        "attributes": {
          "key-type": "rsa",
          "label": "tls_rsa_private",
          "id": "",
          "check-value": "0x01fe6e",
          "class": "private-key",
          "encrypt": false,
          "decrypt": true,
          "token": true,
          "always-sensitive": true,
          "derive": false,
          "destroyable": true,
          "extractable": true,
          "local": true,
          "modifiable": true,
          "never-extractable": false,
          "private": true,
          "sensitive": true,
          "sign": true,
          "trusted": false,
          "unwrap": false,
          "verify": false,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 1217,
          "public-exponent": "0x010001",
          "modulus": "0xb1d27e857a876f4e9fd5de748a763c539b359f937eb4b4260e30d1435485a732c878cdad9c72538e2215351b1d41358c9bf80b599c73a80fdb457aa7b20cd61e486c326e2cfd5e124a7f6a996437437812b542e3caf85928aa866f0298580f7967ee6aa01440297d7308fdd9b76b70d1b67f12634df6e6296d6c116d5744c6d60d14d3bf3cb978fe6b75ac67b7089bafd50d8687213b31abc7dc1bad422780d29c851d5102b56f932551eaf52a9591fd8c43d81ecc133022653225bd129f8491101725e9ea33e1ded83fb57af35f847e532eb30cd7e726f23910d2671c6364092e834697ec3cef72cc23615a1ba7c5e100156ae0acac3160f0ca9725d38318b7",
          "modulus-size-bits": 2048
        }
      }
    }
  }
  ```
+ 在 HSM 上產生 EC 私有金鑰

  使用 [`key generate-asymmetric-pair ec`](cloudhsm_cli-key-generate-asymmetric-pair-ec.md) 命令來產生 EC 金鑰對。此範例會產生 EC 金鑰對與`prime256v1`曲線 （對應至`NID_X9_62_prime256v1`曲線）、*tls\$1ec\$1pub* 的公有金鑰標籤，以及 *tls\$1ec\$1private* 的私有金鑰標籤。

  ```
  aws-cloudhsm > key generate-asymmetric-pair ec \
      --curve prime256v1 \
      --public-label tls_ec_pub \
      --private-label tls_ec_private \
      --private-attributes sign=true
  {
    "error_code": 0,
    "data": {
      "public_key": {
        "key-reference": "0x000000000012000b",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "session"
        },
        "attributes": {
          "key-type": "ec",
          "label": "tls_ec_pub",
          "id": "",
          "check-value": "0xd7c1a7",
          "class": "public-key",
          "encrypt": false,
          "decrypt": false,
          "token": false,
          "always-sensitive": false,
          "derive": false,
          "destroyable": true,
          "extractable": true,
          "local": true,
          "modifiable": true,
          "never-extractable": false,
          "private": true,
          "sensitive": false,
          "sign": false,
          "trusted": false,
          "unwrap": false,
          "verify": false,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 57,
          "ec-point": "0x047096513df542250a6b228fd9cb67fd0c903abc93488467681974d6f371083fce1d79da8ad1e9ede745fb9f38ac8622a1b3ebe9270556000c",
          "curve": "secp224r1"
        }
      },
  "private_key": {
        "key-reference": "0x000000000012000c",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "session"
        },
        "attributes": {
          "key-type": "ec",
          "label": "tls_ec_private",
          "id": "",
          "check-value": "0xd7c1a7",
          "class": "private-key",
          "encrypt": false,
          "decrypt": false,
          "token": false,
          "always-sensitive": true,
          "derive": false,
          "destroyable": true,
          "extractable": true,
          "local": true,
          "modifiable": true,
          "never-extractable": false,
          "private": true,
          "sensitive": true,
          "sign": true,
          "trusted": false,
          "unwrap": false,
          "verify": false,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 122,
          "ec-point": "0x047096513df542250a6b228fd9cb67fd0c903abc93488467681974d6f371083fce1d79da8ad1e9ede745fb9f38ac8622a1b3ebe9270556000c",
          "curve": "secp224r1"
        }
      }
    }
  }
  ```

**匯出仿造的 PEM 私有金鑰檔案**

HSM 上擁有私有金鑰後，您必須匯出仿造的 PEM 私有金鑰檔案。此檔案不包含實際的金鑰資料，但可讓 OpenSSL 動態引擎識別 HSM 上的私有金鑰。接著，您可以使用私有金鑰來建立憑證簽署要求 (CSR)，簽署 CSR 來建立憑證。

使用 [`key generate-file`](cloudhsm_cli-key-generate-file.md)命令以仿造 PEM 格式匯出私有金鑰，並將其儲存至 檔案。以您自己的值取代下列值。
+ *<private\$1key\$1label>* – 您在上一個步驟中產生的私有金鑰標籤。
+ *<web\$1server\$1fake\$1pem.key>* – 將寫入您仿造 PEM 金鑰的檔案名稱。

```
aws-cloudhsm > key generate-file --encoding reference-pem --path <web_server_fake_pem.key> --filter attr.label=<private_key_label>
{
  "error_code": 0,
  "data": {
    "message": "Successfully generated key file"
  }
}
```

**結束 CloudHSM CLI**

執行下列命令來停止 CloudHSM CLI。

```
aws-cloudhsm > quit
```

您現在應該在系統上有一個新檔案，位於上述命令中 *<web\$1server\$1fake\$1pem.key>* 指定的路徑。此檔案是仿造的 PEM 私有金鑰檔案。

#### 產生自簽憑證
<a name="ssl-offload-generate-certificate"></a>

產生仿造的 PEM 私有金鑰後，您可以使用此檔案來產生憑證簽署要求 (CSR) 和憑證。

在生產環境中，您通常會使用憑證授權單位 (CA) 從 CSR 建立憑證。測試環境不需要 CA。如果您確實使用 CA，請將 CSR 檔案發送給他們，並使用他們在 Web 伺服器中為您提供 HTTPS 的簽名 SSL/TLS 憑證。

除了使用 CA 之外，您也可以使用 AWS CloudHSM OpenSSL 動態引擎來建立自我簽署憑證。自簽憑證不受瀏覽器所信任，請勿用於生產環境。可以用於測試環境。

**警告**  
自簽憑證應該只用於測試環境。若為生產環境，請使用更安全的方法 (例如憑證授權單位) 來建立憑證。<a name="ssl-offload-generate-certificate-prerequisites"></a>

**安裝和設定 OpenSSL 動態引擎**

1. 連接至您的用戶端執行個體。

1. [安裝適用於 AWS CloudHSM 用戶端 SDK 5 的 OpenSSL 動態引擎](openssl5-install.md)<a name="ssl-offload-generate-certificate-steps"></a>

**產生憑證**

1. 取得先前步驟中產生的仿造的 PEM 檔案副本。

1. 建立 CSR

   執行下列命令，使用 AWS CloudHSM OpenSSL 動態引擎來建立憑證簽署請求 (CSR)。以包含您仿造 PEM 私有金鑰的檔案名稱取代 *<web\$1server\$1fake\$1pem.key>。*以包含 CSR 的檔案名稱取代 *<web\$1server.csr>*。

   `req` 是互動式命令。回應每個欄位。欄位資訊會複製到您的 SSL/TLS 憑證。

   ```
   $ openssl req -engine cloudhsm -new -key <web_server_fake_pem.key> -out <web_server.csr>
   ```

1. 建立自簽憑證

   執行下列命令，使用 AWS CloudHSM OpenSSL 動態引擎在 HSM 上使用私有金鑰簽署 CSR。這會建立自簽憑證。在命令中，以您自己的值取代下列值。
   + *<web\$1server.csr>*：包含 CSR 的檔案名稱。
   + *<web\$1server\$1fake\$1pem.key>* – 包含仿造 PEM 私有金鑰的檔案名稱。
   + *<web\$1server.crt>*：包含 Web 伺服器憑證的檔案名稱。

   ```
   $ openssl x509 -engine cloudhsm -req -days 365 -in <web_server.csr> -signkey <web_server_fake_pem.key> -out <web_server.crt>
   ```

完成這些步驟之後，請移至 [步驟 3：設定 Web 伺服器](#ssl-offload-configure-web-server)。

## 步驟 3：設定 Web 伺服器
<a name="ssl-offload-configure-web-server"></a>

更新 Web 伺服器軟體組態，以使用 HTTPS 憑證以及您在[ 上一個步驟](#ssl-offload-import-or-generate-private-key-and-certificate)中建立的對應仿造 PEM 私有金鑰。請記得在開始之前備份現有的憑證和金鑰。這將完成針對 SSL/TLS 卸載搭配 AWS CloudHSM設定您的 Linux Web 伺服器軟體。

完成以下其中一個區段中的步驟。

**Topics**
+ [設定 NGINX Web 伺服器](#ssl-offload-nginx)
+ [設定 Apache Web 伺服器](#ssl-offload-apache)

### 設定 NGINX Web 伺服器
<a name="ssl-offload-nginx"></a>

使用此區段可在支援的平台上設定 NGINX。<a name="update-web-server-config-nginx"></a>

**更新 NGINX 的 Web 伺服器組態**

1. 連接至您的用戶端執行個體。

1. 執行以下命令，為 Web 伺服器憑證和仿造 PEM 私有金鑰建立所需的目錄。

   ```
   $ sudo mkdir -p /etc/pki/nginx/private
   ```

1. 執行以下命令，將您的 Web 伺服器憑證複製到所需的位置。以 Web 伺服器憑證的名稱取代 *<web\$1server.crt>*。

   ```
   $ sudo cp <web_server.crt> /etc/pki/nginx/server.crt
   ```

1. 執行以下命令，將您的仿造 PEM 私有金鑰複製到所需的位置。以包含您仿造 PEM 私有金鑰的檔案名稱取代 *<web\$1server\$1fake\$1pem.key>。*

   ```
   $ sudo cp <web_server_fake_pem.key> /etc/pki/nginx/private/server.key
   ```

1. 執行以下命令來變更檔案的擁有權，使得名為 *nginx* 的使用者可讀取這些檔案。

   ```
   $ sudo chown nginx /etc/pki/nginx/server.crt /etc/pki/nginx/private/server.key
   ```

1. 執行以下命令來備份 `/etc/nginx/nginx.conf` 檔案。

   ```
   $ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
   ```

1. 更新 NGINX 組態。
**注意**  
每個叢集可以在所有 NGINX Web 伺服器上支持最多 1000 個 NGINX 工作者程序。

------
#### [ Amazon Linux 2 ]

   使用文字編輯器來編輯 `/etc/nginx/nginx.conf` 檔案。這需要 Linux 根許可。在檔案上方，新增下列行：

   ```
   ssl_engine cloudhsm;
   env CLOUDHSM_PIN;
   ```

   然後將以下內容新增至檔案的 TLS 區段：

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /usr/share/nginx/html;
   
       ssl_certificate "/etc/pki/nginx/server.crt";
       ssl_certificate_key "/etc/pki/nginx/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters
       # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
       #ssl_dhparam "/etc/pki/nginx/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA";
       ssl_prefer_server_ciphers on;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------
#### [ Amazon Linux 2023 ]

   使用文字編輯器來編輯 `/etc/nginx/nginx.conf` 檔案。這需要 Linux 根許可。在檔案上方，新增下列行：

   ```
   ssl_engine cloudhsm;
   env CLOUDHSM_PIN;
   ```

   然後將以下內容新增至檔案的 TLS 區段：

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /usr/share/nginx/html;
   
       ssl_certificate "/etc/pki/nginx/server.crt";
       ssl_certificate_key "/etc/pki/nginx/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters
       # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
       #ssl_dhparam "/etc/pki/nginx/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA";
       ssl_prefer_server_ciphers on;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------
#### [ Red Hat 8 ]

   使用文字編輯器來編輯 `/etc/nginx/nginx.conf` 檔案。這需要 Linux 根許可。在檔案上方，新增下列行：

   ```
   ssl_engine cloudhsm;
   env CLOUDHSM_PIN;
   ```

   然後將以下內容新增至檔案的 TLS 區段：

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /usr/share/nginx/html;
   
       ssl_certificate "/etc/pki/nginx/server.crt";
       ssl_certificate_key "/etc/pki/nginx/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters
       # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
       #ssl_dhparam "/etc/pki/nginx/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA";
       ssl_prefer_server_ciphers on;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------
#### [ Red Hat 9 ]

   使用文字編輯器來編輯 `/etc/nginx/nginx.conf` 檔案。這需要 Linux 根許可。在檔案上方，新增下列行：

   ```
   ssl_engine cloudhsm;
   env CLOUDHSM_PIN;
   ```

   然後將以下內容新增至檔案的 TLS 區段：

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /usr/share/nginx/html;
   
       ssl_certificate "/etc/pki/nginx/server.crt";
       ssl_certificate_key "/etc/pki/nginx/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters
       # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
       #ssl_dhparam "/etc/pki/nginx/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA";
       ssl_prefer_server_ciphers on;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------
#### [ Ubuntu 22.04 LTS ]

   使用文字編輯器來編輯 `/etc/nginx/nginx.conf` 檔案。這需要 Linux 根許可。在檔案上方，新增下列行：

   ```
   ssl_engine cloudhsm;
   env CLOUDHSM_PIN;
   ```

   然後將以下內容新增至檔案的 TLS 區段：

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /usr/share/nginx/html;
   
       ssl_certificate "/etc/pki/nginx/server.crt";
       ssl_certificate_key "/etc/pki/nginx/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters
       # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
       #ssl_dhparam "/etc/pki/nginx/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA";
       ssl_prefer_server_ciphers on;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------
#### [ Ubuntu 24.04 LTS ]

   使用文字編輯器來編輯 `/etc/nginx/nginx.conf` 檔案。這需要 Linux 根許可。在檔案上方，新增下列行：

   ```
   ssl_engine cloudhsm;
   env CLOUDHSM_PIN;
   ```

   然後將以下內容新增至檔案的 TLS 區段：

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /usr/share/nginx/html;
   
       ssl_certificate "/etc/pki/nginx/server.crt";
       ssl_certificate_key "/etc/pki/nginx/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters
       # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
       #ssl_dhparam "/etc/pki/nginx/dhparams.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA";
       ssl_prefer_server_ciphers on;
   
       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;
   
       location / {
       }
   
       error_page 404 /404.html;
       location = /40x.html {
       }
   
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
       }
   }
   ```

------

   儲存檔案。

1. 備份 `systemd` 組態檔案，然後設定 `EnvironmentFile` 路徑。

------
#### [ Amazon Linux 2 ]

   1.  備份 `nginx.service` 檔案。

      ```
      $ sudo cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1.  在文字編輯器中開啟 `/lib/systemd/system/nginx.service` 檔案，然後在 [Service] (服務) 區段中，新增以下路徑：

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------
#### [ Amazon Linux 2023 ]

   1.  備份 `nginx.service` 檔案。

      ```
      $ sudo cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1.  在文字編輯器中開啟 `/lib/systemd/system/nginx.service` 檔案。然後在 【服務】 區段下，新增下列路徑：

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------
#### [ Red Hat 8 ]

   1.  備份 `nginx.service` 檔案。

      ```
      $ sudo cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1.  在文字編輯器中開啟 `/lib/systemd/system/nginx.service` 檔案，然後在 [Service] (服務) 區段中，新增以下路徑：

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------
#### [ Red Hat 9 ]

   1.  備份 `nginx.service` 檔案。

      ```
      $ sudo cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1.  在文字編輯器中開啟 `/lib/systemd/system/nginx.service` 檔案，然後在 [Service] (服務) 區段中，新增以下路徑：

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------
#### [ Ubuntu 22.04 LTS ]

   1.  備份 `nginx.service` 檔案。

      ```
      $ sudo cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1.  在文字編輯器中開啟 `/lib/systemd/system/nginx.service` 檔案，然後在 [Service] (服務) 區段中，新增以下路徑：

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------
#### [ Ubuntu 24.04 LTS ]

   1.  備份 `nginx.service` 檔案。

      ```
      $ sudo cp /lib/systemd/system/nginx.service /lib/systemd/system/nginx.service.backup
      ```

   1.  在文字編輯器中開啟 `/lib/systemd/system/nginx.service` 檔案，然後在 [Service] (服務) 區段中，新增以下路徑：

      ```
      EnvironmentFile=/etc/sysconfig/nginx
      ```

------

1.  檢查 `/etc/sysconfig/nginx` 檔案是否存在，然後執行以下其中一項：
   + 如果檔案存在，請執行下列命令來備份檔案：

     ```
     $ sudo cp /etc/sysconfig/nginx /etc/sysconfig/nginx.backup
     ```
   +  如果檔案不存在，請開啟文字編輯器，然後建立在 `/etc/sysconfig/` 資料夾中建立名為 `nginx` 的檔案。

1. 設定 NGINX 環境。
**注意**  
用戶端 SDK 5 引入了用於存儲 CU 憑證的 `CLOUDHSM_PIN` 環境變量。

------
#### [ Amazon Linux 2 ]

   在文字編輯器中開啟 `/etc/sysconfig/nginx` 檔案。這需要 Linux 根許可。新增加密使用者 (CU) 憑證：

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

    儲存檔案。

------
#### [ Amazon Linux 2023 ]

   在文字編輯器中開啟 `/etc/sysconfig/nginx` 檔案。這需要 Linux 根許可。新增加密使用者 (CU) 憑證：

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

    儲存檔案。

------
#### [ Red Hat 8 ]

   在文字編輯器中開啟 `/etc/sysconfig/nginx` 檔案。這需要 Linux 根許可。新增加密使用者 (CU) 憑證：

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

    儲存檔案。

------
#### [ Red Hat 9 ]

   在文字編輯器中開啟 `/etc/sysconfig/nginx` 檔案。這需要 Linux 根許可。新增加密使用者 (CU) 憑證：

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

    儲存檔案。

------
#### [ Ubuntu 22.04 LTS ]

   在文字編輯器中開啟 `/etc/sysconfig/nginx` 檔案。這需要 Linux 根許可。新增加密使用者 (CU) 憑證：

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

    儲存檔案。

------
#### [ Ubuntu 24.04 LTS ]

   在文字編輯器中開啟 `/etc/sysconfig/nginx` 檔案。這需要 Linux 根許可。新增加密使用者 (CU) 憑證：

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

    儲存檔案。

------

1. 啟動 NGINX 伺服器。

------
#### [ Amazon Linux 2 ]

   停止任何正在運行的 NGINX 進程

   ```
   $ sudo systemctl stop nginx
   ```

   重新載入 `systemd` 組態以取得最新的變更

   ```
   $ sudo systemctl daemon-reload
   ```

   啟動 NGINX 進程

   ```
   $ sudo systemctl start nginx
   ```

------
#### [ Amazon Linux 2023 ]

   停止所有 NGINX 程序

   ```
   $ sudo systemctl stop nginx
   ```

   重新載入 `systemd` 組態以取得最新的變更

   ```
   $ sudo systemctl daemon-reload
   ```

   啟動 NGINX

   ```
   $ sudo systemctl start nginx
   ```

------
#### [ Red Hat 8 ]

   停止任何正在運行的 NGINX 進程

   ```
   $ sudo systemctl stop nginx
   ```

   重新載入 `systemd` 組態以取得最新的變更

   ```
   $ sudo systemctl daemon-reload
   ```

   啟動 NGINX 進程

   ```
   $ sudo systemctl start nginx
   ```

------
#### [ Red Hat 9 ]

   停止任何正在運行的 NGINX 進程

   ```
   $ sudo systemctl stop nginx
   ```

   重新載入 `systemd` 組態以取得最新的變更

   ```
   $ sudo systemctl daemon-reload
   ```

   啟動 NGINX 進程

   ```
   $ sudo systemctl start nginx
   ```

------
#### [ Ubuntu 22.04 LTS ]

   停止任何正在運行的 NGINX 進程

   ```
   $ sudo systemctl stop nginx
   ```

   重新載入 `systemd` 組態以取得最新的變更

   ```
   $ sudo systemctl daemon-reload
   ```

   啟動 NGINX 進程

   ```
   $ sudo systemctl start nginx
   ```

------
#### [ Ubuntu 24.04 LTS ]

   停止任何正在運行的 NGINX 進程

   ```
   $ sudo systemctl stop nginx
   ```

   重新載入 `systemd` 組態以取得最新的變更

   ```
   $ sudo systemctl daemon-reload
   ```

   啟動 NGINX 進程

   ```
   $ sudo systemctl start nginx
   ```

------

1. (選用) 將平台設定為在啟動時啟動 NGINX。

------
#### [ Amazon Linux 2 ]

   ```
   $ sudo systemctl enable nginx
   ```

------
#### [ Amazon Linux 2023 ]

   ```
   $ sudo systemctl enable nginx
   ```

------
#### [ Red Hat 8 ]

   ```
   $ sudo systemctl enable nginx
   ```

------
#### [ Red Hat 9 ]

   ```
   $ sudo systemctl enable nginx
   ```

------
#### [ Ubuntu 22.04 LTS ]

   ```
   $ sudo systemctl enable nginx
   ```

------
#### [ Ubuntu 24.04 LTS ]

   ```
   $ sudo systemctl enable nginx
   ```

------

在更新您的 Web 伺服器組態之後，請移至 [步驟 4：啟用 HTTPS 流量並驗證憑證](#ssl-offload-enable-traffic-and-verify-certificate)。

### 設定 Apache Web 伺服器
<a name="ssl-offload-apache"></a>

 使用此區段可在支援的平台上設定 Apache。<a name="update-web-server-config-apache"></a>

**更新 Apache 的 Web 伺服器組態**

1. 連線到 Amazon EC2 用戶端執行個體。

1. 為平台定義憑證和私有金鑰的預設位置。

------
#### [ Amazon Linux 2 ]

   在 `/etc/httpd/conf.d/ssl.conf` 檔案中，請確定這些值存在：

   ```
   SSLCertificateFile      /etc/pki/tls/certs/localhost.crt
   SSLCertificateKeyFile   /etc/pki/tls/private/localhost.key
   ```

------
#### [ Amazon Linux 2023 ]

   在 `/etc/httpd/conf.d/ssl.conf` 檔案中。 確保這些值存在：

   ```
   SSLCertificateFile      /etc/pki/tls/certs/localhost.crt
   SSLCertificateKeyFile   /etc/pki/tls/private/localhost.key
   ```

------
#### [ Red Hat 8 ]

   在 `/etc/httpd/conf.d/ssl.conf` 檔案中，請確定這些值存在：

   ```
   SSLCertificateFile      /etc/pki/tls/certs/localhost.crt
   SSLCertificateKeyFile   /etc/pki/tls/private/localhost.key
   ```

------
#### [ Red Hat 9 ]

   在 `/etc/httpd/conf.d/ssl.conf` 檔案中，請確定這些值存在：

   ```
   SSLCertificateFile      /etc/pki/tls/certs/localhost.crt
   SSLCertificateKeyFile   /etc/pki/tls/private/localhost.key
   ```

------
#### [ Ubuntu 22.04 LTS ]

   在 `/etc/apache2/sites-available/default-ssl.conf` 檔案中，請確定這些值存在：

   ```
   SSLCertificateFile      /etc/ssl/certs/localhost.crt
   SSLCertificateKeyFile   /etc/ssl/private/localhost.key
   ```

------
#### [ Ubuntu 24.04 LTS ]

   在 `/etc/apache2/sites-available/default-ssl.conf` 檔案中，請確定這些值存在：

   ```
   SSLCertificateFile      /etc/ssl/certs/localhost.crt
   SSLCertificateKeyFile   /etc/ssl/private/localhost.key
   ```

------

1. 將 Web 伺服器憑證複製到平台所需的位置。

------
#### [ Amazon Linux 2 ]

   ```
   $ sudo cp <web_server.crt> /etc/pki/tls/certs/localhost.crt
   ```

   以 Web 伺服器憑證的名稱取代 *<web\$1server.crt>*。

------
#### [ Amazon Linux 2023 ]

   ```
   $ sudo cp <web_server.crt> /etc/pki/tls/certs/localhost.crt
   ```

   以 Web 伺服器憑證的名稱取代 *<web\$1server.crt>*。

------
#### [ Red Hat 8 ]

   ```
   $ sudo cp <web_server.crt> /etc/pki/tls/certs/localhost.crt
   ```

   以 Web 伺服器憑證的名稱取代 *<web\$1server.crt>*。

------
#### [ Red Hat 9 ]

   ```
   $ sudo cp <web_server.crt> /etc/pki/tls/certs/localhost.crt
   ```

   以 Web 伺服器憑證的名稱取代 *<web\$1server.crt>*。

------
#### [ Ubuntu 22.04 LTS ]

   ```
   $ sudo cp <web_server.crt> /etc/ssl/certs/localhost.crt
   ```

   以 Web 伺服器憑證的名稱取代 *<web\$1server.crt>*。

------
#### [ Ubuntu 24.04 LTS ]

   ```
   $ sudo cp <web_server.crt> /etc/ssl/certs/localhost.crt
   ```

   以 Web 伺服器憑證的名稱取代 *<web\$1server.crt>*。

------

1. 將仿造 PEM 私有金鑰複製到平台所需的位置。

------
#### [ Amazon Linux 2 ]

   ```
   $ sudo cp <web_server_fake_pem.key> /etc/pki/tls/private/localhost.key
   ```

   以包含您仿造 PEM 私有金鑰的檔案名稱取代 *<web\$1server\$1fake\$1pem.key>。*

------
#### [ Amazon Linux 2023 ]

   ```
   $ sudo cp <web_server_fake_pem.key> /etc/pki/tls/private/localhost.key
   ```

   以包含您仿造 PEM 私有金鑰的檔案名稱取代 *<web\$1server\$1fake\$1pem.key>。*

------
#### [ Red Hat 8 ]

   ```
   $ sudo cp <web_server_fake_pem.key> /etc/pki/tls/private/localhost.key
   ```

   以包含您仿造 PEM 私有金鑰的檔案名稱取代 *<web\$1server\$1fake\$1pem.key>。*

------
#### [ Red Hat 9 ]

   ```
   $ sudo cp <web_server_fake_pem.key> /etc/pki/tls/private/localhost.key
   ```

   以包含您仿造 PEM 私有金鑰的檔案名稱取代 *<web\$1server\$1fake\$1pem.key>。*

------
#### [ Ubuntu 22.04 LTS ]

   ```
   $ sudo cp <web_server_fake_pem.key> /etc/ssl/private/localhost.key
   ```

   以包含您仿造 PEM 私有金鑰的檔案名稱取代 *<web\$1server\$1fake\$1pem.key>。*

------
#### [ Ubuntu 24.04 LTS ]

   ```
   $ sudo cp <web_server_fake_pem.key> /etc/ssl/private/localhost.key
   ```

   以包含您仿造 PEM 私有金鑰的檔案名稱取代 *<web\$1server\$1fake\$1pem.key>。*

------

1. 如果平台需要，請更改這些檔案的所有權。

------
#### [ Amazon Linux 2 ]

   ```
   $ sudo chown apache /etc/pki/tls/certs/localhost.crt /etc/pki/tls/private/localhost.key
   ```

   提供讀取許可給名為 *apache* 的使用者。

------
#### [ Amazon Linux 2023 ]

   ```
   $ sudo chown apache /etc/pki/tls/certs/localhost.crt /etc/pki/tls/private/localhost.key
   ```

   提供讀取許可給名為 *apache* 的使用者。

------
#### [ Red Hat 8 ]

   ```
   $ sudo chown apache /etc/pki/tls/certs/localhost.crt /etc/pki/tls/private/localhost.key
   ```

   提供讀取許可給名為 *apache* 的使用者。

------
#### [ Red Hat 9 ]

   ```
   $ sudo chown apache /etc/pki/tls/certs/localhost.crt /etc/pki/tls/private/localhost.key
   ```

   提供讀取許可給名為 *apache* 的使用者。

------
#### [ Ubuntu 22.04 LTS ]

   不需要採取行動。

------
#### [ Ubuntu 24.04 LTS ]

   不需要採取行動。

------

1. 為平台設定 Apache 指令。

------
#### [ Amazon Linux 2 ]

   找到此平台的 SSL 檔案：

   ```
   /etc/httpd/conf.d/ssl.conf
   ```

   該文件包含定義伺服器應該如何運行的 Apache 指令。指令顯示在左側，後面接著一個值。使用文字編輯器編輯此檔案。這需要 Linux 根許可。

   使用這些值更新或輸入下列指令：

   ```
   SSLCryptoDevice cloudhsm
   SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA
   ```

   儲存檔案。

------
#### [ Amazon Linux 2023 ]

   找到此平台的 SSL 檔案：

   ```
   /etc/httpd/conf.d/ssl.conf
   ```

   該文件包含定義伺服器應該如何運行的 Apache 指令。指令顯示在左側，後面接著一個值。使用文字編輯器編輯此檔案。這需要 Linux 根許可。

   使用這些值更新或輸入下列指令：

   ```
   SSLCryptoDevice cloudhsm
   SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA
   ```

   儲存檔案。

------
#### [ Red Hat 8 ]

   找到此平台的 SSL 檔案：

   ```
   /etc/httpd/conf.d/ssl.conf
   ```

   該文件包含定義伺服器應該如何運行的 Apache 指令。指令顯示在左側，後面接著一個值。使用文字編輯器編輯此檔案。這需要 Linux 根許可。

   使用這些值更新或輸入下列指令：

   ```
   SSLCryptoDevice cloudhsm
   SSLProtocol TLSv1.2 TLSv1.3
   SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA
   SSLProxyCipherSuite HIGH:!aNULL
   ```

   儲存檔案。

------
#### [ Red Hat 9 ]

   找到此平台的 SSL 檔案：

   ```
   /etc/httpd/conf.d/ssl.conf
   ```

   該文件包含定義伺服器應該如何運行的 Apache 指令。指令顯示在左側，後面接著一個值。使用文字編輯器編輯此檔案。這需要 Linux 根許可。

   使用這些值更新或輸入下列指令：

   ```
   SSLCryptoDevice cloudhsm
   SSLProtocol TLSv1.2 TLSv1.3
   SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA
   SSLProxyCipherSuite HIGH:!aNULL
   ```

   儲存檔案。

------
#### [ Ubuntu 22.04 LTS ]

   找到此平台的 SSL 檔案：

   ```
   /etc/apache2/mods-available/ssl.conf
   ```

   該文件包含定義伺服器應該如何運行的 Apache 指令。指令顯示在左側，後面接著一個值。使用文字編輯器編輯此檔案。這需要 Linux 根許可。

   使用這些值更新或輸入下列指令：

   ```
   SSLCryptoDevice cloudhsm
   SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA
   SSLProtocol TLSv1.2 TLSv1.3
   ```

   儲存檔案。

   啟用 SSL 模組和預設 SSL 網站組態：

   ```
   $ sudo a2enmod ssl
   $ sudo a2ensite default-ssl
   ```

------
#### [ Ubuntu 24.04 LTS ]

   找到此平台的 SSL 檔案：

   ```
   /etc/apache2/mods-available/ssl.conf
   ```

   該文件包含定義伺服器應該如何運行的 Apache 指令。指令顯示在左側，後面接著一個值。使用文字編輯器編輯此檔案。這需要 Linux 根許可。

   使用這些值更新或輸入下列指令：

   ```
   SSLCryptoDevice cloudhsm
   SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA
   SSLProtocol TLSv1.2 TLSv1.3
   ```

   儲存檔案。

   啟用 SSL 模組和預設 SSL 網站組態：

   ```
   $ sudo a2enmod ssl
   $ sudo a2ensite default-ssl
   ```

------

1. 為平台設定環境值檔案。

------
#### [ Amazon Linux 2 ]

    開啟 httpd 服務檔案：

   ```
   /lib/systemd/system/httpd.service
   ```

    將下列內容加入到 `[Service]` 區段：

   ```
   EnvironmentFile=/etc/sysconfig/httpd
   ```

------
#### [ Amazon Linux 2023 ]

    開啟 httpd 服務檔案：

   ```
   /lib/systemd/system/httpd.service
   ```

    將下列內容加入到 `[Service]` 區段：

   ```
   EnvironmentFile=/etc/sysconfig/httpd
   ```

------
#### [ Red Hat 8 ]

    開啟 httpd 服務檔案：

   ```
   /lib/systemd/system/httpd.service
   ```

    將下列內容加入到 `[Service]` 區段：

   ```
   EnvironmentFile=/etc/sysconfig/httpd
   ```

------
#### [ Red Hat 9 ]

    開啟 httpd 服務檔案：

   ```
   /lib/systemd/system/httpd.service
   ```

    將下列內容加入到 `[Service]` 區段：

   ```
   EnvironmentFile=/etc/sysconfig/httpd
   ```

------
#### [ Ubuntu 22.04 LTS ]

   不需要採取行動。環境值要填入 `/etc/sysconfig/httpd`

------
#### [ Ubuntu 24.04 LTS ]

   不需要採取行動。環境值要填入 `/etc/sysconfig/httpd`

------

1. 在儲存平台環境變數的檔案中，設定包含加密使用者 (CU) 憑證的環境變數：

------
#### [ Amazon Linux 2 ]

   使用文字編輯器編輯 `/etc/sysconfig/httpd`。

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

------
#### [ Amazon Linux 2023 ]

   使用文字編輯器編輯 `/etc/sysconfig/httpd`。

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

------
#### [ Red Hat 8 ]

   使用文字編輯器編輯 `/etc/sysconfig/httpd`。

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

**注意**  
用戶端 SDK 5 引入了用於存儲 CU 憑證的 `CLOUDHSM_PIN` 環境變量。

------
#### [ Red Hat 9 ]

   使用文字編輯器編輯 `/etc/sysconfig/httpd`。

   ```
   CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

**注意**  
用戶端 SDK 5 引入了用於存儲 CU 憑證的 `CLOUDHSM_PIN` 環境變量。

------
#### [ Ubuntu 22.04 LTS ]

   使用文字編輯器編輯 `/etc/apache2/envvars`。

   ```
   export CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

**注意**  
用戶端 SDK 5 引入了用於存儲 CU 憑證的 `CLOUDHSM_PIN` 環境變量。在用戶端 SDK 3 中，將 CU 憑證儲存在 `n3fips_password` 環境變數中。用戶端 SDK 5 支援這兩個環境變數，但建議使用 `CLOUDHSM_PIN`。

------
#### [ Ubuntu 24.04 LTS ]

   使用文字編輯器編輯 `/etc/apache2/envvars`。

   ```
   export CLOUDHSM_PIN=<CU user name>:<password>
   ```

   以 CU 憑證取代*<CU 使用者名稱>*和*<密碼>*。

**注意**  
用戶端 SDK 5 引入了用於存儲 CU 憑證的 `CLOUDHSM_PIN` 環境變量。在用戶端 SDK 3 中，將 CU 憑證儲存在 `n3fips_password` 環境變數中。用戶端 SDK 5 支援這兩個環境變數，但建議使用 `CLOUDHSM_PIN`。

------

1. 啟動 Apache Web 伺服器。

------
#### [ Amazon Linux 2 ]

   ```
   $ sudo systemctl daemon-reload
   $ sudo service httpd start
   ```

------
#### [ Amazon Linux 2023 ]

   ```
   $ sudo systemctl daemon-reload
   $ sudo service httpd start
   ```

------
#### [ Red Hat 8 ]

   ```
   $ sudo systemctl daemon-reload
   $ sudo service httpd start
   ```

------
#### [ Red Hat 9 ]

   ```
   $ sudo systemctl daemon-reload
   $ sudo service httpd start
   ```

------
#### [ Ubuntu 22.04 LTS ]

   ```
   $ sudo service apache2 start
   ```

------
#### [ Ubuntu 24.04 LTS ]

   ```
   $ sudo service apache2 start
   ```

------

1. (選用) 將平台設定為在啟動時啟動 Apache。

------
#### [ Amazon Linux 2 ]

   ```
   $ sudo chkconfig httpd on
   ```

------
#### [ Amazon Linux 2023 ]

   ```
   $ sudo chkconfig httpd on
   ```

------
#### [ Red Hat 8 ]

   ```
   $ systemctl enable httpd
   ```

------
#### [ Red Hat 9 ]

   ```
   $ systemctl enable httpd
   ```

------
#### [ Ubuntu 22.04 LTS ]

   ```
   $ sudo systemctl enable apache2
   ```

------
#### [ Ubuntu 24.04 LTS ]

   ```
   $ sudo systemctl enable apache2
   ```

------

在更新您的 Web 伺服器組態之後，請移至 [步驟 4：啟用 HTTPS 流量並驗證憑證](#ssl-offload-enable-traffic-and-verify-certificate)。

## 步驟 4：啟用 HTTPS 流量並驗證憑證
<a name="ssl-offload-enable-traffic-and-verify-certificate"></a>

使用 設定 Web 伺服器進行 SSL/TLS 卸載後 AWS CloudHSM，請將 Web 伺服器執行個體新增至允許傳入 HTTPS 流量的安全群組。這可讓用戶端 (例如 Web 瀏覽器) 與 Web 伺服器建立 HTTPS 連線。然後，建立與 Web 伺服器的 HTTPS 連線，並確認它使用您為 SSL/TLS 卸載設定的憑證 AWS CloudHSM。

**Topics**
+ [啟用傳入 HTTPS 連線](#ssl-offload-add-security-group-linux)
+ [驗證 HTTPS 是否使用您已設定的憑證](#ssl-offload-verify-https-connection-linux-enable)

### 啟用傳入 HTTPS 連線
<a name="ssl-offload-add-security-group-linux"></a>

若要從用戶端 (例如 Web 瀏覽器) 連接到 Web 伺服器，請建立允許傳入 HTTPS 連接的安全群組。特別是應該允許連接埠 443 上的傳入 TCP 連線。將此安全群組指派到您的 Web 伺服器。

**建立 HTTPS 的安全群組並將其指派至您的 Web 伺服器**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中選擇**安全群組**。

1. 選擇**建立安全群組**。

1. 對於 **Create Security Group (建立安全群組)**，執行下列動作：

   1. 對於 **Security group name (安全群組名稱)**，輸入您要建立之安全群組的名稱。

   1. (選用) 輸入您要建立之安全群組的描述。

   1. 對於 **VPC**，選擇包含 Web 伺服器 Amazon EC2 執行個體的 VPC。

   1. 選取 **Add Rule (新增規則)**。

   1. 對於**類型**，從下拉式視窗中選取 **HTTPS**。

   1. 對於**來源**，輸入來源位置。

   1. 選擇**建立安全群組**。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取 Web 伺服器執行個體旁的核取方塊。

1. 選取頁面頂端的**動作**下拉式選單。選取**安全性**，然後選取**變更安全群組**。

1. 對於**關聯的安全群組**，請選取搜尋方塊，然後選取您為 HTTPS 建立之安全群組。然後選擇**新增安全群組**。

1. 選取**儲存**。

### 驗證 HTTPS 是否使用您已設定的憑證
<a name="ssl-offload-verify-https-connection-linux-enable"></a>

將 Web 伺服器新增至安全群組後，您可以驗證 SSL/TLS 卸載是否使用您的自我簽署憑證。若要這樣做，您可以使用 Web 瀏覽器或使用 [OpenSSL s\$1client](https://www.openssl.org/docs/manmaster/man1/s_client.html) 之類的工具。

**使用 Web 瀏覽器驗證 SSL/TLS 卸載**

1. 使用 Web 瀏覽器來透過伺服器的公有 DNS 名稱或 IP 地址連接到您的 Web 伺服器。請確定網址列中的 URL 開頭為 https://。例如 **https://ec2-52-14-212-67.us-east-2.compute.amazonaws.com/**。
**提示**  
您可以使用 DNS 服務 (例如 Amazon Route 53)，將網站的網域名稱 (例如，https://www.example.com/) 路由到 Web 伺服器。如需詳細資訊，請參閱《Amazon Route 53 開發人員指南》**或 DNS 服務文件中的[將流量路由到 Amazon EC2 執行個體](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html)。

1. 使用您的 Web 瀏覽器來檢視 Web 伺服器憑證。如需詳細資訊，請參閱下列內容：
   + 若為 Mozilla Firefox，請參閱 Mozilla 技術支援網站上的[檢視憑證](https://support.mozilla.org/en-US/kb/secure-website-certificate#w_view-a-certificate)。
   + 若為 Google Chrome，請參閱 Google Web 開發人員工具網站上的[了解安全問題](https://developers.google.com/web/tools/chrome-devtools/security)。

   其他 Web 瀏覽器可能有類似的功能，可供您用來檢視 Web 伺服器憑證。

1. 確保 SSL/TLS 憑證是您設定 Web 伺服器所要使用的憑證。

**使用 OpenSSL s\$1client 來驗證 SSL/TLS 卸載**

1. 執行以下 OpenSSL 命令來使用 HTTPS 連接至 Web 伺服器。以 Web 伺服器的公有 DNS 名稱或 IP 地址來取代*<伺服器名稱>*。

   ```
   openssl s_client -connect <server name>:443
   ```
**提示**  
您可以使用 DNS 服務 (例如 Amazon Route 53)，將網站的網域名稱 (例如，https://www.example.com/) 路由到 Web 伺服器。如需詳細資訊，請參閱《Amazon Route 53 開發人員指南》**或 DNS 服務文件中的[將流量路由到 Amazon EC2 執行個體](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html)。

1. 確保 SSL/TLS 憑證是您設定 Web 伺服器所要使用的憑證。

您現在有透過 HTTPS 而受到保護的網站。Web 伺服器的私有金鑰存放在 AWS CloudHSM 叢集的 HSM 中。

若要新增負載平衡器，請參閱 [使用 Elastic Load Balancing for 新增負載平衡器 AWS CloudHSM（選用）](third-offload-add-lb.md)。