

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS CloudHSM 使用 NGINX 在 Linux 上卸载 SSL/TLS 或者带有 OpenSSL 的 Apache
<a name="third-offload-linux-openssl"></a>

本主题提供在 Linux Web 服务器 AWS CloudHSM 上使用设置 SSL/TLS 卸载的 step-by-step说明。

**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 服务器软件使用集群 HSMs 中的进行加密卸载和密钥存储。OpenSSL 引擎是连接 Web 服务器与您的 AWS CloudHSM 群集的桥梁。

要完成本教程，您必须先选择在 Linux 上使用 NGINX 还是 Apache Web 服务器软件。然后，本教程将介绍如何执行以下操作：
+ 在 Amazon EC2 实例上安装 Web 服务器软件。
+ 使用存储在您的 AWS CloudHSM 集群中的私有密钥将 Web 服务器软件配置为支持 HTTPS。
+ （可选）使用 Amazon EC2 创建第二个 Web 服务器实例，并使用 Elastic Load Balancing 创建负载均衡器。使用负载均衡器可以在多台服务器中分配负载，从而提高性能。它还能在一台或多台服务器发生故障的情况下提供冗余和更高的可用性。

在您准备好开始使用后，请转到 [步骤 1：设置先决条件](#ssl-offload-prerequisites)。

## 步骤 1：设置先决条件
<a name="ssl-offload-prerequisites"></a>

不同的平台需要不同的先决条件。请使用以下与您的平台匹配的先决条件部分。

### 客户端软件开发工具包 5 的先决条件
<a name="new-versions"></a>

要使用客户端 SDK 5 设置 Web 服务器 SSL/TLS 卸载，您需要满足以下条件：
+ 具有至少两个硬件安全模块 (HSM) 的活动 AWS CloudHSM 集群
**注意**  
您可以使用单个 HSM 集群，但您必须首先禁用客户端密钥持久性。有关更多信息，请参阅[管理客户端密钥持久性设置](working-client-sync.md#client-sync-sdk8)和[客户端软件开发工具包 5 配置工具](configure-sdk-5.md)。
+ 一个运行已安装以下软件的 Linux 操作系统的 Amazon EC2 实例：
  + Web 服务器（NGINX 或 Apache）
  + 使用适用于客户端软件开发工具包 5 的 OpenSSL 动态引擎
+ 一个[加密用户](understanding-users.md#crypto-user-chsm-cli)（CU），该用户拥有和管理 HSM 上的 Web 服务器的私有密钥。

**在 HSM 上设置 Linux Web 服务器实例并创建 CU**

1. 为安装和配置 OpenSSL 动态引擎。 AWS CloudHSM有关安装 OpenSSL 动态引擎的更多信息，请参阅[适用于客户端软件开发工具包 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 后，你需要创建一个从 OpenSSL 动态引擎库到这个版本的 AWS CloudHSM 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>
+ 要使用安全增强型 Linux (SELinux) 和 Web 服务器，必须允许端口 2223 上的出站 TCP 连接，该端口是 Client SDK 5 用来与 HSM 通信的端口。
+ 要创建和激活集群并授予 EC2 实例访问该集群的权限，请完成[入门 AWS CloudHSM](getting-started.md)的步骤。入门 step-by-step指南提供了使用一个 HSM 和 Amazon EC2 客户端实例创建活动集群的说明。您可使用此客户端实例作为您的 Web 服务器。
+ 为避免禁用客户端密钥持久性，请向集群添加多个 HSM。有关更多信息，请参阅 [向集群添加 HS AWS CloudHSM M](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>*替换为您的加密用户的用户名

   ```
   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 服务器中为您提供的签名 SSL/TLS 证书，用于 HTTPS。

除了使用 CA 之外，您还可以使用 AWS CloudHSM OpenSSL 动态引擎创建自签名证书。自签名证书不受浏览器的信任，不应在生产环境中使用。它们可在测试环境中使用。

**警告**  
自签名证书只应在测试环境中使用。对于生产环境，请使用更安全的方法 (如证书颁发机构) 来创建证书。<a name="ssl-offload-generate-certificate-prerequisites"></a>

**安装和配置 OpenSSL 动态引擎**

1. 连接到您的客户端实例。

1. [安装适用于 AWS CloudHSM 客户端 SDK 的 OpenSSL 动态引擎 5](openssl5-install.md)<a name="ssl-offload-generate-certificate-steps"></a>

**生成证书**

1. 获取前面步骤中生成的伪造 PEM 文件的副本。

1. 创建 CSR

   运行以下命令使用 AWS CloudHSM OpenSSL 动态引擎创建证书签名请求 (CSR)。*<web\$1server\$1fake\$1pem.key>*替换为包含您的虚假 PEM 私钥的文件名。*<web\$1server.csr>*替换为包含您的 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>

更新您的网络服务器软件的配置以使用 HTTPS 证书以及在[上一步](#ssl-offload-import-or-generate-private-key-and-certificate)中创建的相应伪造 PEM 私有密钥。切记在开始前备份您现有的证书。这将完成您的 Linux Web 服务器软件的设置以进行 SSL/TLS 卸载。 AWS CloudHSM

完成下述步骤之一。

**Topics**
+ [配置 NGINX网络服务器](#ssl-offload-nginx)
+ [配置 Apache 网络服务器](#ssl-offload-apache)

### 配置 NGINX网络服务器
<a name="ssl-offload-nginx"></a>

使用此部分在支持的平台上配置 NGINX。<a name="update-web-server-config-nginx"></a>

**更新 NGINX 的网络服务器配置**

1. 连接到您的客户端实例。

1. 运行以下命令以创建网络服务器证书和伪造 PEM 私有密钥所需的目录。

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

1. 运行以下命令以将您的网络服务器证书复制到所需位置。*<web\$1server.crt>*替换为您的 Web 服务器证书的名称。

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

1. 运行以下命令以将您的伪造 PEM 私有密钥复制到所需位置。*<web\$1server\$1fake\$1pem.key>*替换为包含您的虚假 PEM 私钥的文件名。

   ```
   $ 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 网络服务器上支持 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 环境。
**注意**  
客户端软件开发工具包 5 引入了用于存储 CU 凭证的 `CLOUDHSM_PIN` 环境变量。

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

   在文本编辑器中打开 `/etc/sysconfig/nginx` 文件。这需要 Linux 根权限。添加加密用户 (CU) 凭证：

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

    保存该文件。

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

   在文本编辑器中打开 `/etc/sysconfig/nginx` 文件。这需要 Linux 根权限。添加加密用户 (CU) 凭证：

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

    保存该文件。

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

   在文本编辑器中打开 `/etc/sysconfig/nginx` 文件。这需要 Linux 根权限。添加加密用户 (CU) 凭证：

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

    保存该文件。

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

   在文本编辑器中打开 `/etc/sysconfig/nginx` 文件。这需要 Linux 根权限。添加加密用户 (CU) 凭证：

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

    保存该文件。

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

   在文本编辑器中打开 `/etc/sysconfig/nginx` 文件。这需要 Linux 根权限。添加加密用户 (CU) 凭证：

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

    保存该文件。

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

   在文本编辑器中打开 `/etc/sysconfig/nginx` 文件。这需要 Linux 根权限。添加加密用户 (CU) 凭证：

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

    保存该文件。

------

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
   ```

------

在更新您的网络服务器配置后，转到[步骤 4：启用 HTTPS 流量并验证证书](#ssl-offload-enable-traffic-and-verify-certificate)。

### 配置 Apache 网络服务器
<a name="ssl-offload-apache"></a>

 使用此部分在支持的平台上配置 Apache。<a name="update-web-server-config-apache"></a>

**更新 Apache 的网络服务器配置**

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. 将您的网络服务器证书复制到平台所需位置。

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

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

   *<web\$1server.crt>*替换为您的 Web 服务器证书的名称。

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

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

   *<web\$1server.crt>*替换为您的 Web 服务器证书的名称。

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

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

   *<web\$1server.crt>*替换为您的 Web 服务器证书的名称。

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

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

   *<web\$1server.crt>*替换为您的 Web 服务器证书的名称。

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

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

   *<web\$1server.crt>*替换为您的 Web 服务器证书的名称。

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

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

   *<web\$1server.crt>*替换为您的 Web 服务器证书的名称。

------

1. 将您的虚设 PEM 私钥复制到平台所需的位置。

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

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

   *<web\$1server\$1fake\$1pem.key>*替换为包含您的虚假 PEM 私钥的文件名。

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

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

   *<web\$1server\$1fake\$1pem.key>*替换为包含您的虚假 PEM 私钥的文件名。

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

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

   *<web\$1server\$1fake\$1pem.key>*替换为包含您的虚假 PEM 私钥的文件名。

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

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

   *<web\$1server\$1fake\$1pem.key>*替换为包含您的虚假 PEM 私钥的文件名。

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

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

   *<web\$1server\$1fake\$1pem.key>*替换为包含您的虚假 PEM 私钥的文件名。

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

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

   *<web\$1server\$1fake\$1pem.key>*替换为包含您的虚假 PEM 私钥的文件名。

------

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 user name>*和*<password>*。

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

   使用文本编辑器编辑 `/etc/sysconfig/httpd`。

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

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

   使用文本编辑器编辑 `/etc/sysconfig/httpd`。

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

**注意**  
客户端软件开发工具包 5 引入了用于存储 CU 凭证的 `CLOUDHSM_PIN` 环境变量。

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

   使用文本编辑器编辑 `/etc/sysconfig/httpd`。

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

**注意**  
客户端软件开发工具包 5 引入了用于存储 CU 凭证的 `CLOUDHSM_PIN` 环境变量。

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

   使用文本编辑器编辑 `/etc/apache2/envvars`。

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

**注意**  
客户端软件开发工具包 5 引入了用于存储 CU 凭证的 `CLOUDHSM_PIN` 环境变量。在客户端软件开发工具包 3 中，您将 CU 凭据存储在 `n3fips_password` 环境变量中。客户端软件开发工具包 5 支持这两个环境变量，但我们建议使用 `CLOUDHSM_PIN`。

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

   使用文本编辑器编辑 `/etc/apache2/envvars`。

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

   用 CU 凭证替换*<CU user name>*和*<password>*。

**注意**  
客户端软件开发工具包 5 引入了用于存储 CU 凭证的 `CLOUDHSM_PIN` 环境变量。在客户端软件开发工具包 3 中，您将 CU 凭据存储在 `n3fips_password` 环境变量中。客户端软件开发工具包 5 支持这两个环境变量，但我们建议使用 `CLOUDHSM_PIN`。

------

1. 启动 Apache网络服务器。

------
#### [ 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
   ```

------

在更新您的网络服务器配置后，转到 [步骤 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 连接。将此安全组分配给您的网络服务器。

**为 HTTPS 创建安全组并将其分配给您的网络服务器**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**安全组**。

1. 选择**创建安全组**。

1. 对于**创建安全组**，执行以下操作：

   1. 对于**安全组名称**，键入您要创建的安全组的名称。

   1. (可选) 键入对您要创建的安全组的描述。

   1. 对于 **VPC**，选择包含您的 Web 服务器 Amazon EC2 实例的 VPC。

   1. 选择**添加规则**。

   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 卸载是否使用您的自签名证书。您可以使用网络浏览器或使用工具 (如 [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/**。
**提示**  
您可以使用诸如 Amazon Route 53 之类的 DNS 服务将您网站的域名（例如 https://www.example.com/）路由到您的网络服务器。有关更多信息，请参阅 *《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 Support 网站上的[查看证书](https://support.mozilla.org/en-US/kb/secure-website-certificate#w_view-a-certificate)。
   + 关于 Google Chrome 浏览器，请参阅 Google Tools for Web Developers 网站上的[了解安全问题](https://developers.google.com/web/tools/chrome-devtools/security)。

   其他网络浏览器可能具有相似的功能，可使用这些功能来查看网络服务器证书。

1. 确保该 SSL/TLS 证书是您配置的 Web 服务器要使用的证书。

**使用 OpenSSL s\$1client 验证 SSL/TLS 卸载**

1. 运行以下 OpenSSL 命令以通过 HTTPS 连接到您的 Web 服务器。*<server name>*替换为您的 Web 服务器的公有 DNS 名称或 IP 地址。

   ```
   openssl s_client -connect <server name>:443
   ```
**提示**  
您可以使用诸如 Amazon Route 53 之类的 DNS 服务将您网站的域名（例如 https://www.example.com/）路由到您的网络服务器。有关更多信息，请参阅 *《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 添加负载均衡器 AWS CloudHSM（可选）](third-offload-add-lb.md)。