

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AWS CloudHSM SSL/TLS descarga en Linux usando NGINX o HAProxy con el proveedor OpenSSL
<a name="third-offload-linux-openssl-provider"></a>

En este tema se proporcionan instrucciones paso a paso para configurar la descarga de identidades de servidores AWS CloudHSM en un SSL/TLS servidor web Linux que utilice NGINX o HAProxy con el proveedor OpenSSL.

**Topics**
+ [Descripción general de](#ssl-offload-linux-openssl-provider-overview)
+ [Paso 1: configurar los requisitos previos](#ssl-offload-provider-prerequisites)
+ [Paso 2: Genere o importe una clave privada y obtenga un certificado](#ssl-offload-provider-generate-key-and-certificate)
+ [Paso 3: configurar el servidor web](#ssl-offload-provider-configure-web-server)
+ [Paso 4: habilitar el tráfico HTTPS y verificar el certificado](#ssl-offload-enable-traffic-and-verify-certificate-provider)

## Descripción general de
<a name="ssl-offload-linux-openssl-provider-overview"></a>

En Linux, el software de servidor web [ NGINX ](https://nginx.org/en/) y [ HAProxy ](https://www.haproxy.org/) se integra con OpenSSL para admitir HTTPS. [https://www.openssl.org/](https://www.openssl.org/) El proveedor [AWS CloudHSM OpenSSL ](openssl-provider-library.md) proporciona una interfaz que permite al software del servidor web utilizar los HSM del clúster para la descarga criptográfica y el almacenamiento de claves. El proveedor OpenSSL es el puente que conecta el servidor web con su clúster. AWS CloudHSM 

Para completar este tutorial, configurará NGINX o HAProxy para usar el proveedor OpenSSL. AWS CloudHSM El tutorial muestra cómo hacer lo siguiente:
+ Instalar el software del servidor web en una instancia de Amazon EC2.
+ Configurar el software del servidor web para que sea compatible con HTTPS mediante el uso de una clave privada almacenada en su clúster de AWS CloudHSM .
+ (Opcional) Uso de Amazon EC2 para crear una segunda instancia de servidor web y Elastic Load Balancing para crear un equilibrador de carga. El uso de un equilibrador de carga puede mejorar el desempeño al distribuir la carga entre varios servidores. También puede proporcionar redundancia y una mayor disponibilidad si uno o más servidores funcionan mal.

Cuando esté listo para empezar, vaya al [Paso 1: configurar los requisitos previos](#ssl-offload-provider-prerequisites).

## Paso 1: configurar los requisitos previos
<a name="ssl-offload-provider-prerequisites"></a>

Las diferentes plataformas requieren requisitos previos diferentes. Utilice la siguiente sección de requisitos previos que se ajuste a su plataforma.

### Requisitos previos para AWS CloudHSM Proveedor de OpenSSL
<a name="provider-new-versions"></a>

Para configurar la descarga de identidades de SSL/TLS servidores web con el SDK 5 de AWS CloudHSM OpenSSL Provider for Client, necesita lo siguiente:
+ Un AWS CloudHSM clúster activo con al menos dos módulos de seguridad de hardware (HSM)
**nota**  
Puede usar un único clúster de HSM, pero primero debe deshabilitar la durabilidad de la clave de cliente. Para obtener más información, consulte [Administrar la configuración de durabilidad de las claves de cliente](working-client-sync.md#client-sync-sdk8) y [Herramienta de configuración del SDK 5 de cliente](configure-sdk-5.md).
+ Una instancia de Amazon EC2 que ejecute el sistema operativo Linux y tenga el siguiente software instalado:
  + Un servidor web (ya sea NGINX o HAProxy)
  + El proveedor de AWS CloudHSM OpenSSL para el cliente SDK 5
+ Un [usuario de criptografía](understanding-users.md#crypto-user-chsm-cli) (CU) que sea el propietario y administre la clave privada del servidor web en el HSM.

**Para configurar una instancia de servidor web de Linux y crear un CU en el HSM**
**nota**  
Muchos de los comandos de este procedimiento requieren privilegios elevados. Es posible que necesite ejecutar comandos con el usuario raíz `sudo` o como usuario raíz, según la configuración del sistema.

1. Instale y configure el proveedor AWS CloudHSM OpenSSL para Client SDK 5. Para obtener más información sobre la instalación del proveedor de OpenSSL, consulte el SDK 5 del proveedor de [AWS CloudHSM OpenSSL para clientes. ](openssl-provider-install.md)

1. En una instancia EC2 de Linux que tenga acceso a su clúster, instale el servidor web NGINX o HAProxy:

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

     ```
     $ yum install nginx
     ```
   + HAProxy

     ```
     $ yum install haproxy
     ```

------
#### [ RHEL 9 (9.2\+) ]
   + NGINX

     ```
     $ yum install nginx
     ```
   + HAProxy

     ```
     $ yum install haproxy
     ```

------
#### [ RHEL 10 (10.0\+) ]
   + NGINX

     ```
     $ yum install nginx
     ```
   + HAProxy

     ```
     $ yum install haproxy
     ```

------
#### [ Ubuntu 26.04 LTS ]
   + NGINX

     ```
     $ apt install nginx
     ```
   + HAProxy

     ```
     $ apt install haproxy
     ```

------

1. Use la CLI de CloudHSM para crear un [usuario de criptografía](understanding-users.md#crypto-user-chsm-cli). Para obtener más información sobre la administración de los usuarios de HSM, consulte [Administrar a los usuarios de HSM con la CLI de CloudHSM](manage-hsm-users-chsm-cli.md).
**sugerencia**  
Realice un seguimiento del nombre de usuario y la contraseña del CU. Los necesitará más adelante cuando genere o importe el certificado y la clave privada de HTTPS para el servidor web.

Después de completar estos pasos, vaya a [Paso 2: Genere o importe una clave privada y obtenga un certificado](#ssl-offload-provider-generate-key-and-certificate).

#### Notas
<a name="note-ssl5-provider-pre"></a>
+ Para usar Security-Enhanced Linux (SELinux) y servidores web, debe permitir las conexiones TCP salientes en el puerto 2223, que es el puerto que el SDK 5 del cliente utiliza para comunicarse con el HSM.
+ Para crear y activar un clúster y permitir que una instancia EC2 acceda al clúster, complete los pasos que se indican en [Introducción a AWS CloudHSM](getting-started.md). La introducción ofrece instrucciones paso a paso para crear un clúster activo con un HSM y una instancia de cliente de Amazon EC2. Puede utilizar esta instancia de cliente como su servidor web. 
+ Para evitar deshabilitar la durabilidad de la clave de cliente, agregue más de un HSM a su clúster. Para obtener más información, consulte [Añadir un HSM a un AWS CloudHSM clúster](add-hsm.md).
+ Para conectarse a su instancia de cliente, puede utilizar SSH o PuTTY. Para obtener más información, consulte [Conectarse a la instancia de Linux mediante SSH](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html) o [Conectarse a la instancia de Linux desde Windows mediante PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html) en la documentación de Amazon EC2. 

## Paso 2: Genere o importe una clave privada y obtenga un certificado
<a name="ssl-offload-provider-generate-key-and-certificate"></a>

Para habilitar HTTPS, la aplicación de servidor web (NGINX o HAProxy) necesita una clave privada y el certificado correspondiente. SSL/TLS Para utilizar la descarga de identidades de SSL/TLS servidores web con la descarga de identidades AWS CloudHSM, debe almacenar la clave privada en un HSM de su clúster. AWS CloudHSM Primero generará una clave privada y usará la clave para crear una solicitud de firma de certificado (CSR). Luego exporta una *clave privada PEM falsa* desde el HSM, que es un archivo de clave privada en formato PEM que contiene una referencia a la clave privada almacenada en el HSM (no es la clave privada real). Su servidor web utiliza el archivo de clave privada PEM falso para identificar la clave privada en el HSM durante la transferencia de identidades del servidor. SSL/TLS 

### Generación de una clave privada
<a name="ssl-offload-provider-generate-private-key"></a>

Esta sección muestra cómo generar un par de claves con la [CLI de CloudHSM](cloudhsm_cli.md). Una vez que tenga un par de claves generado dentro del HSM, puede exportarlo como un archivo PEM falso y generar el certificado correspondiente. <a name="ssl-offload-provider-generate-private-key-prerequisites"></a>

**Instalación y configuración de la CLI de CloudHSM**

1. [Instale y configure](cloudhsm_cli-getting-started.md) la CLI de CloudHSM.

1. Use el siguiente comando para iniciar la CLI de CloudHSM.

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

1. Ejecute el siguiente comando para iniciar sesión en el HSM. Sustitúyalo por el {{<user name>}} nombre de usuario de su usuario criptográfico

   ```
   aws-cloudhsm>login --username {{<user name>}} --role crypto-user
   ```

**Generación una clave privada**

Según su caso de uso, puede generar un par de claves RSA o EC. También puede generar un Ed25519 o un par de ML-DSA claves para usarlo con TLS 1.3. Realice una de las siguientes acciones:
+ Cómo generar una clave privada RSA en un HSM

  Use el comando [`key generate-asymmetric-pair rsa`](cloudhsm_cli-key-generate-asymmetric-pair-rsa.md) para generar un par de claves RSA: Este ejemplo genera un par de claves RSA con un módulo de 2048, un exponente público de 65537, una etiqueta de clave pública de y una etiqueta de clave privada de. {{tls\_rsa\_pub}} {{tls\_rsa\_private}}

  ```
  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": "0xb1d27e857a876f4e9fd5de748a763c539b359f937eb4b4260e30d1435485a732c878cdad9c72538e2215351b1d41358c9bf80b599c73a80fdb457aa7b20cd61e486c326e2cfd5e124a7f6a996437437812b542e3caf85928aa866f0298580f7967ee6aa01440297d7308fdd9b76b70d1b67f12634df6e6296d6c116d5744c6d60d14d3bf3cb978fe6b75ac67b7089bafd50d8687213b31abc7dc1bad422780d29c851d5102b56f932551eaf52a9591fd8c43d81ecc133022653225bd129f8491101725e9ea33e1ded83fb57af35f847e532eb30cd7e726f23910d2671c6364092e834697ec3cef72cc23615a1ba7c5e100156ae0acac3160f0ca9725d38318b7",
          "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
        }
      }
    }
  }
  ```
+ Cómo generar una clave privada EC en un HSM

  Use el comando [`key generate-asymmetric-pair ec`](cloudhsm_cli-key-generate-asymmetric-pair-ec.md) para generar un par de claves EC. Este ejemplo genera un par de claves EC con la `prime256v1` curva (correspondiente a la `NID_X9_62_prime256v1` curva), una etiqueta de clave pública de y una etiqueta de clave {{tls\_ec\_pub}} privada de. {{tls\_ec\_private}}

  ```
  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"
        }
      }
    }
  }
  ```
+ Para generar una clave privada Ed25519 en un HSM
**Disponibilidad del Ed25519**  
El Ed25519 solo está disponible en clústeres que no son FIPS. El Ed25519 solo admite TLS 1.3.

  Utilice el [`key generate-asymmetric-pair ec`](cloudhsm_cli-key-generate-asymmetric-pair-ec.md) comando para generar un par de claves Ed25519. Este ejemplo genera un par de claves Ed25519 con una etiqueta de clave pública {{tls\_ed25519\_pub}} y una etiqueta de clave privada de. {{tls\_ed25519\_private}}

  ```
  aws-cloudhsm > key generate-asymmetric-pair ec \
      --curve ed25519 \
      --public-label tls_ed25519_pub \
      --private-label tls_ed25519_private \
      --private-attributes sign=true \
      --public-attributes verify=true
  {
    "error_code": 0,
    "data": {
      "public_key": {
        "key-reference": "0x0000000000383931",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "key-quorum-values": {
            "manage-key-quorum-value": 0,
            "use-key-quorum-value": 0
          },
          "cluster-coverage": "full"
        },
        "attributes": {
          "key-type": "ec",
          "label": "tls_ed25519_pub",
          "id": "0x",
          "check-value": "0x4cb1b1",
          "class": "public-key",
          "encrypt": false,
          "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": true,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 32,
          "ec-point": "0x302a300506032b6570032100c31f8a3695f571dda1658bc98e0591ab088c1a657b3199dd50c3956046ebbe75",
          "curve": "ed25519"
        }
      },
      "private_key": {
        "key-reference": "0x0000000000382e60",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "key-quorum-values": {
            "manage-key-quorum-value": 0,
            "use-key-quorum-value": 0
          },
          "cluster-coverage": "full"
        },
        "attributes": {
          "key-type": "ec",
          "label": "tls_ed25519_private",
          "id": "0x",
          "check-value": "0x4cb1b1",
          "class": "private-key",
          "encrypt": false,
          "decrypt": false,
          "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": 48,
          "ec-point": "0x302a300506032b6570032100c31f8a3695f571dda1658bc98e0591ab088c1a657b3199dd50c3956046ebbe75",
          "curve": "ed25519"
        }
      }
    }
  }
  ```
+ Para generar una clave ML-DSA privada en un HSM
**ML-DSA disponibilidad y requisitos**  
ML-DSA solo está disponible en clústeres que no son FIPS y requiere OpenSSL 3.5 o posterior para la creación de CSR, la creación de certificados y la descarga de TLS. ML-DSA solo es compatible con TLS 1.3.  
Para la descarga de ML-DSA TLS en las plataformas Amazon Linux 2023 y RHEL, es posible que deba habilitar la subpolítica criptográfica poscuántica (PQ). Para obtener más información, consulte [Problema: el protocolo de enlace ML-DSA TLS falla en Amazon Linux 2023 y RHEL porque «no hay algoritmos de firma compartidos»](ki-openssl-provider-sdk.md#ki-openssl-provider-5).

  Utilice el comando para generar un par de claves`key generate-asymmetric-pair ml-dsa`. ML-DSA Este ejemplo genera un par de ML-DSA-44 claves con una etiqueta de clave pública de {{tls\_mldsa44\_pub}} y una etiqueta de clave privada de{{tls\_mldsa44\_private}}. También puede usar `ML-DSA-65` o `ML-DSA-87` para niveles de seguridad más altos.

  ```
  aws-cloudhsm > key generate-asymmetric-pair ml-dsa \
      --mldsa-algorithm ML-DSA-44 \
      --public-label tls_mldsa44_pub \
      --private-label tls_mldsa44_private \
      --private-attributes sign=true \
      --public-attributes verify=true
  {
    "error_code": 0,
    "data": {
      "public_key": {
        "key-reference": "0x0000000000280cd2",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "full"
        },
        "attributes": {
          "key-type": "ml-dsa",
          "label": "tls_mldsa44_pub",
          "id": "",
          "check-value": "0xd4e5f6",
          "class": "public-key",
          "encrypt": false,
          "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": true,
          "wrap": false,
          "wrap-with-trusted": false,
          "key-length-bytes": 1312,
          "mldsa-algorithm": "ML-DSA-44"
        }
      },
      "private_key": {
        "key-reference": "0x0000000000280cd3",
        "key-info": {
          "key-owners": [
            {
              "username": "cu1",
              "key-coverage": "full"
            }
          ],
          "shared-users": [],
          "cluster-coverage": "full"
        },
        "attributes": {
          "key-type": "ml-dsa",
          "label": "tls_mldsa44_private",
          "id": "",
          "check-value": "0xd4e5f6",
          "class": "private-key",
          "encrypt": false,
          "decrypt": false,
          "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": 2560,
          "mldsa-algorithm": "ML-DSA-44"
        }
      }
    }
  }
  ```

**Exportación de un archivo de clave privada PEM falso**

Una vez que tenga una clave privada en el HSM, debe exportar un archivo de clave privada PEM falso. Este archivo no contiene los datos de la clave real, pero permite al proveedor de OpenSSL identificar la clave privada en el HSM. A continuación, puede usar la clave privada para crear una solicitud de firma de certificado (CSR) y firmar la CSR para crear el certificado. 

Use el comando [`key generate-file`](cloudhsm_cli-key-generate-file.md) para exportar la clave privada en formato PEM falso y guardarla en un archivo. Reemplace los valores siguientes por sus propios valores. 
+ {{<private\_key\_label>}}— Etiqueta de la clave privada que generaste en el paso anterior. 
+ {{<web\_server\_fake\_pem.key>}}— Nombre del archivo en el que se escribirá la clave PEM falsa.

Utilice la `reference-pem` codificación:

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

Usa la codificación: `cloudhsm-reference-pem`

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

**Salir de la CLI de CloudHSM**

Ejecute el siguiente comando para detener la CLI de CloudHSM.

```
aws-cloudhsm > quit
```

Ahora debería tener un nuevo archivo en su sistema, ubicado en la ruta especificada {{<web\_server\_fake\_pem.key>}} en el comando anterior. Este archivo es el archivo de clave privada PEM falso.

### Generación de un certificado autofirmado
<a name="ssl-offload-provider-generate-certificate"></a>

Una vez que haya generado una clave privada PEM falsa, puede usar este archivo para generar una solicitud de firma de certificado (CSR) y un certificado.

En un entorno de producción, normalmente se usa una entidad de certificación (CA) para crear un certificado de una CSR. No es necesaria una CA para un entorno de prueba. Si utiliza una CA, envíeles el archivo CSR y utilice el SSL/TLS certificado firmado que le proporcionan en su servidor web para HTTPS. 

Como alternativa al uso de una CA, puedes usar el proveedor AWS CloudHSM OpenSSL para crear un certificado autofirmado. Self-signed Los navegadores no confían en los certificados y no deben usarse en entornos de producción. Se pueden usar en entornos de prueba. 

**aviso**  
Self-signed los certificados deben usarse únicamente en un entorno de prueba. En entornos de producción, utilice un método más seguro como, por ejemplo, una autoridad de certificación para crear un certificado. <a name="ssl-offload-provider-generate-certificate-prerequisites"></a>

**Instale y configure el proveedor OpenSSL**

1. Conéctese a su instancia de cliente.

1. [Instale el proveedor OpenSSL para AWS CloudHSM SDK 5 de cliente](openssl-provider-install.md)<a name="ssl-offload-provider-generate-certificate-steps"></a>

**Generación de un certificado**

1. Obtener una copia del archivo PEM falso generado en un paso anterior.

1. Creación de una CSR

   Ejecute el siguiente comando para usar el proveedor AWS CloudHSM OpenSSL para crear una solicitud de firma de certificado (CSR). {{<web\_server\_fake\_pem.key>}}Sustitúyala por el nombre del archivo que contiene tu clave privada PEM falsa. {{<web\_server.csr>}}Sustitúyala por el nombre del archivo que contiene tu CSR. 

   El comando `req` es interactivo. Responderá a cada campo. La información del campo se copia en su SSL/TLS certificado. 
**ML-DSA Requisito de versión de OpenSSL**  
ML-DSA requiere OpenSSL 3.5 o posterior. En plataformas con un sistema OpenSSL anterior, debe usar un binario OpenSSL 3.5\+ personalizado.
**Se requiere un algoritmo resumido para las claves RSA y EC**  
Para las claves RSA y EC, debe especificar un algoritmo resumido (por ejemplo,`-sha256`). Ed25519 y no ML-DSA requieren un indicador de resumen.

   ```
   $ openssl req -provider cloudhsm -provider default -new -sha256 -key {{<web_server_fake_pem.key>}} -out {{<web_server.csr>}}
   ```

1. Creación de un certificado autofirmado

   Ejecute el siguiente comando para usar el proveedor de AWS CloudHSM OpenSSL para firmar su CSR con su clave privada en su HSM. Esto creará un certificado autofirmado. Reemplace los siguientes valores en el comando por sus propios valores. 
   + {{<web\_server.csr>}}— Nombre del archivo que contiene la CSR.
   + {{<web\_server\_fake\_pem.key>}}— Nombre del archivo que contiene la clave privada PEM falsa.
   + {{<web\_server.crt>}}— Nombre del archivo que contendrá el certificado de su servidor web.

   ```
   $ openssl x509 -provider cloudhsm -provider default -req -sha256 -days 365 -in {{<web_server.csr>}} -signkey {{<web_server_fake_pem.key>}} -out {{<web_server.crt>}}
   ```

Cuando tenga la clave privada y el certificado, vaya a[Paso 3: configurar el servidor web](#ssl-offload-provider-configure-web-server).

## Paso 3: configurar el servidor web
<a name="ssl-offload-provider-configure-web-server"></a>

Actualice la configuración de software del servidor web para utilizar el certificado HTTPS y la correspondiente clave privada PEM falsa que ha creado en el [paso anterior](#ssl-offload-provider-generate-key-and-certificate). Recuerde hacer una copia de seguridad de sus certificados y claves existentes antes de empezar. Esto terminará de configurar el software de su servidor web Linux para descargar la identidad SSL/TLS del servidor. AWS CloudHSM

Complete los pasos indicados en una de las siguientes secciones. 

**Topics**
+ [Configuración del servidor web NGINX](#ssl-offload-provider-configure-nginx)
+ [Configure el servidor web HAProxy](#ssl-offload-provider-configure-haproxy)

### Configuración del servidor web NGINX
<a name="ssl-offload-provider-configure-nginx"></a>

Utilice esta sección para configurar NGINX con el proveedor OpenSSL.<a name="configure-nginx-provider"></a>

**Para configurar NGINX para el proveedor OpenSSL**

1. Conéctese a su instancia de cliente.

1. Ejecute el siguiente comando para crear los directorios necesarios para el certificado del servidor web y la clave privada PEM falsa.

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

1. Ejecute el siguiente comando para copiar su certificado de servidor web en la ubicación necesaria. {{<web\_server.crt>}}Sustitúyalo por el nombre del certificado de su servidor web.

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

1. Ejecute el siguiente comando para copiar la clave privada PEM falsa en la ubicación necesaria. {{<web\_server\_fake\_pem.key>}}Sustitúyalo por el nombre del archivo que contiene la clave privada PEM falsa.

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

1. Ejecute el siguiente comando para cambiar la propiedad de estos archivos para que el usuario denominado *nginx* pueda leerlos.

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

1. Configure OpenSSL para usar el proveedor. AWS CloudHSM Para obtener más información sobre la configuración del proveedor de OpenSSL, consulte el SDK 5 del proveedor de [AWS CloudHSM OpenSSL para clientes. ](openssl-provider-install.md)

   1. Busque el archivo de configuración de OpenSSL:

      ```
      $ openssl version -d
      ```

      Debería ver una salida similar a esta:

      ```
      OPENSSLDIR: "/etc/pki/tls"
      ```

      El archivo de configuración está `openssl.cnf` en este directorio.

   1. 
**nota**  
No modifique directamente el archivo openssl.cnf predeterminado del sistema. Esto evita que las operaciones de OpenSSL de todo el sistema (conexiones SSH, TLS y otros servicios) se dirijan involuntariamente a través del proveedor de CloudHSM.  
El uso de un archivo de configuración independiente le permite limitar el uso del proveedor CloudHSM únicamente a aplicaciones específicas que requieren operaciones criptográficas. HSM-backed 

      Cree un nuevo archivo de configuración de OpenSSL con el siguiente contenido:

      ```
      $ cat > {{<example-cloudhsm-openssl.cnf>}} << 'EOF'
      ## NOTE: This should point to the system default openssl config file.
      # Replace /etc/pki/tls with the path to your OpenSSL configuration directory
      .include {{</etc/pki/tls>}}/openssl.cnf
      
      # Override the existing provider_section to include AWS CloudHSM OpenSSL Provider as a 3rd party OpenSSL provider
      [provider_sect]
      default = default_sect
      # Include AWS CloudHSM CloudHSM OpenSSL provider
      cloudhsm = cloudhsm_sect
      
      [default_sect]
      activate = 1
      
      [cloudhsm_sect]
      activate = 1
      EOF
      ```

   1. Asegúrese de que la variable de `CLOUDHSM_PIN` entorno esté configurada con sus credenciales de usuario criptográfico (CU):

      ```
      $ export CLOUDHSM_PIN={{<username>}}:{{<password>}}
      ```

   1. Configure la variable de `OPENSSL_CONF` entorno para que apunte al archivo de configuración actualizado y verifique que el proveedor esté cargado:

      ```
      $ OPENSSL_CONF=/path/to/example-cloudhsm-openssl.cnf openssl list -providers
      ```

      Deberías ver el proveedor predeterminado y el proveedor de CloudHSM en la lista:

      ```
      OPENSSL_CONF=/path/to/example-cloudhsm-openssl.cnf openssl list -providers
      Providers:
        default
          name: OpenSSL Default Provider
          version: 3.2.2
          status: active
        cloudhsm
          name: AWS CloudHSM OpenSSL Provider
          version: 5.17.0
          status: active
      ```

1. Ejecute el siguiente comando para hacer una copia de seguridad del archivo `/etc/nginx/nginx.conf`.

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

1. Actualizar la configuración de NGINX
**nota**  
Cada clúster puede soportar un máximo de 1000 procesos de trabajo de NGINX en todos los servidores web de NGINX.

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

   Utilice un editor de texto para editar el archivo `/etc/nginx/nginx.conf`. Esto puede requerir permisos de root de Linux. En la parte superior del archivo, añada la siguiente línea: 

   ```
   env CLOUDHSM_PIN;
   env OPENSSL_CONF;
   ```

   Agregue lo siguiente a la sección TLS del archivo:

   ```
   # 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 for DHE ciphers
       # 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:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256";
       ssl_prefer_server_ciphers off;
   
       # 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 {
       }
   }
   ```

------
#### [ RHEL 9 (9.2\+) ]

   Utilice un editor de texto para editar el archivo `/etc/nginx/nginx.conf`. Esto puede requerir permisos de root de Linux. En la parte superior del archivo, añada la siguiente línea: 

   ```
   env CLOUDHSM_PIN;
   env OPENSSL_CONF;
   ```

   Agregue lo siguiente a la sección TLS del archivo:

   ```
   # 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 for DHE ciphers
       # 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:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256";
       ssl_prefer_server_ciphers off;
   
       # 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 {
       }
   }
   ```

------
#### [ RHEL 10 (10.0\+) ]

   Utilice un editor de texto para editar el archivo `/etc/nginx/nginx.conf`. Esto puede requerir permisos de root de Linux. En la parte superior del archivo, añada la siguiente línea: 

   ```
   env CLOUDHSM_PIN;
   env OPENSSL_CONF;
   ```

   Agregue lo siguiente a la sección TLS del archivo:

   ```
   # 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 for DHE ciphers
       # 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:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256";
       ssl_prefer_server_ciphers off;
   
       # 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 26.04 LTS ]

   Utilice un editor de texto para editar el archivo `/etc/nginx/nginx.conf`. Esto puede requerir permisos de root de Linux. En la parte superior del archivo, añada la siguiente línea: 

   ```
   env CLOUDHSM_PIN;
   env OPENSSL_CONF;
   ```

   Agregue lo siguiente a la sección TLS del archivo:

   ```
   # Settings for a TLS enabled server.
   server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  _;
       root         /var/www/html;
   
       ssl_certificate "/etc/ssl/certs/server.crt";
       ssl_certificate_key "/etc/ssl/private/server.key";
       # It is *strongly* recommended to generate unique DH parameters for DHE ciphers
       # Generate them with: openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048
       # ssl_dhparam "/etc/ssl/certs/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:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256";
       ssl_prefer_server_ciphers off;
   
       # 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 {
       }
   }
   ```

------

   Guarde el archivo.

1. Haga una copia de seguridad del archivo de configuración `systemd` y, a continuación, establezca la ruta de `EnvironmentFile`.

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

   1. Haga una copia de seguridad del `nginx.service` archivo:

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

   1. Abra `/lib/systemd/system/nginx.service` en un editor de texto. En la sección [Servicio], agregue:

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

------
#### [ RHEL 9 (9.2\+) ]

   1. Haga una copia de seguridad del `nginx.service` archivo:

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

   1. Abra `/lib/systemd/system/nginx.service` en un editor de texto. En la sección [Servicio], agregue:

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

------
#### [ RHEL 10 (10.0\+) ]

   1. Haga una copia de seguridad del `nginx.service` archivo:

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

   1. Abra `/lib/systemd/system/nginx.service` en un editor de texto. En la sección [Servicio], agregue:

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

------
#### [ Ubuntu 26.04 LTS ]

   1. Haga una copia de seguridad del `nginx.service` archivo:

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

   1. Abra `/lib/systemd/system/nginx.service` en un editor de texto. En la sección [Servicio], agregue:

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

------

1.  Compruebe si existe el archivo `/etc/sysconfig/nginx` y, a continuación, realice una de las operaciones siguientes: 
   + Si el archivo existe, haga una copia de seguridad del mismo ejecutando el siguiente comando:

     ```
     $ cp /etc/sysconfig/nginx /etc/sysconfig/nginx.backup
     ```
   +  Si el archivo no existe, abra un editor de texto y, a continuación, cree un archivo denominado `nginx` en la carpeta `/etc/sysconfig/`. 

1. Configure el entorno NGINX.

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

   Como usuario raíz de Linux, abra el archivo `/etc/sysconfig/nginx` en un editor de texto. Por ejemplo:

   ```
   vi /etc/sysconfig/nginx
   ```

   Agregue las credenciales de usuario de criptografía (CU) y la ruta al archivo de configuración de OpenSSL:

   ```
   CLOUDHSM_PIN={{<CU user name>}}:{{<password>}}
   OPENSSL_CONF={{<path to example-cloudhsm-openssl.cnf>}}
   ```

   Sustituya {{<CU user name>}} y por las credenciales de {{<password>}} la CU. {{<path to example-cloudhsm-openssl.cnf>}}Sustitúyala por la ruta completa al archivo de configuración en el que lo creaste[Para configurar NGINX para el proveedor OpenSSL](#configure-nginx-provider).

    Guarde el archivo.

------
#### [ RHEL 9 (9.2\+) ]

   Abra el archivo `/etc/sysconfig/nginx` en un editor de texto. Esto puede requerir permisos de root de Linux. Agregue las credenciales del usuario de criptografía (CU) y la ruta al archivo de configuración de OpenSSL:

   ```
   CLOUDHSM_PIN={{<CU user name>}}:{{<password>}}
   OPENSSL_CONF={{<path to example-cloudhsm-openssl.cnf>}}
   ```

   Sustituya {{<CU user name>}} y por las credenciales de {{<password>}} la CU. {{<path to example-cloudhsm-openssl.cnf>}}Sustitúyala por la ruta completa al archivo de configuración en el que lo creaste[Para configurar NGINX para el proveedor OpenSSL](#configure-nginx-provider).

    Guarde el archivo.

------
#### [ RHEL 10 (10.0\+) ]

   Abra el archivo `/etc/sysconfig/nginx` en un editor de texto. Esto puede requerir permisos de root de Linux. Agregue las credenciales del usuario de criptografía (CU) y la ruta al archivo de configuración de OpenSSL:

   ```
   CLOUDHSM_PIN={{<CU user name>}}:{{<password>}}
   OPENSSL_CONF={{<path to example-cloudhsm-openssl.cnf>}}
   ```

   Sustituya {{<CU user name>}} y por las credenciales de {{<password>}} la CU. {{<path to example-cloudhsm-openssl.cnf>}}Sustitúyala por la ruta completa al archivo de configuración en el que lo creaste[Para configurar NGINX para el proveedor OpenSSL](#configure-nginx-provider).

    Guarde el archivo.

------
#### [ Ubuntu 26.04 LTS ]

   Abra el archivo `/etc/sysconfig/nginx` en un editor de texto. Esto puede requerir permisos de root de Linux. Agregue las credenciales del usuario de criptografía (CU) y la ruta al archivo de configuración de OpenSSL:

   ```
   CLOUDHSM_PIN={{<CU user name>}}:{{<password>}}
   OPENSSL_CONF={{<path to example-cloudhsm-openssl.cnf>}}
   ```

   Sustituya {{<CU user name>}} y por las credenciales de {{<password>}} la CU. {{<path to example-cloudhsm-openssl.cnf>}}Sustitúyala por la ruta completa al archivo de configuración en el que lo creaste[Para configurar NGINX para el proveedor OpenSSL](#configure-nginx-provider).

    Guarde el archivo.

------

1. Inicie el servidor web NGINX.

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

   Detenga todos los procesos de NGINX

   ```
   $ systemctl stop nginx
   ```

   Recarga de la configuración `systemd` para incluir los últimos cambios

   ```
   $ systemctl daemon-reload
   ```

   Inicie NGINX

   ```
   $ systemctl start nginx
   ```

------
#### [ RHEL 9 (9.2\+) ]

   Detención de cualquier proceso de NGINX en ejecución

   ```
   $ systemctl stop nginx
   ```

   Recarga de la configuración `systemd` para incluir los últimos cambios

   ```
   $ systemctl daemon-reload
   ```

   Inicio del proceso de NGINX

   ```
   $ systemctl start nginx
   ```

------
#### [ RHEL 10 (10.0\+) ]

   Detención de cualquier proceso de NGINX en ejecución

   ```
   $ systemctl stop nginx
   ```

   Recarga de la configuración `systemd` para incluir los últimos cambios

   ```
   $ systemctl daemon-reload
   ```

   Inicio del proceso de NGINX

   ```
   $ systemctl start nginx
   ```

------
#### [ Ubuntu 26.04 LTS ]

   Detención de cualquier proceso de NGINX en ejecución

   ```
   $ systemctl stop nginx
   ```

   Recarga de la configuración `systemd` para incluir los últimos cambios

   ```
   $ systemctl daemon-reload
   ```

   Inicio del proceso de NGINX

   ```
   $ systemctl start nginx
   ```

------

Tras configurar NGINX, vaya a. [Verificación del uso del certificado configurado por parte de HTTPS](#ssl-offload-verify-https-connection-linux)

### Configure el servidor web HAProxy
<a name="ssl-offload-provider-configure-haproxy"></a>

Utilice esta sección para configurar HAProxy con el proveedor OpenSSL. Los siguientes ejemplos muestran cómo configurar HAProxy con sus certificados y claves de CloudHSM.<a name="configure-haproxy-provider"></a>

**Para configurar HAProxy para el proveedor OpenSSL**

1. Haga una copia de seguridad del archivo de certificado combinado existente, si existe:

   ```
   $ cp server-combined.pem server-combined.pem.backup
   ```

1. Cree un archivo de certificado combinado para HAProxy con su certificado y la clave PEM falsa de CloudHSM:

   ```
   $ cat server.crt server.key > server-combined.pem
   ```

1. Haga una copia de seguridad de la configuración de HAProxy existente:

   ```
   $ cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
   ```

1. Cree una nueva configuración de descarga de TLS de CloudHSM en: `/etc/haproxy/haproxy.cfg`

   ```
   global
       daemon
       ssl-provider cloudhsm
       # It is *strongly* recommended to generate unique DH parameters
       # Generate them with: openssl dhparam -out /etc/haproxy/dhparams.pem 2048
       # ssl-dh-param-file /etc/haproxy/dhparams.pem
       ssl-default-bind-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:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305
       ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
       ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
   
   defaults
       mode http
       timeout connect 5000ms
       timeout client 50000ms
       timeout server 50000ms
   
   frontend haproxy_frontend
       bind *:443 ssl crt /path/to/server-combined.pem
       default_backend web_servers
   
   backend web_servers
       server web1 127.0.0.1:8080 check
   ```

   Actualice la ruta del certificado para que coincida con la ubicación de su archivo.

1. Configure systemd para que utilice un archivo de entorno para HAProxy. La ubicación depende de la distribución de Linux.

------
#### [ Amazon Linux and RHEL ]

   Realice una copia de seguridad del archivo de servicio HAProxy y modifíquelo:

   ```
   $ cp /lib/systemd/system/haproxy.service /lib/systemd/system/haproxy.service.backup
   ```

   Edite `/lib/systemd/system/haproxy.service` y añada la siguiente línea en la sección [Servicio]:

   ```
   EnvironmentFile=/etc/sysconfig/haproxy
   ```

------
#### [ Ubuntu ]

   Haga una copia de seguridad y modifique el archivo de servicio HAProxy:

   ```
   $ cp /lib/systemd/system/haproxy.service /lib/systemd/system/haproxy.service.backup
   ```

   Edite `/lib/systemd/system/haproxy.service` y añada la siguiente línea en la sección [Servicio]:

   ```
   EnvironmentFile=/etc/default/haproxy
   ```

------

1. Cree el archivo de entorno en la ubicación adecuada para su sistema.

------
#### [ Amazon Linux and RHEL ]

   Haga una copia de seguridad del archivo de entorno HAProxy, si existe:

   ```
   $ cp /etc/sysconfig/haproxy /etc/sysconfig/haproxy.backup
   ```

   Cree el archivo de entorno HAProxy `/etc/sysconfig/haproxy` con el siguiente contenido:

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

------
#### [ Ubuntu ]

   Haga una copia de seguridad del archivo de entorno HAProxy, si existe:

   ```
   $ cp /etc/default/haproxy /etc/default/haproxy.backup
   ```

   Cree el archivo de entorno HAProxy `/etc/default/haproxy` con el siguiente contenido:

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

------

   Sustituya {{<CU user name>}} y {{<password>}} por sus credenciales de CU.

1. Recargue la configuración de systemd:

   ```
   $ systemctl daemon-reload
   ```

1. Inicie HAProxy con la configuración de descarga TLS de CloudHSM:

   ```
   $ systemctl start haproxy
   ```

   También puede ejecutar HAProxy directamente con un archivo de configuración personalizado:

   ```
   $ haproxy -f /path/to/haproxy-cloudhsm.cfg
   ```

Tras configurar HAProxy, vaya a. [Verificación del uso del certificado configurado por parte de HTTPS](#ssl-offload-verify-https-connection-linux)

## Paso 4: habilitar el tráfico HTTPS y verificar el certificado
<a name="ssl-offload-enable-traffic-and-verify-certificate-provider"></a>

Después de configurar el servidor web para la SSL/TLS descarga con AWS CloudHSM, añada la instancia del servidor web a un grupo de seguridad que permita el tráfico HTTPS entrante. Esto permite a los clientes, como, por ejemplo, navegadores web, establecer una conexión HTTPS con su servidor web. A continuación, establece una conexión HTTPS con tu servidor web y comprueba que esté utilizando el certificado con el que configuraste la descarga. SSL/TLS AWS CloudHSM

**Topics**
+ [Habilitación de las conexiones HTTPS entrantes](#ssl-offload-add-security-group-linux)
+ [Verificación del uso del certificado configurado por parte de HTTPS](#ssl-offload-verify-https-connection-linux)

### Habilitación de las conexiones HTTPS entrantes
<a name="ssl-offload-add-security-group-linux"></a>

Para conectarse a su servidor web desde un cliente (como, por ejemplo, un navegador web), cree un grupo de seguridad que permita conexiones HTTPS entrantes. En concreto, debería permitir conexiones TCP entrantes en el puerto 443. Asigne este grupo de seguridad a su servidor web. 

**Para crear un grupo de seguridad para HTTPS y asignarlo a su servidor web**

1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Elija **Security Groups** en el panel de navegación.

1. Elija **Creación de grupo de seguridad**.

1. En **Create Security Group** (Crear grupo de seguridad), haga lo siguiente:

   1. Para **Security group name** (Nombre del grupo de seguridad), escriba un nombre para el grupo de seguridad que está creando.

   1. De manera opcional, escriba una descripción del grupo de seguridad que está creando.

   1. Para **VPC**, elija la VPC que contiene la instancia de su servidor web Amazon EC2.

   1. Seleccione **Add Rule (Añadir regla)**.

   1. Para **tipo**, seleccione **HTTPS** en la ventana desplegable.

   1. Para **Origen**, introduzca una ubicación de origen.

   1. Elija **Creación de grupo de seguridad**.

1. En el panel de navegación, seleccione **Instances (Instancias)**.

1. Seleccione la casilla de verificación junto a la instancia del servidor web. 

1. Seleccione las **Acciones** en el menú desplegable que se encuentra en la parte superior de la página. Seleccione **Seguridad**, a continuación, **Cambiar grupos de seguridad**.

1. Para **Grupos de seguridad asociados**, seleccione el cuadro de búsqueda y elija el grupo de seguridad que creó para HTTPS. A continuación, elija **Añadir grupos de seguridad**.

1. Seleccione **Guardar**. 

### Verificación del uso del certificado configurado por parte de HTTPS
<a name="ssl-offload-verify-https-connection-linux"></a>

Después de añadir el servidor web a un grupo de seguridad, puedes comprobar que SSL/TLS offload utiliza tu certificado autofirmado. Puede hacerlo mediante un navegador web o con una herramienta como [OpenSSL s\_client](https://www.openssl.org/docs/manmaster/man1/s_client.html).

**Para verificar la SSL/TLS descarga con un navegador web**

1. Utilice un navegador web para conectarse a su servidor web mediante el nombre de DNS público o la dirección IP del servidor. Asegúrese de que la URL de la barra de direcciones comience https://. por Por ejemplo,. **https://ec2-52-14-212-67.us-east-2.compute.amazonaws.com/**
**sugerencia**  
Puede usar un servicio de DNS como Amazon Route 53 para dirigir el nombre de dominio de su sitio web (por ejemplohttps://www.example.com/) a su servidor web. Para obtener más información, consulte [Direccionamiento del tráfico a una instancia de Amazon EC2](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html) en la *Guía para desarrolladores de Amazon Route 53* o en la documentación para su servicio DNS.

1. Utilice el navegador web para ver el certificado del servidor web. Para obtener más información, consulte los siguientes temas:
   + Para Mozilla Firefox, consulte [View a Certificate](https://support.mozilla.org/en-US/kb/secure-website-certificate#w_view-a-certificate) en el sitio web de Soporte de Mozilla.
   + Para Google Chrome, consulte [Conocer los problemas de seguridad](https://developers.google.com/web/tools/chrome-devtools/security) en el sitio web para desarrolladores de Google.

   Otros navegadores web pueden tener características similares que puede utilizar para ver el certificado del servidor web.

1. Asegúrese de que el SSL/TLS certificado sea el mismo para el que configuró su servidor web.

**Para verificar la SSL/TLS descarga con OpenSSL, s\_client**

1. Ejecute el siguiente comando OpenSSL para conectarse a su servidor web a través de HTTPS. {{<server name>}}Sustitúyalo por el nombre DNS público o la dirección IP de su servidor web. 

   ```
   openssl s_client -connect {{<server name>}}:443
   ```
**sugerencia**  
Puede usar un servicio de DNS como Amazon Route 53 para enviar el nombre de dominio de su sitio web (por ejemplohttps://www.example.com/) a su servidor web. Para obtener más información, consulte [Direccionamiento del tráfico a una instancia de Amazon EC2](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-ec2-instance.html) en la *Guía para desarrolladores de Amazon Route 53* o en la documentación para su servicio DNS.

1. Asegúrese de que el SSL/TLS certificado sea el mismo para el que configuró su servidor web.

Ahora tiene un sitio web que se protege con HTTPS. La clave privada del servidor web se almacena en un HSM de su AWS CloudHSM clúster. 

Para agregar un equilibrador de carga, consulte [Agregue un balanceador de carga con Elastic Load Balancing para AWS CloudHSM(opcional)](third-offload-add-lb.md).