AWS CloudHSM Descarga de SSL/TLS en Linux mediante NGINX o con el proveedor OpenSSL HAProxy - AWS CloudHSM

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 Descarga de SSL/TLS en Linux mediante NGINX o con el proveedor OpenSSL HAProxy

En este tema se proporcionan step-by-step instrucciones para configurar la descarga de identidades de SSL/TLS servidor AWS CloudHSM en un servidor web Linux mediante NGINX o con HAProxy el proveedor OpenSSL.

Descripción general de

En Linux, el NGINX y el software de servidor HAProxyweb se integran con OpenSSL para admitir HTTPS. El proveedor de AWS CloudHSM OpenSSL proporciona una interfaz que permite al software del servidor web utilizarla en su clúster para HSMs la descarga criptográfica y el almacenamiento de claves. El proveedor de OpenSSL es el puente que conecta el servidor web con el clúster. AWS CloudHSM

Para completar este tutorial, configurará NGINX o utilizará el HAProxy proveedor OpenSSL AWS CloudHSM . El tutorial le muestra cómo hacer lo siguiente:

  • Instale el software del servidor web en una EC2 instancia de Amazon.

  • 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) Usa Amazon EC2 para crear una segunda instancia de servidor web y Elastic Load Balancing para crear un balanceador 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.

Paso 1: configurar los requisitos previos

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

Requisitos previos para el proveedor de AWS CloudHSM OpenSSL

Para configurar la descarga de identidad SSL/TLS del servidor web con AWS CloudHSM OpenSSL Provider for Client SDK 5, necesita lo siguiente:

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 los comandos con sudo o como usuario root, según la configuración del sistema.

  1. Instale y configure el proveedor de AWS CloudHSM OpenSSL para el SDK de cliente 5. Para obtener más información sobre la instalación del proveedor de OpenSSL, consulte Proveedor de AWS CloudHSM OpenSSL para el SDK de cliente 5.

  2. En una instancia de EC2 Linux que tenga acceso a tu clúster, instala NGINX o un servidor web: 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 24.04
    • NGINX

      $ apt install nginx
    • HAProxy

      $ apt install haproxy
  3. Use la CLI de CloudHSM para crear un usuario de criptografía. 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.

    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: Genera o importa una clave privada y obtén un certificado.

Notas

Paso 2: Genera o importa una clave privada y obtén un certificado

Para habilitar HTTPS, su aplicación de servidor web (NGINX o NGINX HAProxy) necesita una clave privada y el certificado correspondiente SSL/TLS . Para utilizar la descarga de identidades SSL/TLS del servidor web con 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). El servidor web utiliza el archivo de clave privada PEM falso para identificar la clave privada en el HSM durante la descarga de identidad del servidor. SSL/TLS

Generación de una clave privada

Esta sección muestra cómo generar un par de claves con la CLI de CloudHSM. Una vez que tenga un par de claves generado dentro del HSM, puede exportarlo como un archivo PEM falso y generar el certificado correspondiente.

Instalación y configuración de la CLI de CloudHSM
  1. Instale y configure la CLI de CloudHSM.

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

    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
  3. Ejecute el siguiente comando para iniciar sesión en el HSM. Sustitúyala por <user name> el nombre de usuario de tu criptousuario

    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. Realice una de las siguientes acciones:

  • Cómo generar una clave privada RSA en un HSM

    Use el comando key generate-asymmetric-pair rsa 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 tls_rsa_pub clave privada de. 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 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 tls_ec_pub y una etiqueta de clave privada detls_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" } } } }

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 clave reales, pero permite que el motor dinámico de OpenSSL identifique la clave privada en el HSM. A continuación, puede utilizar 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 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.

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

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

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 proporcionen en su servidor web para HTTPS.

Como alternativa al uso de una CA, puede usar el motor dinámico AWS CloudHSM OpenSSL para crear un certificado autofirmado. Los navegadores no confían en certificados autofirmados y no deben utilizarse en entornos de producción. Se pueden usar en entornos de prueba.

aviso

Los certificados autofirmados deben utilizarse únicamente en entornos 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.

Instalación y configuración del motor dinámico de OpenSSL
  1. Conéctese a su instancia de cliente.

  2. Instalar el motor dinámico de OpenSSL para Client SDK 5 de AWS CloudHSM

Generación de un certificado
  1. Obtener una copia del archivo PEM falso generado en un paso anterior.

  2. Creación de una CSR

    Ejecute el siguiente comando para usar el motor dinámico AWS CloudHSM OpenSSL para crear una solicitud de firma de certificado (CSR). <web_server_fake_pem.key>Sustitúyalo por el nombre del archivo que contiene la clave privada PEM falsa. <web_server.csr>Sustitúyalo por el nombre del archivo que contiene la CSR.

    El comando req es interactivo. Responderá a cada campo. La información del campo se copia en el SSL/TLS certificado.

    nota

    Actualmente, el proveedor de OpenSSL no admite la creación de CSR. Debe utilizar el motor OpenSSL para este paso, pero las operaciones de cifrado TLS funcionarán con el proveedor.

    $ openssl req -engine cloudhsm -new -key <web_server_fake_pem.key> -out <web_server.csr>
  3. Creación de un certificado autofirmado

    Ejecute el siguiente comando para usar el motor dinámico 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 -engine cloudhsm -req -days 365 -in <web_server.csr> -signkey <web_server_fake_pem.key> -out <web_server.crt>

Cuando tenga una clave privada y un certificado, vaya aPaso 3: configurar el servidor web.

Paso 3: configurar el servidor web

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. 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 con él. AWS CloudHSM

Complete los pasos indicados en una de las siguientes secciones.

Configuración del servidor web NGINX

Utilice esta sección para configurar NGINX con el proveedor de OpenSSL.

Para configurar NGINX para el proveedor de OpenSSL
  1. Conéctese a su instancia de cliente.

  2. 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
  3. 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
  4. 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
  5. 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
  6. Configure OpenSSL para usar el proveedor. AWS CloudHSM Para obtener más información sobre la configuración del proveedor de OpenSSL, consulte Proveedor de AWS CloudHSM OpenSSL para el SDK de cliente 5.

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

      $ openssl version -d

      Debería ver un resultado similar al siguiente:

      OPENSSLDIR: "/etc/pki/tls"

      El archivo de configuración se encuentra openssl.cnf en este directorio.

    2. 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 enruten involuntariamente a través del proveedor de CloudHSM.

      El uso de un archivo de configuración independiente le permite limitar el uso del proveedor de CloudHSM únicamente a aplicaciones específicas que requieren operaciones criptográficas respaldadas por HSM.

      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
    3. 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>
    4. Configure la variable de OPENSSL_CONF entorno para que apunte al archivo de configuración actualizado y compruebe 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
  7. 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
  8. 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 24.04

    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.

  9. 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
    2. 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
    2. 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
    2. Abra /lib/systemd/system/nginx.service en un editor de texto. En la sección [Servicio], agregue:

      EnvironmentFile=/etc/sysconfig/nginx
    Ubuntu 24.04
    1. Haga una copia de seguridad del nginx.service archivo:

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

      EnvironmentFile=/etc/sysconfig/nginx
  10. 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/.

  11. 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

    Añada 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 <password> credenciales de CU. <path to example-cloudhsm-openssl.cnf>Sustitúyala por la ruta completa al archivo de configuración en el que creastePara configurar NGINX para el proveedor de OpenSSL.

    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. Añada 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 <password> credenciales de CU. <path to example-cloudhsm-openssl.cnf>Sustitúyala por la ruta completa al archivo de configuración en el que creastePara configurar NGINX para el proveedor de OpenSSL.

    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. Añada 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 <password> credenciales de CU. <path to example-cloudhsm-openssl.cnf>Sustitúyala por la ruta completa al archivo de configuración en el que creastePara configurar NGINX para el proveedor de OpenSSL.

    Guarde el archivo.

    Ubuntu 24.04

    Abra el archivo /etc/sysconfig/nginx en un editor de texto. Esto puede requerir permisos de root de Linux. Añada 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 <password> credenciales de CU. <path to example-cloudhsm-openssl.cnf>Sustitúyala por la ruta completa al archivo de configuración en el que creastePara configurar NGINX para el proveedor de OpenSSL.

    Guarde el archivo.

  12. 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 24.04

    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

Configure HAProxy el servidor web

Utilice esta sección para realizar la configuración HAProxy con el proveedor de OpenSSL. Los siguientes ejemplos muestran cómo configurarlos HAProxy con sus certificados y claves de CloudHSM.

Para configurar HAProxy el proveedor de OpenSSL
  1. Haga una copia de seguridad del archivo de certificado combinado existente, si existe:

    $ cp server-combined.pem server-combined.pem.backup
  2. Cree un archivo de certificado combinado para HAProxy usar su certificado y la clave PEM falsa de CloudHSM:

    $ cat server.crt server.key > server-combined.pem
  3. Haga una copia de seguridad de la configuración existente: HAProxy

    $ cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
  4. Cree una nueva configuración de descarga 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.

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

    Amazon Linux and RHEL

    Haga una copia de seguridad del archivo de HAProxy servicio 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 del archivo de HAProxy servicio 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/default/haproxy
  6. 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 HAProxy entorno, si existe:

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

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

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

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

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

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

    CLOUDHSM_PIN=<CU user name>:<password>

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

  7. Recarga la configuración de systemd:

    $ systemctl daemon-reload
  8. Comience HAProxy con la configuración de descarga de CloudHSM TLS:

    $ systemctl start haproxy

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

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

Tras la configuración HAProxy, vaya aVerificación del uso del certificado configurado por parte de HTTPS.

Paso 4: habilitar el tráfico HTTPS y verificar el certificado

Después de configurar el servidor web para SSL/TLS descargarlo AWS CloudHSM, añada su instancia de 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 utiliza el certificado con el que configuraste la descarga. SSL/TLS AWS CloudHSM

Habilitación de las conexiones HTTPS entrantes

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. Abre la EC2 consola de Amazon en https://console.aws.amazon.com/ec2/.

  2. Elija Security Groups en el panel de navegación.

  3. Elija Creación de grupo de seguridad.

  4. 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.

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

    3. Para la VPC, elige la VPC que contiene la instancia de Amazon de tu servidor web. EC2

    4. Seleccione Add Rule (Añadir regla).

    5. Para tipo, seleccione HTTPS en la ventana desplegable.

    6. Para Origen, introduzca una ubicación de origen.

    7. Elija Creación de grupo de seguridad.

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

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

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

  8. 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.

  9. Seleccione Guardar.

Verificación del uso del certificado configurado por parte de HTTPS

Tras añadir el servidor web a un grupo de seguridad, puede comprobar que la SSL/TLS descarga utiliza su certificado autofirmado. Puede hacerlo mediante un navegador web o con una herramienta como OpenSSL s_client.

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 dirección URL en la barra de direcciones comienza con https://. 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 enrutar el nombre de dominio de su sitio web (por ejemplo, https://www.example.com/) a su servidor web. Para obtener más información, consulte Enrutamiento del tráfico a una EC2 instancia de Amazon en la Guía para desarrolladores de Amazon Route 53 o en la documentación de su servicio de DNS.

  2. Utilice el navegador web para ver el certificado del servidor web. Para obtener más información, consulte los siguientes temas:

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

  3. Asegúrese de que el SSL/TLS certificado es el que ha configurado para usar en su servidor web.

Para comprobar 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 tu servidor web.

    openssl s_client -connect <server name>:443
    sugerencia

    Puede usar un servicio de DNS como Amazon Route 53 para enrutar el nombre de dominio de su sitio web (por ejemplo, https://www.example.com/) a su servidor web. Para obtener más información, consulte Enrutamiento del tráfico a una EC2 instancia de Amazon en la Guía para desarrolladores de Amazon Route 53 o en la documentación de su servicio de DNS.

  2. Asegúrese de que el SSL/TLS certificado es el que ha configurado para usar en su servidor web.

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

Para agregar un equilibrador de carga, consulte Agregue un balanceador de carga con Elastic Load Balancing para AWS CloudHSM(opcional).