Paso 2: generar o importar una clave privada y un certificado SSL/TLS - 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.

Paso 2: generar o importar una clave privada y un certificado SSL/TLS

Para habilitar HTTPS, la aplicación del servidor web (NGINX o Apache) necesita una clave privada y un certificado SSL/TLS correspondiente. Para utilizar la descarga de SSL/TLS de un servidor web AWS CloudHSM, debe almacenar la clave privada en un HSM de su clúster. AWS CloudHSM Puede realizar esta operación de una de las siguientes formas:

  • Si todavía no dispone de una clave privada y un certificado correspondiente, genere una clave privada en un HSM. Use la clave privada para crear una solicitud de firma de certificado (CSR), la cual utilizará para crear un certificado SSL/TLS.

  • Si ya dispone de una clave privada y de su certificado correspondiente, puede importar la clave privada a un HSM.

Independientemente del método anterior que elija, se exporta una clave privada PEM falsa del 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 SSL/TLS.

Generación de una clave privada y un certificado

Generación de una clave privada

En esta sección, se muestra cómo generar un par de claves mediante el uso de la herramienta Utilidad de administración de claves (KMU) del SDK 3 de cliente. Una vez que haya generado un par de claves dentro del HSM, puede exportarlo como un archivo PEM falso y generar el certificado correspondiente.

Las claves privadas generadas con la utilidad de administración de claves (KMU) se pueden usar tanto con el SSK 3 de cliente como con el SDK 5 de cliente.

Instalación y configuración de la herramienta Utilidad de administración de claves (KMU)
  1. Conéctese a su instancia de cliente.

  2. Instalación y configuración de SDK 3 de cliente.

  3. Ejecute el siguiente comando para iniciar el cliente. AWS CloudHSM

    Amazon Linux
    $ sudo start cloudhsm-client
    Amazon Linux 2
    $ sudo service cloudhsm-client start
    CentOS 7
    $ sudo service cloudhsm-client start
    CentOS 8
    $ sudo service cloudhsm-client start
    RHEL 7
    $ sudo service cloudhsm-client start
    RHEL 8
    $ sudo service cloudhsm-client start
    Ubuntu 16.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 18.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 20.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 22.04 LTS

    La compatibilidad con el motor dinámico de OpenSSL aún no está disponible.

  4. Ejecute el siguiente comando para iniciar la herramienta de línea de comandos key_mgmt_util.

    $ /opt/cloudhsm/bin/key_mgmt_util
  5. Ejecute el siguiente comando para iniciar sesión en el HSM. Reemplace <nombre de usuario> y <password> por el nombre de usuario y la contraseña del usuario criptográfico (CU).

    Command: loginHSM -u CU -s <user name> -p <password>>

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 siguientes:

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

    Utilice el comando genRSAKeyPair 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 y una etiqueta de tls_rsa_keypair.

    Command: genRSAKeyPair -m 2048 -e 65537 -l tls_rsa_keypair

    Si el comando se ejecutó correctamente, debería ver el siguiente resultado que indica que ha generado correctamente un par de claves RSA.

    Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS
  • Cómo generar una clave privada EC en un HSM

    Utilice el comando genECCKeyPair para generar un par de claves EC. Este ejemplo genera un par de claves EC con un ID de curva de 2 (correspondiente a la curva NID_X9_62_prime256v1 ) y una etiqueta de tls_ec_keypair.

    Command: genECCKeyPair -i 2 -l tls_ec_keypair

    Si el comando se ejecutó correctamente, debería ver el siguiente resultado que indica que ha generado correctamente un par de claves EC.

    Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS

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.

nota

Los archivos PEM falsos generados con la herramienta Utilidad de administración de claves (KMU) se pueden usar tanto con el SDK 3 de cliente como con el SDK 5 de cliente.

Identifique el identificador de claves que corresponde a la clave que desea exportar como un PEM falso y, a continuación, ejecute el siguiente comando para exportar la clave privada en un formato PEM falso y guárdela en un archivo. Reemplace los valores siguientes por sus propios valores.

  • <private_key_handle>: identificador de la clave privada generada. Este identificador se generó por uno de los comandos de generación de claves del paso anterior. En el ejemplo anterior, el identificador de la clave privada es 8.

  • <web_server_fake_PEM.key>: nombre del archivo en el que se escribirá la clave PEM falsa.

Command: getCaviumPrivKey -k <private_key_handle> -out <web_server_fake_PEM.key>

Exit (Salir)

Ejecute el comando siguiente para detener el key_mgmt_util.

Command: exit

Ahora debería tener un nuevo archivo en su sistema, ubicado en la ruta especificada<web_server_fake_PEM.key> del 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íele el archivo CSR y utilice el certificado SSL/TLS firmado que le proporcione 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. Para instalar y configurar, realice una de las siguientes acciones:

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). Reemplace <web_server_fake_PEM.key> por el nombre del archivo que contiene la clave privada de PEM falsa. Reemplace <web_server.csr> 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 su certificado SSL/TLS.

    $ 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á su certificado de servidor web.

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

Después de completar estos pasos, vaya a Paso 3: configurar el servidor web.

Importación de una clave privada y un certificado existentes

Es posible que ya disponga de una clave privada y un certificado SSL/TLS correspondiente que utiliza para HTTPS en su servidor web. En caso afirmativo, puede importar la clave a un HSM siguiendo los pasos indicados en esta sección.

nota

Algunas notas sobre la importación de claves privadas y la compatibilidad con el SDK de cliente:

  • La importación de una clave privada existente requiere el SDK 3 de cliente.

  • Puede usar claves privadas del SDK 3 de cliente con el SDK 5 de cliente.

  • El motor dinámico de Open SSL para el SDK 3 de cliente no es compatible con las plataformas Linux más recientes, pero sí lo es la implementación del motor dinámico de Open SSL para el SDK 5 de cliente. Puede importar una clave privada existente mediante la herramienta Utilidad de administración de claves (KMU) incluida con el SDK 3 de cliente y, a continuación, usar esa clave privada y la implementación del motor dinámico de OpenSSL con el SDK 5 de cliente para admitir la descarga de SSL/TLS en las plataformas Linux más recientes.

Cómo importar una clave privada existente a un HSM con SDK 3 de cliente
  1. Conéctese a su instancia de cliente de Amazon EC2. Si es necesario, copie su clave privada y el certificado en la instancia.

  2. Instalación and configuración de SDK 3 de cliente

  3. Ejecute el siguiente comando para iniciar el cliente. AWS CloudHSM

    Amazon Linux
    $ sudo start cloudhsm-client
    Amazon Linux 2
    $ sudo service cloudhsm-client start
    CentOS 7
    $ sudo service cloudhsm-client start
    CentOS 8
    $ sudo service cloudhsm-client start
    RHEL 7
    $ sudo service cloudhsm-client start
    RHEL 8
    $ sudo service cloudhsm-client start
    Ubuntu 16.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 18.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 20.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 22.04 LTS

    La compatibilidad con el motor dinámico de OpenSSL aún no está disponible.

  4. Ejecute el siguiente comando para iniciar la herramienta de línea de comandos key_mgmt_util.

    $ /opt/cloudhsm/bin/key_mgmt_util
  5. Ejecute el siguiente comando para iniciar sesión en el HSM. Reemplace <nombre de usuario> y <password> por el nombre de usuario y la contraseña del usuario criptográfico (CU).

    Command: loginHSM -u CU -s <user name> -p <password>
  6. Ejecute los siguientes comandos para importar la clave privada a un HSM.

    1. Ejecute el siguiente comando para crear una clave de encapsulación simétrica que sea válida únicamente para la sesión actual. El comando y el resultado se muestran aquí.

      Command: genSymKey -t 31 -s 16 -sess -l wrapping_key_for_import Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 6 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
    2. Ejecute el siguiente comando para importar la clave privada actual a un HSM. El comando y el resultado se muestran aquí. Reemplace los valores siguientes por sus propios valores:

      • <web_server_existing.key>: nombre del archivo que contiene su clave privada.

      • <web_server_imported_key>: etiqueta para su clave privada importada.

      • <wrapping_key_handle>: identificador de clave de encapsulamiento generado en el comando anterior. En el ejemplo anterior el identificador de clave de encapsulación es 6.

      Command: importPrivateKey -f <web_server_existing.key> -l <web_server_imported_key> -w <wrapping_key_handle> BER encoded key length is 1219 Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Private Key Unwrapped. Key Handle: 8 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
  7. Ejecute el comando siguiente para exportar la clave privada en formato PEM falso y guardarla en un archivo. Reemplace los valores siguientes por sus propios valores.

    • <private_key_handle>: identificador de la clave privada importada. Este identificador se generó con el segundo comando del paso anterior. En el ejemplo anterior, el identificador de la clave privada es 8.

    • <web_server_fake_PEM.key>: nombre del archivo que contiene su clave privada PEM falsa exportada.

    Command: getCaviumPrivKey -k <private_key_handle> -out <web_server_fake_PEM.key>
  8. Ejecute el comando siguiente para detener key_mgmt_util.

    Command: exit

Después de completar estos pasos, vaya a Paso 3: configurar el servidor web.