

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.

# Uso del SDK de cliente 5 para trabajar con AWS CloudHSM
<a name="client-sdk5"></a>

 AWS CloudHSM incluye dos versiones principales del SDK de cliente: 
+ SDK 5 de cliente: este es nuestro SDK de cliente más reciente y predeterminado. Para obtener información sobre los beneficios y las ventajas que ofrece, consulte [Ventajas del SDK 5 para AWS CloudHSM clientes](client-sdk-5-benefits.md).
+ SDK 3 de cliente: este es nuestro SDK de cliente anterior. Incluye un completo paquete de componentes para la compatibilidad de aplicaciones basadas en lenguaje y plataforma, así como herramientas de gestión.

Para obtener instrucciones sobre la migración de Client SDK 3 a Client SDK 5, consulte [Migración del SDK de AWS CloudHSM cliente 3 al SDK de cliente 5](client-sdk-migration.md).

En este tema, se describe Client SDK 5. Para ver qué versión de Client SDK está usando, consulte 

**Topics**
+ [Ventajas del SDK 5 para AWS CloudHSM clientes](client-sdk-5-benefits.md)
+ [AWS CloudHSM Plataformas compatibles con Client SDK 5](client-supported-platforms.md)
+ [Biblioteca PKCS \$111 para AWS CloudHSM Client SDK 5](pkcs11-library.md)
+ [Motor AWS CloudHSM dinámico OpenSSL para Client SDK 5](openssl-library.md)
+ [Proveedor AWS CloudHSM de OpenSSL para el SDK de cliente 5](openssl-provider-library.md)
+ [Proveedor de almacenamiento de claves (KSP) para AWS CloudHSM Client SDK 5](ksp-library.md)
+ [Proveedor de JCE para AWS CloudHSM Client SDK 5](java-library.md)

# Ventajas del SDK 5 para AWS CloudHSM clientes
<a name="client-sdk-5-benefits"></a>

En comparación con el SDK de AWS CloudHSM cliente 3, el SDK de cliente 5 es más fácil de administrar, ofrece una capacidad de configuración superior y una mayor confiabilidad. SDK 5 de cliente también ofrece algunas ventajas clave con las que no cuenta SDK 3 de cliente. 

**Diseñado para arquitecturas sin servidor**  
SDK 5 de cliente no requiere un daemon de cliente, por lo que ya no es necesario gestionar un servicio en segundo plano. Esto supone una ayuda para los usuarios en distintos aspectos:   
+ Simplifica el proceso de inicio de la aplicación. Lo único que necesita para empezar a usar CloudHSM es configurar el SDK antes de ejecutar su aplicación.
+ No es necesario contar con un proceso en ejecución constante, lo que facilita la integración con componentes sin servidor como Lambda y Elastic Container Service (ECS).

**Mejores integraciones de terceros y portabilidad simplificada**  
SDK 5 de cliente se ciñe estrictamente a las especificaciones de JCE y proporciona una portabilidad más sencilla entre distintos proveedores de JCE y una mejor integración con terceros.

**Experiencia de usuario y capacidad de configuración mejoradas**  
SDK 5 de cliente mejora la legibilidad de los mensajes de registro y proporciona mecanismos de gestión de errores y excepciones más claros, lo que facilita en gran medida la clasificación de autoservicio a los usuarios. SDK 5 también ofrece distintas configuraciones que puede consultar en la [Página de configuración de la herramienta](https://docs.aws.amazon.com/cloudhsm/latest/userguide/configure-sdk-5.html). 

**Compatibilidad ampliada con plataformas**  
SDK 5 de cliente ofrece más compatibilidad con las plataformas operativas modernas. Incluye soporte para tecnologías ARM y mayor compatibilidad con [JCE](https://docs.aws.amazon.com/cloudhsm/latest/userguide/java-library_5.html), [PKCS\$111](https://docs.aws.amazon.com/cloudhsm/latest/userguide/pkcs11-library.html) y [OpenSSL](https://docs.aws.amazon.com/cloudhsm/latest/userguide/openssl-library.html). Para obtener más información, consulte [Plataformas admitidas](client-supported-platforms.md). 

**IPv6 soporte de conexión**  
El SDK de cliente 5.14\$1 admite conexiones a doble HSMs pila mediante. IPv6 

**Características y mecanismos adicionales**  
SDK 5 de cliente incluye características y mecanismos adicionales que no están disponibles en SDK 3 de cliente. Además, SDK 5 de cliente seguirá añadiendo más mecanismos en el futuro. 

# AWS CloudHSM Plataformas compatibles con Client SDK 5
<a name="client-supported-platforms"></a>

El soporte básico es diferente para cada versión del SDK AWS CloudHSM de cliente. El soporte de plataforma para los componentes de un SDK suele coincidir con el soporte básico, pero no siempre es así. Para determinar la compatibilidad de la plataforma con un componente concreto, primero debe asegurarse de que la plataforma que desea esté incluida en la sección básica del SDK y, a continuación, comprobar si existen exclusiones o cualquier otra información pertinente en la sección de componentes.

AWS CloudHSM solo admite sistemas operativos de 64 bits.

El soporte de plataforma varía con el tiempo. Es posible que las versiones anteriores del SDK de cliente de CloudHSM no sean compatibles con todos los sistemas operativos enumerados aquí. Utilice las notas de la versión para determinar la compatibilidad del sistema operativo con las versiones anteriores del SDK de cliente de CloudHSM. Para obtener más información, consulte [Descargas para AWS CloudHSM Client SDK](client-history.md).

Para ver las plataformas compatibles con el anterior SDK de cliente, consulte [AWS CloudHSM Plataformas compatibles con Client SDK 3](sdk3-support.md)

Client SDK 5 no requiere un daemon de cliente.

**Topics**
+ [Compatibilidad de Linux con Client SDK 5 de](sdk8-linux.md)
+ [Compatibilidad de Windows con Client SDK 5 de](sdk8-windows.md)
+ [Compatibilidad sin servidor con Client SDK 5 de](sdk8-serverless.md)
+ [Compatibilidad de HSM con Client SDK 5 de](sdk5-hsm-types.md)

# Soporte de Linux para AWS CloudHSM Client SDK 5
<a name="sdk8-linux"></a>

 AWS CloudHSM El Client SDK 5 es compatible con los siguientes sistemas operativos y plataformas Linux. 


| Plataformas admitidas | Arquitectura X86\$164 | Arquitectura ARM | 
| --- | --- | --- | 
| Amazon Linux 2 | Sí | Sí | 
| Amazon Linux 2023 | Sí | Sí | 
| Red Hat Enterprise Linux 8 (8.3\$1) | Sí | Sí | 
| Red Hat Enterprise Linux 9 (9.2\$1) | Sí | Sí | 
| Red Hat Enterprise Linux 10 (10.0\$1) | Sí | Sí | 
| Ubuntu 22.04 LTS | Sí | Sí | 
| Ubuntu 24.04 LTS | Sí | Sí | 
+ El SDK 5.16 fue la última versión que proporcionó compatibilidad con la plataforma Ubuntu 20.04 LTS. Para obtener más información, consulte el [sitio web de Ubuntu](https://ubuntu.com/blog/ubuntu-20-04-lts-end-of-life-standard-support-is-coming-to-an-end-heres-how-to-prepare).
+ El SDK 5.12 fue la última versión que proporcionó compatibilidad con la plataforma CentOS 7 (7.8\$1). Para obtener más información, consulte el [sitio web de CentOS](https://blog.centos.org/2023/04/end-dates-are-coming-for-centos-stream-8-and-centos-linux-7/).
+ El SDK 5.12 fue la última versión que proporcionó compatibilidad con la plataforma Red Hat Enterprise Linux 7 (7.8\$1). Para obtener más información, consulte el [sitio web de Red Hat](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux/rhel-7-end-of-maintenance).
+ El SDK 5.4.2 fue la última versión que proporcionó compatibilidad con la plataforma CentOS 8. Para obtener más información, consulte el [sitio web de CentOS](https://www.centos.org/centos-linux-eol/).

# Soporte de Windows para AWS CloudHSM Client SDK 5
<a name="sdk8-windows"></a>

AWS CloudHSM El Client SDK 5 es compatible con las siguientes versiones de Windows Server.
+ Microsoft Windows Server 2016
+ Microsoft Windows Server 2019
+ Microsoft Windows Server 2022
+ Microsoft Windows Server 2025

# Soporte sin servidor para AWS CloudHSM Client SDK 5
<a name="sdk8-serverless"></a>

 AWS CloudHSM El Client SDK 5 es compatible con los siguientes servicios AWS sin servidor. 
+ AWS Lambda
+ Docker/ECS

# Compatibilidad con HSM para AWS CloudHSM Client SDK 5
<a name="sdk5-hsm-types"></a>

En la siguiente tabla se describe la compatibilidad de AWS CloudHSM Client SDK 5 con. HSMs


| hsm1.medium | hsm2m.medium | 
| --- | --- | 
| Compatible con la versión 5.0.0 y posteriores de Client SDK. |  Compatible con la versión 5.9.0 y posteriores del SDK de cliente.  | 

# Biblioteca PKCS \$111 para AWS CloudHSM Client SDK 5
<a name="pkcs11-library"></a>

El PKCS \$111 es un estándar para realizar operaciones criptográficas en módulos de seguridad de hardware (). HSMs AWS CloudHSM ofrece implementaciones de la biblioteca PKCS \$111 que son compatibles con la versión 2.40 del PKCS \$111.

Para obtener más información sobre el arranque, consulte [Conexión al clúster](cluster-connect.md). Para obtener información sobre la solución de problemas, consulte [Problemas conocidos de la biblioteca PKCS \$111 de AWS CloudHSMProblemas conocidos de la biblioteca PKCS \$111](ki-pkcs11-sdk.md).

Para obtener información acerca del uso del SDK 3 de cliente, consulte [Uso de la versión anterior del SDK para trabajar con AWS CloudHSM](choose-client-sdk.md).

**Topics**
+ [Instalar la biblioteca de PKCS \$111](pkcs11-library-install.md)
+ [Autenticar en la biblioteca PKCS \$111](pkcs11-pin.md)
+ [Tipos de clave](pkcs11-key-types.md)
+ [Mecanismos](pkcs11-mechanisms.md)
+ [Operaciones de la API](pkcs11-apis.md)
+ [Atributos de clave](pkcs11-attributes.md)
+ [Ejemplos de código](pkcs11-samples.md)
+ [Configuraciones avanzadas](pkcs11-library-configs.md)
+ [Almacenamiento de certificados](pkcs11-certificate-storage.md)

# Instale la biblioteca PKCS \$111 para el SDK de AWS CloudHSM cliente 5
<a name="pkcs11-library-install"></a>

En este tema, se proporcionan instrucciones para instalar la versión más reciente de la biblioteca PKCS \$111 de la serie de versiones de Client SDK 5 del AWS CloudHSM . Para obtener más información sobre el SDK de cliente o la biblioteca PKCS \$111, consulte [Usar el SDK de cliente](use-hsm.md) y [Biblioteca de PKCS \$111](pkcs11-library.md).

Con SDK 5 de cliente, no es necesario instalar ni ejecutar un daemon de cliente. 

Para ejecutar un único clúster de HSM con SDK 5 de cliente, primero debe administrar la configuración de durabilidad de la clave del cliente configurando `disable_key_availability_check` en `True`. Para obtener más información, consulte [Sincronización de claves](manage-key-sync.md) y [Herramienta de configuración de SDK 5 de cliente](configure-sdk-5.md). 

Para obtener más información sobre la biblioteca PKCS \$111 en SDK 5 de cliente, consulte [Biblioteca PKCS \$111](pkcs11-library.md).

**nota**  
Para ejecutar un único clúster de HSM con SDK 5 de cliente, primero debe administrar la configuración de durabilidad de la clave del cliente configurando `disable_key_availability_check` en `True`. Para obtener más información, consulte [Sincronización de claves](manage-key-sync.md) y [Herramienta de configuración de SDK 5 de cliente](configure-sdk-5.md).

**Cómo instalar y configurar la biblioteca PKCS \$111**

1. Utilice los comandos siguientes para descargar e instalar la biblioteca PKCS \$111.

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

   Instale la biblioteca PKCS \$111 para Amazon Linux 2023 en arquitectura X86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-pkcs11-latest.amzn2023.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.amzn2023.x86_64.rpm
   ```

   Instale la biblioteca PKCS \$111 para Amazon Linux 2023 en la ARM64 arquitectura:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-pkcs11-latest.amzn2023.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.amzn2023.aarch64.rpm
   ```

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

   Instale la biblioteca PKCS \$111 para Amazon Linux 2 en arquitectura X86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-pkcs11-latest.el7.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el7.x86_64.rpm
   ```

   Instale la biblioteca PKCS \$111 para Amazon Linux 2 en la ARM64 arquitectura:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-pkcs11-latest.el7.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el7.aarch64.rpm
   ```

------
#### [ RHEL 10 (10.0\$1) ]

   Instale la biblioteca PKCS \$111 para RHEL 10 en la arquitectura X86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL10/cloudhsm-pkcs11-latest.el10.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el10.x86_64.rpm
   ```

   Instale la biblioteca PKCS \$111 para RHEL 10 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL10/cloudhsm-pkcs11-latest.el10.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el10.aarch64.rpm
   ```

------
#### [ RHEL 9 (9.2\$1) ]

   Instale la biblioteca PKCS \$111 para RHEL 9 en arquitectura X86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-pkcs11-latest.el9.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el9.x86_64.rpm
   ```

   Instale la biblioteca PKCS \$111 para RHEL 9 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-pkcs11-latest.el9.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el9.aarch64.rpm
   ```

------
#### [ RHEL 8 (8.3\$1) ]

   Instale la biblioteca PKCS \$111 para RHEL 8 en arquitectura X86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-pkcs11-latest.el8.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el8.x86_64.rpm
   ```

   Instale la biblioteca PKCS \$111 para RHEL 8 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-pkcs11-latest.el8.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el8.aarch64.rpm
   ```

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

   Instale la biblioteca PKCS \$111 para Ubuntu 24.04 LTS en la arquitectura X86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-pkcs11_latest_u24.04_amd64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-pkcs11_latest_u24.04_amd64.deb
   ```

   Instale la biblioteca PKCS \$111 para Ubuntu 24.04 LTS en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-pkcs11_latest_u24.04_arm64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-pkcs11_latest_u24.04_arm64.deb
   ```

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

   Instale la biblioteca PKCS \$111 para Ubuntu 22.04 LTS en arquitectura X86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Jammy/cloudhsm-pkcs11_latest_u22.04_amd64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-pkcs11_latest_u22.04_amd64.deb
   ```

   Instale la biblioteca PKCS \$111 para Ubuntu 22.04 LTS en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Jammy/cloudhsm-pkcs11_latest_u22.04_arm64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-pkcs11_latest_u22.04_arm64.deb
   ```

------
#### [ Windows Server ]

   Instalar la biblioteca PKCS \$111 para Windows Server en arquitectura x86\$164:

   1. Descargue la [biblioteca PKCS \$111 para SDK 5 de cliente](https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMPKCS11-latest.msi).

   1. Ejecute el instalador de la biblioteca PKCS \$111 (**AWSCloudHSMPKCS11-latest.msi**) con privilegios administrativos de Windows.

------

1. Utilice la herramienta de configuración para especificar la ubicación del certificado de emisión. Para obtener instrucciones, consulte [Especifique la ubicación del certificado de emisión.](cluster-connect.md#specify-cert-location).

1. Para conectarse a su clúster, consulte [Proceso de arranque del SDK de cliente](cluster-connect.md#connect-how-to).

1. Puede encontrar los archivos de la biblioteca PKCS \$111 en las siguientes ubicaciones:
   + Binarios, scripts de configuración y archivos de registro de Linux:

     ```
     /opt/cloudhsm
     ```

     Binarios de Windows:

     ```
     C:\Program Files\Amazon\CloudHSM
     ```

     Archivos de registro y scripts de configuración de Windows:

     ```
     C:\ProgramData\Amazon\CloudHSM
     ```

# Autenticese en la biblioteca PKCS \$111 para el SDK 5 del cliente AWS CloudHSM
<a name="pkcs11-pin"></a>

Cuando utilizas la biblioteca PKCS \$111, tu aplicación se ejecuta como un [usuario criptográfico (CU)](manage-hsm-users.md) concreto en tu interior. HSMs AWS CloudHSM La aplicación solo puede ver y administrar las claves que posee y comparte el CU. Puede usar una CU existente en su aplicación HSMs o crear una nueva para su aplicación. Para obtener información sobre la administración CUs, consulte [Administración de usuarios de HSM con la CLI de CloudHSM y Administración de usuarios de HSM](manage-hsm-users-chsm-cli.md) [con CloudHSM Management Utility](manage-hsm-users-cmu.md) (CMU)

Para especificar el CU para la biblioteca PKCS \$111, utilice el parámetro de pin de la [función C\$1Login](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc385057915) de PKCS \$111. En efecto AWS CloudHSM, el parámetro pin tiene el siguiente formato:

```
<CU_user_name>:<password>
```

Por ejemplo, el siguiente comando establece el pin de la biblioteca PKCS \$111 para el CU con el nombre de usuario `CryptoUser` y la contraseña `CUPassword123!`.

```
CryptoUser:CUPassword123!
```

# Tipos de clave compatibles con la biblioteca PKCS \$111 del AWS CloudHSM Client SDK 5
<a name="pkcs11-key-types"></a>

La biblioteca PKCS \$111 del AWS CloudHSM Client SDK 5 admite los siguientes tipos de claves.


****  

| Tipo de clave | Description (Descripción) | 
| --- | --- | 
| AES | Genere claves AES de 128, 192 y 256 bits.  | 
| Triple DES (3DES,) DESede | Genere una clave DES triple de 192 bits. Consulte la nota [1](#key-types-1) que aparece a continuación para ver los próximos cambios. | 
| EC | Genere claves con las curvas secp224r1 (P-224), secp256r1 (P-256), secp256k1 (Blockchain), secp384r1 (P-384) y secp521r1 (P-521). | 
| GENERIC\$1SECRET | Genere secretos genéricos de 1 a 800 bytes. | 
| RSA | Genere claves RSA de 2048 a 4096 bits, en incrementos de 256 bits | 

[1] De acuerdo con las directrices del NIST, esto no se permite en los clústeres en modo FIPS después de 2023. En el caso de los clústeres en modo no FIPS, seguirá siendo posible después de 2023. Para obtener más información, consulte [Cumplimiento de la normativa FIPS 140: anulación de mecanismo 2024](compliance-dep-notif.md#compliance-dep-notif-1).

# Mecanismos compatibles con la biblioteca PKCS \$111 del AWS CloudHSM Client SDK 5
<a name="pkcs11-mechanisms"></a>

La biblioteca PKCS \$111 es compatible con la versión 2.40 de la especificación PKCS \$111. Para invocar una característica criptográfica con PKCS \$111, llame a una función con un mecanismo determinado. En las siguientes secciones se resumen las combinaciones de funciones y mecanismos compatibles con el AWS CloudHSM Client SDK 5. 

La biblioteca PKCS \$111 admite los siguientes algoritmos:
+ **Cifrado y descifrado**: AES-CBC, AES-CTR, AES-ECB, AES-GCM, -CBC, -ECB, RSA-OAEP y RSA-PKCS DES3 DES3
+ **Firma y verificación**: RSA, HMAC y ECDSA; con y sin hash
+ ** SHA1 SHA256 SHA384Hash/Digest SHA224 —,,, y** SHA512
+ **Encapsulación de claves**: encapsulación de claves AES,[1](#mech1) AES-GCM, RSA-AES y RSA-OAEP
+ **Derivación de claves**: SP800 -108 Counter KDF y ECDH con KDF (los algoritmos KDF compatibles son X9.63 con,,,,) SHA1 SHA224 SHA256 SHA384 SHA512

**Topics**
+ [Generación de funciones de claves y pares de claves](#pkcs11-mech-function-genkey)
+ [Firma y comprobación de las funciones](#pkcs11-mech-function-signverify)
+ [Funciones de recuperación de firma y recuperación de verificación](#pkcs11-mech-function-sr-vr)
+ [Funciones Digest](#pkcs11-mech-function-digest)
+ [Funciones de cifrado y descifrado](#pkcs11-mech-function-enc-dec)
+ [Derivación de funciones de claves](#pkcs11-mech-function-derive-key)
+ [Funciones de encapsulado y desencapsulado](#pkcs11-mech-function-wrap-unwrap)
+ [Tamaño máximo de datos para cada mecanismo](#pkcs11-mech-max)
+ [Notas del mecanismo](#pkcs11-mech-annotations)

## Generación de funciones de claves y pares de claves
<a name="pkcs11-mech-function-genkey"></a>

La biblioteca de AWS CloudHSM software de la biblioteca PKCS \$111 permite utilizar los siguientes mecanismos para las funciones de generación de claves y pares de claves.
+ `CKM_RSA_PKCS_KEY_PAIR_GEN`
+ `CKM_RSA_X9_31_KEY_PAIR_GEN`Este mecanismo es funcionalmente idéntico al mecanismo `CKM_RSA_PKCS_KEY_PAIR_GEN`, pero ofrece más garantías en la generación de `p` y `q`.
+ `CKM_EC_KEY_PAIR_GEN`
+ `CKM_GENERIC_SECRET_KEY_GEN`
+ `CKM_AES_KEY_GEN`
+ `CKM_DES3_KEY_GEN` próximo cambio en la nota a pie de página [5](#mech5).

## Firma y comprobación de las funciones
<a name="pkcs11-mech-function-signverify"></a>

La biblioteca de AWS CloudHSM software de la biblioteca PKCS \$111 le permite utilizar los siguientes mecanismos para las funciones de firma y verificación. Con SDK 5 de cliente, los datos se codifican localmente en el software. Esto significa que no hay límite en cuanto al tamaño de los datos que el SDK puede codificar.

Con SDK 5 de cliente, el hash de RSA y ECDSA se realiza de forma local, por lo que no hay límite de datos. Con HMAC hay límite de datos. Consulte la nota a pie de página [2](#mech2) para obtener más información.

**RSA**
+ `CKM_RSA_X_509`
+ `CKM_RSA_PKCS` Únicamente para operaciones de una sola parte.
+ `CKM_RSA_PKCS_PSS` Únicamente para operaciones de una sola parte.
+ `CKM_SHA1_RSA_PKCS`
+ `CKM_SHA224_RSA_PKCS`
+ `CKM_SHA256_RSA_PKCS`
+ `CKM_SHA384_RSA_PKCS`
+ `CKM_SHA512_RSA_PKCS`
+ `CKM_SHA512_RSA_PKCS`
+ `CKM_SHA1_RSA_PKCS_PSS`
+ `CKM_SHA224_RSA_PKCS_PSS`
+ `CKM_SHA256_RSA_PKCS_PSS`
+ `CKM_SHA384_RSA_PKCS_PSS`
+ `CKM_SHA512_RSA_PKCS_PSS`

**ECDSA**
+ `CKM_ECDSA` Únicamente para operaciones de una sola parte.
+ `CKM_ECDSA_SHA1`
+ `CKM_ECDSA_SHA224`
+ `CKM_ECDSA_SHA256`
+ `CKM_ECDSA_SHA384`
+ `CKM_ECDSA_SHA512`

**HMAC**
+ `CKM_SHA_1_HMAC`[2](#mech2)
+ `CKM_SHA224_HMAC`[2](#mech2)
+ `CKM_SHA256_HMAC`[2](#mech2)
+ `CKM_SHA384_HMAC`[2](#mech2)
+ `CKM_SHA512_HMAC`[2](#mech2)

**CMAC**
+ `CKM_AES_CMAC`

## Funciones de recuperación de firma y recuperación de verificación
<a name="pkcs11-mech-function-sr-vr"></a>

SDK 5 de cliente no ofrece funciones de recuperación de firma y recuperación de verificación.

## Funciones Digest
<a name="pkcs11-mech-function-digest"></a>

La biblioteca de AWS CloudHSM software de la biblioteca PKCS \$111 permite utilizar los siguientes mecanismos para las funciones de resumen. Con SDK 5 de cliente, los datos se codifican localmente en el software. Esto significa que no hay límite en cuanto al tamaño de los datos que el SDK puede codificar.
+ `CKM_SHA_1`
+ `CKM_SHA224`
+ `CKM_SHA256`
+ `CKM_SHA384`
+ `CKM_SHA512`

## Funciones de cifrado y descifrado
<a name="pkcs11-mech-function-enc-dec"></a>

La biblioteca de AWS CloudHSM software de la biblioteca PKCS \$111 le permite utilizar los siguientes mecanismos para las funciones de cifrado y descifrado.
+ `CKM_RSA_X_509`
+ `CKM_RSA_PKCS` Únicamente para operaciones de una sola parte Próximo cambio en la nota a pie de página [5](#mech5).
+ `CKM_RSA_PKCS_OAEP` Únicamente para operaciones de una sola parte.
+ `CKM_AES_ECB`
+ `CKM_AES_CTR`
+ `CKM_AES_CBC`
+ `CKM_AES_CBC_PAD`
+ `CKM_DES3_CBC` próximo cambio en la nota a pie de página [5](#mech5).
+ `CKM_DES3_ECB` próximo cambio en la nota a pie de página [5](#mech5).
+ `CKM_DES3_CBC_PAD` próximo cambio en la nota a pie de página [5](#mech5).
+  `CKM_AES_GCM` [1](#mech1), [2](#mech2)
+ `CKM_CLOUDHSM_AES_GCM`[3](#mech3)

## Derivación de funciones de claves
<a name="pkcs11-mech-function-derive-key"></a>

La biblioteca de AWS CloudHSM software de la biblioteca PKCS \$111 admite los siguientes mecanismos de derivación de claves:
+ `CKM_SP800_108_COUNTER_KDF`
+ `CKM_ECDH1_DERIVE`: admite la derivación de claves ECDH con los siguientes tipos de KDF definidos por el proveedor [6](#kdf6):
  + `CKD_CLOUDHSM_X963_SHA1_KDF`- X9.63 KDF con SHA1 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA224_KDF`- X9.63 KDF con SHA224 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA256_KDF`- X9.63 KDF con SHA256 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA384_KDF`- X9.63 KDF con SHA384 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA512_KDF`- X9.63 KDF con SHA512 [7](#kdf7)

## Funciones de encapsulado y desencapsulado
<a name="pkcs11-mech-function-wrap-unwrap"></a>

La biblioteca de AWS CloudHSM software de la biblioteca PKCS \$111 permite utilizar los siguientes mecanismos para las funciones Wrap y Unwrap.

Para obtener más opciones de encapsulamiento de claves AES, consulte [Encapsulamiento de claves con AES](manage-aes-key-wrapping.md). 
+ `CKM_RSA_PKCS` Únicamente para operaciones de una sola parte. Próximo cambio en la nota a pie de página [5](#mech5).
+ `CKM_RSA_PKCS_OAEP`[4](#mech4)
+ `CKM_AES_GCM`[1](#mech1), [3](#mech3)
+ `CKM_CLOUDHSM_AES_GCM`[3](#mech3)
+ `CKM_RSA_AES_KEY_WRAP`
+ `CKM_CLOUDHSM_AES_KEY_WRAP_NO_PAD`[3](#mech3)
+ `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD`[3](#mech3)
+ `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`[3](#mech3)

## Tamaño máximo de datos para cada mecanismo
<a name="pkcs11-mech-max"></a>

En la tabla siguiente, se muestra el tamaño máximo de datos establecido para cada mecanismo:


**Tamaño máximo de datos**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/pkcs11-mechanisms.html)

## Notas del mecanismo
<a name="pkcs11-mech-annotations"></a>
+ [1] Al realizar el cifrado AES-GCM, el HSM no acepta los datos del vector de inicialización (IV) de la aplicación. Debe utilizar un vector de inicialización generado. El IV de 12 bytes proporcionado por el HSM se escribe en la referencia de memoria a la que apunta el elemento pIV de la estructura de parámetros `CK_GCM_PARAMS` especificada por el usuario. Para asegurarse de no generar confusión en el usuario, el SDK de PKCS\$111 versión 1.1.1 y posteriores obliga a que el elemento pIV apunte a un búfer puesto a cero cuando se inicializa el cifrado AES-GCM.
+ [2] Cuando se opera con datos mediante cualquiera de los mecanismos siguientes, si el búfer de datos supera el tamaño máximo de datos, la operación produce un error. Para estos mecanismos, todo el procesamiento de los datos debe realizarse dentro del HSM. Para obtener más información sobre los tamaños máximos de conjuntos de datos para cada mecanismo, consulte [Tamaño máximo de datos para cada mecanismo](#pkcs11-mech-max).
+ [3] mecanismo definido por el proveedor. Para poder utilizar los mecanismos definidos por el proveedor de CloudHSM, las aplicaciones PKCS\$111 deben incluir `/opt/cloudhsm/include/pkcs11/pkcs11t.h` durante la compilación.

  `CKM_CLOUDHSM_AES_GCM`: este mecanismo exclusivo es una alternativa programáticamente segura del estándar `CKM_AES_GCM`. Antepone el IV generado por el HSM al texto cifrado en lugar de volver a escribirlo en la estructura `CK_GCM_PARAMS` que se proporciona durante la inicialización del cifrado. Puede utilizar este mecanismo con las funciones `C_Encrypt`, `C_WrapKey`, `C_Decrypt` y `C_UnwrapKey`. Cuando se utiliza este mecanismo, la variable pIV de la estructura `CK_GCM_PARAMS` debe establecerse en `NULL`. Cuando se utiliza este mecanismo con `C_Decrypt` y `C_UnwrapKey`, se espera que el IV se anteponga al texto cifrado que se está desencapsulando.

  `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD`:Encapsulamiento de claves AES con relleno PKCS \$15

  `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`:Encapsulamiento de claves AES con relleno de ceros
+ [4] Los siguientes `CK_MECHANISM_TYPE` y `CK_RSA_PKCS_MGF_TYPE` se admiten como `CK_RSA_PKCS_OAEP_PARAMS` para `CKM_RSA_PKCS_OAEP`:
  + `CKM_SHA_1` con `CKG_MGF1_SHA1`
  + `CKM_SHA224` con `CKG_MGF1_SHA224`
  + `CKM_SHA256` con `CKG_MGF1_SHA256`
  + `CKM_SHA384` con `CKM_MGF1_SHA384`
  + `CKM_SHA512` con `CKM_MGF1_SHA512`
+ [5] De acuerdo con las directrices del NIST, esto no se permite en los clústeres en modo FIPS después de 2023. En el caso de los clústeres en modo no FIPS, seguirá siendo posible después de 2023. Para obtener más información, consulte [Cumplimiento de la normativa FIPS 140: anulación de mecanismo 2024](compliance-dep-notif.md#compliance-dep-notif-1).
+ [6] Tipos definidos por el proveedor. Para usar tipos definidos por el proveedor de CloudHSM, las aplicaciones PKCS \$111 deben incluir `cloudhsm_pkcs11_vendor_defs.h` durante la compilación. Esto se encuentra en `/opt/cloudhsm/include/pkcs11/cloudhsm_pkcs11_vendor_defs.h` para plataformas basadas en Linux y en `C:\Program Files\Amazon\CloudHSM\include\pkcs11\cloudhsm_pkcs11_vendor_defs.h` para plataformas basadas en Windows.
+ [7] Las funciones de derivación de claves (KDFs) se especifican en la [publicación especial 800-56A, revisión 3 del NIST](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf).

# Operaciones de API compatibles con la biblioteca PKCS \$111 del Client SDK 5 AWS CloudHSM
<a name="pkcs11-apis"></a>

La biblioteca PKCS \$111 admite las siguientes operaciones de la API PKCS \$111 para el SDK 5 AWS CloudHSM del cliente.
+ `C_CloseAllSessions`
+ `C_CloseSession`
+ `C_CreateObject`
+ `C_Decrypt`
+ `C_DecryptFinal`
+ `C_DecryptInit`
+ `C_DecryptUpdate`
+ `C_DeriveKey`
+ `C_DestroyObject`
+ `C_Digest`
+ `C_DigestFinal`
+ `C_DigestInit`
+ `C_DigestUpdate`
+ `C_Encrypt`
+ `C_EncryptFinal`
+ `C_EncryptInit`
+ `C_EncryptUpdate`
+ `C_Finalize`
+ `C_FindObjects`
+ `C_FindObjectsFinal`
+ `C_FindObjectsInit`
+ `C_GenerateKey`
+ `C_GenerateKeyPair`
+ `C_GenerateRandom`
+ `C_GetAttributeValue`
+ `C_GetFunctionList`
+ `C_GetInfo`
+ `C_GetMechanismInfo`
+ `C_GetMechanismList`
+ `C_GetSessionInfo`
+ `C_GetSlotInfo`
+ `C_GetSlotList`
+ `C_GetTokenInfo`
+ `C_Initialize`
+ `C_Login`
+ `C_Logout`
+ `C_OpenSession`
+ `C_Sign`
+ `C_SignFinal`
+ `C_SignInit`
+ `C_SignUpdate`
+ `C_UnWrapKey`
+ `C_Verify`
+ `C_VerifyFinal`
+ `C_VerifyInit`
+ `C_VerifyUpdate`
+ `C_WrapKey`

# Atributos clave de la biblioteca PKCS \$111 del SDK 5 del Client SDK AWS CloudHSM
<a name="pkcs11-attributes"></a>

Un objeto AWS CloudHSM clave puede ser una clave pública, privada o secreta. Las acciones permitidas en un objeto de clave se especifican mediante atributos. Los atributos se definen cuando se crea el objeto de clave. Al utilizar la biblioteca PKCS \$111 AWS CloudHSM, asignamos los valores predeterminados según lo especificado en el estándar PKCS \$111.

AWS CloudHSM no admite todos los atributos enumerados en la especificación PKCS \$111. Seguimos esta especificación en todos los atributos que admitimos. Estos atributos se indican en sus respectivas tablas.

Las funciones criptográficas como `C_CreateObject`, `C_GenerateKey`, `C_GenerateKeyPair`, `C_UnwrapKey` y `C_DeriveKey` que crean, modifican o copian objetos toman una plantilla de atributos como uno de sus parámetros. Para obtener más información acerca de cómo pasar una plantilla de atributos durante la creación de objetos, consulte el ejemplo [Generar claves mediante la biblioteca PKCS \$111](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate).

En los temas siguientes se proporciona más información sobre los atributos AWS CloudHSM clave.

**Topics**
+ [Tablas de atributos](pkcs11-attributes-interpreting.md)
+ [Modificación de atributos](modify-attr.md)
+ [Interpretación de los códigos de error](attr-errors.md)

# Tablas de atributos de la biblioteca PKCS \$111 para AWS CloudHSM Client SDK 5
<a name="pkcs11-attributes-interpreting"></a>

Las tablas de la biblioteca PKCS \$111 AWS CloudHSM contienen una lista de atributos que difieren según el tipo de clave. Indica si un atributo determinado es compatible con un tipo de clave concreto cuando se utiliza una función criptográfica específica con. AWS CloudHSM

**Leyenda**
+ ✔ indica que CloudHSM admite el atributo para el tipo de clave específico.
+ ✖ indica que CloudHSM no admite el atributo para el tipo de clave específico.
+ R indica que el valor del atributo se establece en de solo lectura para el tipo de clave específico.
+ S indica que `GetAttributeValue` no puede leer el atributo porque distingue entre mayúsculas y minúsculas.
+ Una celda vacía en la columna Valor predeterminado indica que no hay ningún valor predeterminado específico asignado al atributo.

## GenerateKeyPair
<a name="generatekeypair"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## GenerateKey
<a name="generatekey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## CreateObject
<a name="createobject"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## UnwrapKey
<a name="unwrapkey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## DeriveKey
<a name="derivekey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## GetAttributeValue
<a name="getattributevalue"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

**Notas de atributo**
+ [1] Este atributo es parcialmente compatible con el firmware y debe configurarse de forma explícita únicamente en el valor predeterminado.
+ [2] Atributo obligatorio.

# Modificación de los atributos de la biblioteca PKCS \$111 para el SDK 5 AWS CloudHSM del cliente
<a name="modify-attr"></a>

Algunos atributos de la biblioteca PKCS \$111 de un AWS CloudHSM objeto se pueden modificar una vez creado el objeto, mientras que otros no. Para modificar atributos, use el comando [key set-attribute](cloudhsm_cli-key-set-attribute.md) desde la CLI de CloudHSM. También puede obtener una lista de atributos mediante el comando [key list](cloudhsm_cli-key-list.md) desde la CLI de CloudHSM.

En la siguiente lista se muestran los atributos que se pueden modificar después de crear un objeto:
+ `CKA_LABEL`
+ `CKA_TOKEN`
**nota**  
La modificación solo se permite para cambiar una clave de sesión por una clave de token. Use el comando [key set-attribute](cloudhsm_cli-key-set-attribute.md) desde la CLI de CloudHSM para cambiar el valor del atributo.
+ `CKA_ENCRYPT`
+ `CKA_DECRYPT`
+ `CKA_SIGN`
+ `CKA_VERIFY`
+ `CKA_WRAP`
+ `CKA_UNWRAP`
+ `CKA_LABEL`
+ `CKA_SENSITIVE`
+ `CKA_DERIVE`
**nota**  
Este atributo admite la derivación de claves. Debe ser `False` para todas las claves públicas y no puede establecerse en `True`. Para las claves secretas y privadas de EC, se puede establecer en `True` o `False`.
+ `CKA_TRUSTED`
**nota**  
Este atributo se puede establecer en `True` o `False` solo mediante Crypto Officer (CO).
+ `CKA_WRAP_WITH_TRUSTED`
**nota**  
Aplique este atributo a una clave de datos exportable para especificar que solo puede encapsular esta clave con claves marcadas como `CKA_TRUSTED`. Una vez establecido `CKA_WRAP_WITH_TRUSTED` como true, el atributo pasa a ser de solo lectura y no se puede cambiar ni eliminar.

# Interpretación de los códigos de error de la biblioteca PKCS \$111 para el SDK 5 AWS CloudHSM del cliente
<a name="attr-errors"></a>

La especificación en la plantilla de un atributo de la biblioteca PKCS \$111 que no es compatible con una clave específica produce un error. La siguiente tabla contiene los códigos de error que se generan cuando se infringen las especificaciones:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/attr-errors.html)

# Ejemplos de código de la biblioteca PKCS \$111 del AWS CloudHSM Client SDK 5
<a name="pkcs11-samples"></a>

En los ejemplos de código que GitHub aparecen a continuación, se muestra cómo realizar tareas básicas con la biblioteca PKCS \$111 para el SDK de AWS CloudHSM cliente 5. 

## Requisitos previos
<a name="pkcs11-samples-prereqs"></a>

Antes de ejecutar las muestras, siga estos pasos para configurar su entorno:
+ Instale y configure la [biblioteca PKCS \$111](pkcs11-library-install.md) para SDK 5 de cliente.
+ Configure un [usuario de criptografía (CU)](manage-hsm-users.md). La aplicación usa esta cuenta de HSM para ejecutar los ejemplos de código en el HSM.

## Ejemplos de código
<a name="pkcs11-samples-code"></a>

Los ejemplos de código de la biblioteca de AWS CloudHSM software de PKCS \$111 están disponibles en. [GitHub](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples) Este repositorio contiene ejemplos acerca de cómo realizar operaciones comunes con PKCS\$111, como el cifrado, el descifrado, la firma y la verificación.
+ [Generar claves (AES, RSA, EC)](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate)
+ [Mostrar atributos de clave](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/)
+ [Cifrado y descifrado de datos con AES-GCM](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/encrypt/aes_gcm.c)
+ [Cifrado y descifrado de datos con AES\$1CTR](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/aes_ctr.c) 
+ [Cifrado y descifrado de datos con 3DES](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/des_ecb.c) 
+ [Firmar y verificar datos con RSA](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/sign/rsa_sign.c)
+ [Derivar claves usando HMAC KDF](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/derivation/hmac_kdf.c)
+ [Encapsule y desencapsule las claves con AES utilizando el relleno PKCS \$15](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_wrapping.c)
+ [Encapsule y desencapsule las claves con AES sin relleno](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_no_padding_wrapping.c)
+ [Encapsule y desencapsule las claves con AES usando cero relleno](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_zero_padding_wrapping.c)
+ [Encapsulamiento y desencapsulamiento de claves con AES-GCM](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/wrapping/aes_gcm_wrapping.c)
+ [Cómo encapsular y desencapsular claves con RSA](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/rsa_wrapping.c)

# Configuraciones avanzadas para la biblioteca PKCS \$111 para AWS CloudHSM
<a name="pkcs11-library-configs"></a>

El proveedor AWS CloudHSM PKCS \$111 incluye la siguiente configuración avanzada, que no forma parte de las configuraciones generales que utilizan la mayoría de los clientes. Estas configuraciones proporcionan capacidades adicionales.
+ [Conectar a varias ranuras con el PKCS \$111](pkcs11-library-configs-multi-slot.md)
+ [Vuelva a intentar la configuración del PKCS \$111](pkcs11-library-configs-retry.md)

# Configuración de múltiples ranuras con biblioteca PKCS \$111 para AWS CloudHSM
<a name="pkcs11-library-configs-multi-slot"></a>

Una sola ranura en la biblioteca PKCS \$111 del SDK 5 de cliente representa una única conexión a un clúster en AWS CloudHSM. Con Client SDK 5, puede configurar su PKCS11 biblioteca para permitir que varias ranuras conecten a los usuarios a varios clústeres de CloudHSM desde una sola aplicación PKCS \$111. 

Siga las instrucciones de este tema para hacer que su aplicación utilice la funcionalidad de varias ranuras para conectarse a varios clústeres.

**Topics**
+ [Requisitos previos de múltiples ranuras para la biblioteca PKCS \$111 para AWS CloudHSM](#pkcs11-multi-slot-prereqs)
+ [Configure la biblioteca PKCS \$111 para que funcione con múltiples ranuras para AWS CloudHSM](pkcs11-multi-slot-config-run.md)
+ [Agregue un clúster con funcionalidad de múltiples ranuras para AWS CloudHSM](pkcs11-multi-slot-add-cluster.md)
+ [Elimine un clúster con funcionalidad de múltiples ranuras para AWS CloudHSM](pkcs11-multi-slot-remove-cluster.md)

## Requisitos previos de múltiples ranuras para la biblioteca PKCS \$111 para AWS CloudHSM
<a name="pkcs11-multi-slot-prereqs"></a>

Antes de configurar varias ranuras para la biblioteca PKCS \$111 AWS CloudHSM, complete los siguientes requisitos previos.
+ Dos o más AWS CloudHSM clústeres a los que desee conectarse, junto con sus certificados de clúster.
+ Una instancia de EC2 con grupos de seguridad configurados correctamente para conectarse a todos los clústeres anteriores. Para obtener más información sobre cómo configurar un clúster y la instancia de cliente, consulta [Cómo empezar con AWS CloudHSM](getting-started.md).
+ Para configurar la funcionalidad de varias ranuras, debe haber descargado e instalado la biblioteca PKCS \$111. Si todavía no ha hecho esto, consulte las instrucciones en [Instale la biblioteca PKCS \$111 para el SDK de AWS CloudHSM cliente 5](pkcs11-library-install.md).

# Configure la biblioteca PKCS \$111 para que funcione con múltiples ranuras para AWS CloudHSM
<a name="pkcs11-multi-slot-config-run"></a>

Para configurar la biblioteca PKCS \$111 para que funcione con múltiples ranuras AWS CloudHSM, siga estos pasos:

1. Identifique los clústeres a los que desea conectarse mediante la funcionalidad de varias ranuras.

1. Agregue estos clústeres a su configuración de PKCS \$111 siguiendo las instrucciones en [Agregue un clúster con funcionalidad de múltiples ranuras para AWS CloudHSM](pkcs11-multi-slot-add-cluster.md)

1. La próxima vez que se ejecute la aplicación PKCS \$111, tendrá la funcionalidad de varias ranuras.

# Agregue un clúster con funcionalidad de múltiples ranuras para AWS CloudHSM
<a name="pkcs11-multi-slot-add-cluster"></a>

Cuando se [conecte a varias ranuras con PKCS \$111](pkcs11-library-configs-multi-slot.md) para AWS CloudHSM, utilice el **configure-pkcs11 add-cluster** comando para añadir un clúster a la configuración.

## Sintaxis
<a name="pkcs11-multi-slot-add-cluster-syntax"></a>

```
configure-pkcs11 add-cluster [OPTIONS]
        --cluster-id <CLUSTER ID> 
        [--region <REGION>]
        [--endpoint <ENDPOINT>]
        [--hsm-ca-cert <HSM CA CERTIFICATE FILE>]
        [--client-cert-hsm-tls-file <CLIENT CERTIFICATE FILE>]
        [--client-key-hsm-tls-file <CLIENT KEY FILE>]
        [-h, --help]
```

## Ejemplos
<a name="pkcs11-multi-slot-add-cluster-examples"></a>

### Cómo agregar un clúster mediante el parámetro `cluster-id`
<a name="w2aac25c21c17c31b7c13b7b3b1"></a>

**Example**  
 Utilice el **configure-pkcs11 add-cluster** junto con el parámetro `cluster-id` para agregar un clúster (con el ID de `cluster-1234567`) a su configuración.   

```
$ sudo /opt/cloudhsm/bin/configure-pkcs11 add-cluster --cluster-id <cluster-1234567>
```

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" add-cluster --cluster-id <cluster-1234567>
```

**sugerencia**  
Si al utilizar **configure-pkcs11 add-cluster** con el parámetro `cluster-id` el clúster no se agrega, consulte el siguiente ejemplo para obtener una versión más larga de este comando, que también requiere de los parámetros `--region` y `--endpoint` para identificar el clúster que se va a agregar. Si, por ejemplo, la región del clúster es diferente a la que está configurada como predeterminada de la AWS CLI, debe usar el parámetro `--region` para usar la región correcta. Además, puede especificar el punto de enlace de la AWS CloudHSM API que se utilizará para la llamada, lo que puede ser necesario para varias configuraciones de red, como el uso de puntos de enlace de la interfaz de VPC para los que no se utiliza el nombre de host DNS predeterminado. AWS CloudHSM

### Cómo agregar un clúster mediante los parámetros `cluster-id`, `endpoint` y `region`
<a name="w2aac25c21c17c31b7c13b7b3b3"></a>

**Example**  
 Utilice el parámetro **configure-pkcs11 add-cluster** junto con los parámetros `cluster-id`, `endpoint` y `region`para agregar un clúster (con el ID de `cluster-1234567`) a la configuración.   

```
$ sudo /opt/cloudhsm/bin/configure-pkcs11 add-cluster --cluster-id <cluster-1234567> --region <us-east-1> --endpoint <https://cloudhsmv2.us-east-1.amazonaws.com>
```

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" add-cluster --cluster-id <cluster-1234567>--region <us-east-1> --endpoint <https://cloudhsmv2.us-east-1.amazonaws.com>
```

Para obtener más información acerca de los parámetros `--cluster-id`, `--region` y `--endpoint`, consulte [AWS CloudHSM Parámetros de configuración del SDK 5 del cliente](configure-tool-params5.md).

## Parameters
<a name="pkcs11-multi-slot-add-cluster-parameters"></a>

**--cluster-id *<Cluster ID>***  
 Realiza una llamada `DescribeClusters` para buscar todas las direcciones IP de la interfaz de red elástica (ENI) de HSM en el clúster asociado al ID del clúster. El sistema añade las direcciones IP de ENI a los archivos de configuración. AWS CloudHSM   
Si utiliza el `--cluster-id` parámetro de una instancia EC2 dentro de una VPC que no tiene acceso a la Internet pública, debe crear un punto final de la VPC de interfaz al que conectarse. AWS CloudHSM Para obtener más información acerca de los puntos de conexión de VPC, consulte [AWS CloudHSM y puntos finales de VPC](cloudhsm-vpc-endpoint.md).
Obligatorio: sí

**--punto final *<Endpoint>***  
Especifique el punto final de la AWS CloudHSM API utilizado para realizar la `DescribeClusters` llamada. Debe configurar esta opción en combinación con `--cluster-id`.   
Obligatorio: no

**--hsm-ca-cert *<HsmCA Certificate Filepath>***  
Especifica la ruta de archivo hacia el certificado CA del HSM.  
Obligatorio: no

**--región *<Region>***  
Especifique la región de su clúster. Debe configurar esta opción en combinación con `--cluster-id`.  
Si no proporciona el parámetro `--region`, el sistema elige la región intentando leer las variables de entorno `AWS_DEFAULT_REGION` o `AWS_REGION`. Si esas variables no están configuradas, el sistema comprueba la región asociada a su perfil en el archivo AWS Config (normalmente `~/.aws/config`), a menos que haya especificado un archivo diferente en la variable de entorno de `AWS_CONFIG_FILE`. Si no se establece ninguna de las opciones anteriores, el sistema utilizará la región `us-east-1` de forma predeterminada.  
Obligatorio: no

**-- -archivo client-cert-hsm-tls *<client certificate hsm tls path>***  
 Ruta al certificado de cliente usado para la autenticación mutua cliente-servidor de TLS.   
 Use esta opción solo si ha registrado al menos un anclaje de veracidad en el HSM con la CLI de CloudHSM. Debe configurar esta opción en combinación con `--client-key-hsm-tls-file`.   
Obligatorio: no

**-- -archivo client-key-hsm-tls *<client key hsm tls path>***  
 Ruta a la clave de cliente usada para la autenticación mutua cliente-servidor de TLS.   
 Use esta opción solo si ha registrado al menos un anclaje de veracidad en el HSM con la CLI de CloudHSM. Debe configurar esta opción en combinación con `--client-cert-hsm-tls-file`.   
Obligatorio: no

# Elimine un clúster con funcionalidad de múltiples ranuras para AWS CloudHSM
<a name="pkcs11-multi-slot-remove-cluster"></a>

Cuando [se conecte a varias ranuras con el PKCS \$111](pkcs11-library-configs-multi-slot.md), utilice el comando **configure-pkcs11 remove-cluster** para eliminar un clúster de las ranuras PKCS \$111 disponibles.

## Sintaxis
<a name="pkcs11-multi-slot-remove-cluster-syntax"></a>

```
configure-pkcs11 remove-cluster [OPTIONS]
        --cluster-id <CLUSTER ID>
        [-h, --help]
```

## Ejemplos
<a name="pkcs11-multi-slot-remove-cluster-examples"></a>

### Eliminación de un clúster mediante el parámetro `cluster-id`
<a name="w2aac25c21c17c31b7c15b7b3b1"></a>

**Example**  
 Utilice el parámetro **configure-pkcs11 remove-cluster** junto con el parámetro `cluster-id` para eliminar un clúster (con el ID de `cluster-1234567`) de su configuración.   

```
$ sudo /opt/cloudhsm/bin/configure-pkcs11 remove-cluster --cluster-id <cluster-1234567>
```

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" remove-cluster --cluster-id <cluster-1234567>
```

Para obtener más información sobre el parámetro `--cluster-id`, consulte [AWS CloudHSM Parámetros de configuración del SDK 5 del cliente](configure-tool-params5.md).

## Parámetro
<a name="pkcs11-multi-slot-remove-cluster-parameters"></a>

**--cluster-id *<Cluster ID>***  
 ID del clúster que se va a eliminar de la configuración  
Obligatorio: sí

# Vuelva a intentar los comandos de la biblioteca PKCS \$111 para AWS CloudHSM
<a name="pkcs11-library-configs-retry"></a>

AWS CloudHSM El SDK de cliente 5.8.0 y las versiones posteriores tienen una estrategia de reintentos automáticos integrada que reintentará las operaciones reguladas por HSM desde el lado del cliente. Cuando un HSM limita las operaciones porque está demasiado ocupado realizando operaciones anteriores y no puede aceptar más solicitudes, el cliente intentará volver a intentar las operaciones restringidas hasta 3 veces y, al mismo tiempo, SDKs retrocederá exponencialmente. Esta estrategia de reintento automático se puede configurar en uno de estos dos modos: **desactivado** y **estándar**.
+ **desactivado**: el SDK de cliente no realizará ninguna estrategia de reintentos para ninguna operación limitada por parte del HSM.
+ **estándar**: este es el modo predeterminado para la versión 5.8.0 y posteriores de SDK de cliente. En este modo, el cliente SDKs volverá a intentar automáticamente las operaciones restringidas y se retrasará exponencialmente.

Para obtener más información, consulte [Limitación de HSM](troubleshoot-hsm-throttling.md).

## Configuración de los comandos de reintento en modo desactivado
<a name="w2aac25c21c17c31b9b9"></a>

------
#### [ Linux ]

**Cómo configurar los comandos de reintento en **off** para SDK 5 de cliente en Linux**
+ Puede utilizar los siguientes comandos para administrar la configuración de reintento en modo **off**:

  ```
  $ sudo /opt/cloudhsm/bin/configure-pkcs11 --default-retry-mode off
  ```

------
#### [ Windows ]

**Cómo configurar los comandos de reintento en **off** para SDK 5 de cliente en Windows**
+ Puede utilizar los siguientes comandos para administrar la configuración de reintento en modo **off**:

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" --default-retry-mode off
  ```

------

# Almacenamiento de certificados con la biblioteca PKCS \$111
<a name="pkcs11-certificate-storage"></a>

 La biblioteca PKCS \$111 de AWS CloudHSM admite el almacenamiento de certificados de clave pública como “objetos públicos” (según se define en PKCS \$111 2.40) en clústeres hsm2m.medium. Esta característica permite que las sesiones PKCS \$111, tanto públicas como privadas, creen, recuperen, modifiquen y eliminen certificados de clave pública. 

 Para usar el almacenamiento de certificados con la biblioteca PKCS \$111, debe habilitarlo en la configuración del cliente. Una vez habilitado, puede administrar objetos de certificado desde las aplicaciones PKCS \$111. Las operaciones que se aplican tanto a los objetos de certificado como a los objetos clave, como [C\$1 FindObjects](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc323205461), devolverán los resultados del almacenamiento de claves y certificados. 

**Topics**
+ [Habilitación del almacenamiento de certificados](pkcs11-certificate-storage-configuration.md)
+ [API de almacenamiento de certificados](pkcs11-certificate-storage-api.md)
+ [Atributos de certificado](pkcs11-certificate-storage-attributes.md)
+ [Registros de auditoría del almacenamiento de certificados](pkcs11-certificate-storage-audit-logs.md)

# Habilitación del almacenamiento de certificados
<a name="pkcs11-certificate-storage-configuration"></a>

 Puede habilitar el almacenamiento de certificados en clústeres hsm2m.medium mediante la herramienta de configuración de la biblioteca PKCS \$111. Esta característica está disponible en las versiones del SDK 5.13 y posteriores. Para ver una lista de operaciones que admiten el tipo de objeto de certificado, consulte [Operaciones de API de almacenamiento de certificados](pkcs11-certificate-storage-api.md). 

 Para habilitar el almacenamiento de certificados, siga estos pasos según el sistema operativo: 

------
#### [ Linux ]
+ 

****Habilitación del almacenamiento de certificados****  
Use el siguiente comando:

  ```
  $ sudo /opt/cloudhsm/bin/configure-pkcs11 --enable-certificate-storage
  ```

------
#### [ Windows ]
+ 

****Habilitación del almacenamiento de certificados****  
Abra una ventana de comandos y ejecute el siguiente comando:

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" --enable-certificate-storage
  ```

------

# Operaciones de API de almacenamiento de certificados
<a name="pkcs11-certificate-storage-api"></a>

 Las siguientes operaciones PKCS \$111 admiten el tipo de objeto de certificado (`CKO_CERTIFICATE`): 

## Operaciones generales de certificados
<a name="general-certificate-operations"></a>

**`C_CreateObject`**  
Crea un nuevo objeto de certificado.

**`C_DestroyObject`**  
Elimina un objeto de certificado existente.

**`C_GetAttributeValue`**  
Obtiene el valor de uno o más atributos de un objeto de certificado.

**`C_SetAttributeValue`**  
Actualiza el valor de uno o más atributos de un objeto de certificado.

## Operaciones de búsqueda de objetos de certificado
<a name="certificate-object-search-operations"></a>

**`C_FindObjectsInit`**  
Inicia una búsqueda de objetos de certificado.

**`C_FindObjects`**  
Continúa una búsqueda de objetos de certificado.

**`C_FindObjectsFinal`**  
Finaliza una búsqueda de objetos de certificado.

# Atributos de almacenamiento de certificados
<a name="pkcs11-certificate-storage-attributes"></a>

 La siguiente tabla enumera los atributos de objeto de certificado admitidos y sus valores: 


| Atributo | Predeterminado | Description (Descripción) | 
| --- | --- | --- | 
| `CKA_CLASS` | Obligatorio | Debe ser `CKO_CERTIFICATE`. | 
| `CKA_TOKEN` | True |  Debe ser `True`. | 
| `CKA_MODIFIABLE` | True | Debe ser `True`. | 
| `CKA_PRIVATE` | False | Debe ser `False`. | 
| `CKA_LABEL` | Vacío | Límite de 127 caracteres. | 
| `CKA_COPYABLE` | False | Debe ser `False`. | 
| `CKA_DESTROYABLE` | True | Debe ser `True`. | 
| `CKA_CERTIFICATE_TYPE` | Obligatorio | Debe ser `CKC_X_509`. | 
| `CKA_TRUSTED` | False | Debe ser `False`. | 
| `CKA_CERTIFICATE_CATEGORY` | `CK_CERTIFICATE_CATEGORY_UNSPECIFIED` | Debe ser `CK_CERTIFICATE_CATEGORY_UNSPECIFIED`. | 
| `CKA_CHECK_VALUE` | Derivado de `CKA_VALUE` | Se establece automáticamente según `CKA_VALUE`. | 
| `CKA_START_DATE` | Vacío | Fecha “no antes de” del certificado. | 
| `CKA_END_DATE` | Vacío | Fecha “no después de” del certificado. | 
| `CKA_PUBLIC_KEY_INFO` | Vacío | El tamaño máximo es de 16 kilobytes. | 
| `CKA_SUBJECT` | Obligatorio | El sujeto del certificado. | 
| `CKA_ID` | Vacío | El tamaño máximo es de 128 bytes. La exclusividad no se impone. | 
| `CKA_ISSUER` | Vacío | El emisor del certificado. | 
| `CKA_SERIAL_NUMBER` | Vacío | Número de serie del certificado. | 
| `CKA_VALUE` | Obligatorio | El tamaño máximo es de 32 kilobytes. | 

# Registros de auditoría del almacenamiento de certificados
<a name="pkcs11-certificate-storage-audit-logs"></a>

 AWS CloudHSM escribe registros de auditoría para las operaciones de almacenamiento de certificados que modifican los datos en una secuencia de registros de CloudWatch Amazon Events independiente dentro del grupo de registros del clúster CloudWatch . Este flujo de registro se nombra según el clúster, no según un HSM específico dentro del clúster. 

 Para obtener información sobre cómo acceder a los registros de auditoría CloudWatch, consulte. [Trabajar con Amazon CloudWatch Logs y AWS CloudHSM Audit Logs](get-hsm-audit-logs-using-cloudwatch.md) 

## Campos de entrada del registro
<a name="pkcs11-certificate-storage-audit-logs-fields"></a>

`object_handle`  
Identificador único del objeto de certificado.

`op_code`  
Operación realizada o intentada. Valores posibles:  
+ `CreateObject`
+ `DestroyObject`
+ `SetAttributeValues`

`response`  
`OK` si la operación se realizó correctamente, o uno de los siguientes tipos de error:  
+ `DuplicateAttribute`
+ `InvalidAttributeValue`
+ `ObjectNotFound`
+ `MaxObjectsReached`
+ `InternalFailure`

`attributes`  
Atributos modificados, si corresponde.

`timestamp`  
Hora en la que ocurrió la operación, en milisegundos desde la época Unix.

## Ejemplos de registro de auditoría
<a name="pkcs11-certificate-storage-audit-logs-examples"></a>

### CreateObject ejemplo
<a name="pkcs11-certificate-storage-audit-logs-examples-create"></a>

```
{
    "object_handle": 463180677312929947,
    "op_code": "CreateObject",
    "response": "OK",
    "attributes": null,
    "timestamp": 1725482483671
}
```

### DestroyObject ejemplo
<a name="pkcs11-certificate-storage-audit-logs-examples-delete"></a>

```
{
    "object_handle": 463180677312929947,
    "op_code": "DestroyObject",
    "response": "OK",
    "attributes": null,
    "timestamp": 1725482484559
}
```

### SetAttributeValues ejemplo
<a name="pkcs11-certificate-storage-audit-logs-examples-set"></a>

```
{
    "object_handle": 463180678453346687,
    "op_code": "SetAttributeValues",
    "response": "OK",
    "attributes": [
        "Label"
    ],
    "timestamp": 1725482488004
}
```

### CreateObject Ejemplo fallido
<a name="pkcs11-certificate-storage-audit-logs-examples-error"></a>

```
{
    "object_handle": null,
    "op_code": "CreateObject",
    "response": "MaxObjectsReached",
    "attributes": null,
    "timestamp": 1726084937125
}
```

# Motor AWS CloudHSM dinámico OpenSSL para Client SDK 5
<a name="openssl-library"></a>

El motor dinámico de AWS CloudHSM OpenSSL le permite transferir las operaciones criptográficas a su clúster de CloudHSM a través de la API de OpenSSL.

AWS CloudHSM proporciona un motor dinámico OpenSSL, sobre el que puede leer en o. [AWS CloudHSM Descarga de SSL/TLS en Linux mediante Tomcat con JSSE](third-offload-linux-jsse.md) [AWS CloudHSM Descarga de SSL/TLS en Linux usando NGINX o Apache con OpenSSL](third-offload-linux-openssl.md) Para ver un ejemplo sobre el uso AWS CloudHSM con OpenSSL, consulte [este blog de seguridad de AWS](https://aws.amazon.com/blogs/security/automate-the-deployment-of-an-nginx-web-service-using-amazon-ecs-with-tls-offload-in-cloudhsm/). Para obtener información sobre el soporte de la plataforma SDKs, consulte. [AWS CloudHSM Plataformas compatibles con Client SDK 5](client-supported-platforms.md) Para obtener información sobre la solución de problemas, consulte [Problemas conocidos del motor dinámico OpenSSL para AWS CloudHSM](ki-openssl-sdk.md).

Utilice las siguientes secciones para instalar y configurar el motor AWS CloudHSM dinámico para OpenSSL mediante Client SDK 5.

Para obtener información acerca del uso del SDK 3 de cliente, consulte [Uso de la versión anterior del SDK para trabajar con AWS CloudHSM](choose-client-sdk.md).

**Topics**
+ [Instalación del motor AWS CloudHSM dinámico OpenSSL para el SDK 5 del cliente](openssl5-install.md)
+ [Tipos de clave compatibles con OpenSSL Dynamic Engine AWS CloudHSM for Client SDK 5](openssl-key-types.md)
+ [Mecanismos compatibles con OpenSSL Dynamic Engine AWS CloudHSM for Client SDK 5](openssl-mechanisms.md)
+ [Configuraciones avanzadas para OpenSSL para AWS CloudHSM](openssl-library-configs.md)

# Instalación del motor AWS CloudHSM dinámico OpenSSL para el SDK 5 del cliente
<a name="openssl5-install"></a>

Utilice las siguientes secciones para instalar el motor dinámico de OpenSSL AWS CloudHSM para el SDK 5 del cliente.

**nota**  
Para ejecutar un único clúster de HSM con SDK 5 de cliente, primero debe administrar la configuración de durabilidad de la clave del cliente configurando `disable_key_availability_check` en `True`. Para obtener más información, consulte [Sincronización de claves](manage-key-sync.md) y [Herramienta de configuración de SDK 5 de cliente](configure-sdk-5.md).

**Instalación y configuración del motor dinámico de OpenSSL**

1. Utilice los comandos siguientes para descargar e instalar el motor de OpenSSL.

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

   Instale el motor dinámico de OpenSSL para Amazon Linux 2023 en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-dyn-latest.amzn2023.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-dyn-latest.amzn2023.x86_64.rpm
   ```

   Instale el motor dinámico OpenSSL para Amazon Linux 2023 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-dyn-latest.amzn2023.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-dyn-latest.amzn2023.aarch64.rpm
   ```

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

   Instale el motor dinámico de OpenSSL para Amazon Linux 2 en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-dyn-latest.el7.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-dyn-latest.el7.x86_64.rpm
   ```

   Instale el motor dinámico OpenSSL para Amazon Linux 2 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-dyn-latest.el7.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-dyn-latest.el7.aarch64.rpm
   ```

------
#### [ RHEL 9 (9.2\$1) ]

   Instale el motor dinámico de OpenSSL para RHEL 9 en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-dyn-latest.el9.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-dyn-latest.el9.x86_64.rpm
   ```

   Instale el motor dinámico OpenSSL para RHEL 9 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-dyn-latest.el9.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-dyn-latest.el9.aarch64.rpm
   ```

------
#### [ RHEL 8 (8.3\$1) ]

   Instale el motor dinámico de OpenSSL para RHEL 8 en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-dyn-latest.el8.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-dyn-latest.el8.x86_64.rpm
   ```

   Instale el motor dinámico OpenSSL para RHEL 8 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-dyn-latest.el8.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-dyn-latest.el8.aarch64.rpm
   ```

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

   Instale el motor dinámico OpenSSL para Ubuntu 24.04 LTS en la arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-dyn_latest_u24.04_amd64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-dyn_latest_u24.04_amd64.deb
   ```

   Instale el motor dinámico OpenSSL para Ubuntu 24.04 LTS en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-dyn_latest_u24.04_arm64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-dyn_latest_u24.04_arm64.deb
   ```

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

   Instale el motor dinámico de OpenSSL para Ubuntu 22.04 LTS en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Jammy/cloudhsm-dyn_latest_u22.04_amd64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-dyn_latest_u22.04_amd64.deb
   ```

   Instale el motor dinámico OpenSSL para Ubuntu 22.04 LTS en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Jammy/cloudhsm-dyn_latest_u22.04_arm64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-dyn_latest_u22.04_arm64.deb
   ```

------

   Ha instalado la biblioteca compartida del motor dinámico en `/opt/cloudhsm/lib/libcloudhsm_openssl_engine.so`.

1. Iniciar SDK 5 de cliente. Para obtener más información sobre las acciones de arranque, consulte [Proceso de arranque del SDK de cliente](cluster-connect.md#connect-how-to).

1. Configure una variable de entorno con las credenciales de un usuario de criptografía (CU). Para obtener información sobre la creación, consulte. CUs [Crear un AWS CloudHSM usuario con la CLI de CloudHSM](cloudhsm_cli-user-create.md)

   ```
   $ export CLOUDHSM_PIN=<HSM user name>:<password>
   ```
**nota**  
El SDK 5 de cliente introduce la variable de entorno `CLOUDHSM_PIN` para almacenar las credenciales del CU. En SDK 3 de cliente, las credenciales del CU se almacenan en la variable de entorno `n3fips_password`. El SDK 5 de cliente admite ambas variables de entorno, pero recomendamos utilizar `CLOUDHSM_PIN`.  
Al configurar las variables de `CLOUDHSM_PIN` entorno, debe evitar cualquier carácter especial que pueda interpretar el intérprete de comandos.

1. Conecte su instalación de motor dinámico de OpenSSL al clúster. Para obtener más información, consulte [Conexión al clúster](cluster-connect.md).

1. Arranque del SDK 5 de cliente. Para obtener más información, consulte [Proceso de arranque del SDK de cliente](cluster-connect.md#connect-how-to).

## Comprobar el motor dinámico de OpenSSL para el SDK 5 de cliente
<a name="verify-dyn-5"></a>

Utilice el siguiente comando para comprobar la instalación del motor dinámico de OpenSSL.

```
$ openssl engine -t cloudhsm
```

El siguiente resultado comprueba su configuración:

```
(cloudhsm) CloudHSM OpenSSL Engine
     [ available ]
```

# Tipos de clave compatibles con OpenSSL Dynamic Engine AWS CloudHSM for Client SDK 5
<a name="openssl-key-types"></a>

El motor dinámico AWS CloudHSM OpenSSL admite los siguientes tipos de claves con Client SDK 5.


****  

| Tipo de clave | Description (Descripción) | 
| --- | --- | 
| EC | ECDSA sign/verify para los tipos de claves P-256, P-384 y secp256k1. Para generar claves EC que sean interoperables con el motor OpenSSL, consulte [Exportación de una clave asimétrica con la CLI de CloudHSM](cloudhsm_cli-key-generate-file.md). | 
| RSA | Generación de claves RSA para claves de 2048, 3072 y 4096 bits. Firma y verificación RSA. La verificación se descarga al software OpenSSL. | 

# Mecanismos compatibles con OpenSSL Dynamic Engine AWS CloudHSM for Client SDK 5
<a name="openssl-mechanisms"></a>

El motor dinámico AWS CloudHSM OpenSSL admite los siguientes mecanismos para las funciones de firma y verificación con el SDK de cliente 5.

## Firma y comprobación de las funciones
<a name="openssl-mechanisms-sign-verify"></a>

Con SDK 5 de cliente, los datos se codifican localmente en el software. Esto significa que no hay límite en cuanto al tamaño de los datos a los que se puede aplicar la función hash.

Tipos de firma RSA
+ SHA1withRSA
+ SHA224withRSA
+ SHA256withRSA
+ SHA384withRSA
+ SHA512withRSA

Tipos de firma ECDSA
+ SHA1withECDSA
+ SHA224withECDSA
+ SHA256withECDSA
+ SHA384withECDSA
+ SHA512withECDSA

# Configuraciones avanzadas para OpenSSL para AWS CloudHSM
<a name="openssl-library-configs"></a>

El proveedor de AWS CloudHSM OpenSSL incluye la siguiente configuración avanzada, que no forma parte de las configuraciones generales que utilizan la mayoría de los clientes. Estas configuraciones proporcionan capacidades adicionales.
+ [Comandos de reintento para OpenSSL](openssl-library-configs-retry.md)

# Reintente los comandos de OpenSSL para AWS CloudHSM
<a name="openssl-library-configs-retry"></a>

AWS CloudHSM El SDK de cliente 5.8.0 y las versiones posteriores tienen una estrategia de reintentos automáticos integrada que reintentará las operaciones reguladas por HSM desde el lado del cliente. Cuando un HSM limita las operaciones porque está demasiado ocupado realizando operaciones anteriores y no puede aceptar más solicitudes, el cliente intentará volver a intentar las operaciones restringidas hasta 3 veces y, al mismo tiempo, SDKs retrocederá exponencialmente. Esta estrategia de reintento automático se puede configurar en uno de estos dos modos: **desactivado** y **estándar**.
+ **desactivado**: el SDK de cliente no realizará ninguna estrategia de reintentos para ninguna operación limitada por parte del HSM.
+ **estándar**: este es el modo predeterminado para la versión 5.8.0 y posteriores de SDK de cliente. En este modo, el cliente SDKs volverá a intentar automáticamente las operaciones restringidas y se retrasará exponencialmente.

Para obtener más información, consulte [Limitación de HSM](troubleshoot-hsm-throttling.md).

## Configuración de los comandos de reintento en modo desactivado
<a name="w2aac25c21c19c19b7b9"></a>

Puede utilizar uno de los siguientes comandos para configurar los comandos de reintento en modo **off**:

```
$ sudo /opt/cloudhsm/bin/configure-dyn --default-retry-mode off
```

# Proveedor AWS CloudHSM de OpenSSL para el SDK de cliente 5
<a name="openssl-provider-library"></a>

El proveedor de AWS CloudHSM OpenSSL le permite transferir las operaciones criptográficas de TLS a su clúster de CloudHSM a través de la API de proveedor de OpenSSL. La interfaz Provider es el enfoque recomendado para las nuevas implementaciones que utilizan OpenSSL 3.2 y versiones posteriores.

Utilice las siguientes secciones para instalar y configurar el proveedor de AWS CloudHSM OpenSSL mediante el SDK de cliente 5.

**aviso**  
 El proveedor de OpenSSL no admite AWS CloudHSM actualmente la integración con la CLI de OpenSSL. Consulte para ver las integraciones compatibles[AWS CloudHSM Descarga de SSL/TLS en Linux mediante NGINX o con el proveedor OpenSSL HAProxy](third-offload-linux-openssl-provider.md). 

## Plataformas admitidas
<a name="openssl-provider-supported-platforms"></a>

El proveedor de OpenSSL requiere OpenSSL 3.2 o posterior, disponible en \$1, Ubuntu 24.04\$1 y Amazon Linux EL9 2023\$1.

Compruebe la compatibilidad: `openssl version`

**Topics**
+ [Plataformas admitidas](#openssl-provider-supported-platforms)
+ [Instalación del proveedor AWS CloudHSM OpenSSL para el SDK de cliente 5](openssl-provider-install.md)
+ [Tipos de claves compatibles con OpenSSL Provider AWS CloudHSM for Client SDK 5](openssl-provider-key-types.md)
+ [Mecanismos compatibles con el proveedor de OpenSSL](openssl-provider-mechanisms.md)
+ [Configuración avanzada del proveedor OpenSSL](openssl-provider-advanced-config.md)

# Instalación del proveedor AWS CloudHSM OpenSSL para el SDK de cliente 5
<a name="openssl-provider-install"></a>

Utilice las siguientes secciones para instalar el SDK 5 del proveedor OpenSSL para AWS CloudHSM Client.

**nota**  
Para ejecutar un único clúster de HSM con SDK 5 de cliente, primero debe administrar la configuración de durabilidad de la clave del cliente configurando `disable_key_availability_check` en `True`. Para obtener más información, consulte [Sincronización de claves](working-client-sync.md#client-sync-sdk8) y [Herramienta de configuración de SDK 5 de cliente](configure-sdk-5.md).

## Requisitos
<a name="openssl-provider-cluster-requirements"></a>

El proveedor de OpenSSL **requiere** los tipos de clústeres hsm2m.medium y, como mínimo, la versión 5.17.0 o posterior del SDK de cliente de CloudHSM.

## Instalar el proveedor de OpenSSL
<a name="openssl-provider-install-steps"></a>

**Para instalar el proveedor de OpenSSL**

1. Utilice los siguientes comandos para descargar e instalar el proveedor de OpenSSL.

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

   Instale el proveedor OpenSSL para Amazon Linux 2023 en la arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-openssl-provider-latest.amzn2023.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-openssl-provider-latest.amzn2023.x86_64.rpm
   ```

   Instale el proveedor OpenSSL para Amazon Linux 2023 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-openssl-provider-latest.amzn2023.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-openssl-provider-latest.amzn2023.aarch64.rpm
   ```

------
#### [ RHEL 9 (9.2\$1) ]

   Instale el proveedor OpenSSL para RHEL 9 en la arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-openssl-provider-latest.el9.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-openssl-provider-latest.el9.x86_64.rpm
   ```

   Instale el proveedor OpenSSL para RHEL 9 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-openssl-provider-latest.el9.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-openssl-provider-latest.el9.aarch64.rpm
   ```

------
#### [ RHEL 10 (10.0\$1) ]

   Instale el proveedor OpenSSL para RHEL 10 en la arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL10/cloudhsm-openssl-provider-latest.el10.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-openssl-provider-latest.el10.x86_64.rpm
   ```

   Instale el proveedor OpenSSL para RHEL 10 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL10/cloudhsm-openssl-provider-latest.el10.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-openssl-provider-latest.el10.aarch64.rpm
   ```

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

   Instale el proveedor OpenSSL para Ubuntu 24.04 en la arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-openssl-provider_latest_u24.04_amd64.deb
   ```

   ```
   $ sudo dpkg -i ./cloudhsm-openssl-provider_latest_u24.04_amd64.deb
   ```

   Instale el proveedor OpenSSL para Ubuntu 24.04 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-openssl-provider_latest_u24.04_arm64.deb
   ```

   ```
   $ sudo dpkg -i ./cloudhsm-openssl-provider_latest_u24.04_arm64.deb
   ```

------

   Ha instalado la biblioteca compartida para el proveedor de OpenSSL en. `/opt/cloudhsm/lib/licloudhsm_openssl_provider.so` 

1. Iniciar SDK 5 de cliente. Para obtener más información sobre las acciones de arranque, consulte [Proceso de arranque del SDK de cliente](cluster-connect.md#connect-how-to).

1. Defina la variable de `CLOUDHSM_PIN` entorno con sus credenciales de usuario criptográfico (CU):

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

1. Conecte su instalación de OpenSSL Provider al clúster. Para obtener más información, consulte [Conexión al clúster](cluster-connect.md).

## Verificar la instalación
<a name="openssl-provider-verify-installation"></a>

Compruebe que el proveedor de OpenSSL esté instalado correctamente:

```
$ CLOUDHSM_PIN=<username>:<password> openssl list -providers -provider cloudhsm
```

Debería ver un resultado similar al siguiente:

```
Providers:
  cloudhsm
    name: AWS CloudHSM OpenSSL Provider
    version: 5.17.0
    status: active
  default
    name: OpenSSL Default Provider
    version: 3.2.2
    status: active
```

# Tipos de claves compatibles con OpenSSL Provider AWS CloudHSM for Client SDK 5
<a name="openssl-provider-key-types"></a>

El proveedor de AWS CloudHSM OpenSSL admite los siguientes tipos de claves con Client SDK 5.


****  

| Tipo de clave | Description (Descripción) | 
| --- | --- | 
| RSA | Operaciones de cifrado asimétrico sign/verify y RSA. La verificación se descarga al software OpenSSL. Para generar claves RSA que sean interoperables con el proveedor de OpenSSL, consulte. [Exportación de una clave asimétrica con la CLI de CloudHSM](cloudhsm_cli-key-generate-file.md) | 
| EC | ECDSA sign/verify para las curvas P-256, P-384 y P-521. La verificación se descarga al software OpenSSL. Para generar claves EC que sean interoperables con el proveedor de OpenSSL, consulte. [Exportación de una clave asimétrica con la CLI de CloudHSM](cloudhsm_cli-key-generate-file.md) | 

# Mecanismos compatibles con el proveedor de OpenSSL
<a name="openssl-provider-mechanisms"></a>

El SDK para proveedores OpenSSL de AWS CloudHSM admite un conjunto integral de mecanismos criptográficos para diversas operaciones, incluidas las firmas digitales, el cifrado asimétrico, el cifrado simétrico, el intercambio de claves y más.

## Tipos de firmas RSA
<a name="openssl-provider-rsa-signatures"></a>

El proveedor de OpenSSL admite firmas digitales RSA con múltiples algoritmos de hash y esquemas de relleno:

SHA1withRSA  
Firmas RSA con algoritmo de hash SHA-1  
+ Relleno PKCS \$11 v1.5
+ Relleno PSS (esquema de firma probabilística)

SHA224withRSA  
Firmas RSA con algoritmo de hash SHA-224  
+ Relleno PKCS \$11 v1.5
+ Acolchado PSS

SHA256withRSA  
Firmas RSA con algoritmo de hash SHA-256  
+ Relleno PKCS \$11 v1.5
+ Acolchado PSS

SHA384withRSA  
Firmas RSA con algoritmo de hash SHA-384  
+ Relleno PKCS \$11 v1.5
+ Acolchado PSS

SHA512withRSA  
Firmas RSA con el algoritmo de hash SHA-512  
+ Relleno PKCS \$11 v1.5
+ Acolchado PSS

## Tipos de firma ECDSA
<a name="openssl-provider-ecdsa-signatures"></a>

El proveedor de OpenSSL admite firmas digitales ECDSA con múltiples algoritmos de hash:

SHA1withECDSA  
Firmas ECDSA con algoritmo de hash SHA-1

SHA224withECDSA  
Firmas ECDSA con algoritmo de hash SHA-224

SHA256withECDSA  
Firmas ECDSA con algoritmo de hash SHA-256

SHA384withECDSA  
Firmas ECDSA con algoritmo de hash SHA-384

SHA512withECDSA  
Firmas ECDSA con algoritmo de hash SHA-512

# Configuración avanzada del proveedor OpenSSL
<a name="openssl-provider-advanced-config"></a>

El SDK para proveedores OpenSSL de AWS CloudHSM ofrece opciones de configuración avanzadas para personalizar su comportamiento para distintos casos de uso y entornos. Utilice la herramienta de configuración para configurar estas opciones.
+ [Vuelva a intentar la configuración para el proveedor de OpenSSL](openssl-provider-configs-retry.md)

# Vuelva a intentar los comandos del proveedor de OpenSSL para AWS CloudHSM
<a name="openssl-provider-configs-retry"></a>

AWS CloudHSM El SDK de cliente 5.8.0 y las versiones posteriores tienen una estrategia de reintentos automáticos integrada que reintentará las operaciones reguladas por HSM desde el lado del cliente. Cuando un HSM limita las operaciones porque está demasiado ocupado realizando operaciones anteriores y no puede aceptar más solicitudes, el cliente intentará volver a intentar las operaciones restringidas hasta 3 veces y, al mismo tiempo, SDKs retrocederá exponencialmente. Esta estrategia de reintento automático se puede configurar en uno de estos dos modos: **desactivado** y **estándar**.
+ **desactivado**: el SDK de cliente no realizará ninguna estrategia de reintentos para ninguna operación limitada por parte del HSM.
+ **estándar**: este es el modo predeterminado para la versión 5.8.0 y posteriores de SDK de cliente. En este modo, el cliente SDKs volverá a intentar automáticamente las operaciones restringidas y se retrasará exponencialmente.

Para obtener más información, consulte [Limitación de HSM](troubleshoot-hsm-throttling.md).

## Configuración de los comandos de reintento en modo desactivado
<a name="w2aac25c21c21c19b7b9"></a>

------
#### [ Linux ]

**Cómo configurar los comandos de reintento en **off** para SDK 5 de cliente en Linux**
+ Puede utilizar los siguientes comandos para administrar la configuración de reintento en modo **off**:

  ```
  $ sudo /opt/cloudhsm/bin/configure-openssl-provider --default-retry-mode off
  ```

------

# Proveedor de almacenamiento de claves (KSP) para AWS CloudHSM Client SDK 5
<a name="ksp-library"></a>

 El proveedor de almacenamiento de claves (KSP) es una API criptográfica específica del sistema operativo Microsoft Windows. El proveedor de almacenamiento de claves (KSP) permite a los desarrolladores usar técnicas criptográficas para proteger aplicaciones basadas en Windows.

Para obtener más información sobre el arranque, consulte [Conexión al clúster](cluster-connect.md).

Para obtener información acerca del uso del SDK 3 de cliente, consulte [Uso de la versión anterior del SDK para trabajar con AWS CloudHSM](choose-client-sdk.md).

**Topics**
+ [Instale el proveedor de almacenamiento de claves (KSP) para el SDK AWS CloudHSM 5 del cliente](ksp-library-install.md)
+ [Autenticarse en el proveedor de almacenamiento de claves (KSP) para el SDK 5 AWS CloudHSM del cliente](ksp-library-authentication.md)
+ [Tipos de claves compatibles con el proveedor de almacenamiento de claves (KSP) para AWS CloudHSM Client SDK 5](ksp-library--key-types.md)
+ [Operaciones de API compatibles Proveedor de almacenamiento de claves (KSP) para AWS CloudHSM Client SDK 5](ksp-library-apis.md)
+ [Configuraciones avanzadas para KSP para AWS CloudHSM](ksp-library-configs.md)

# Instale el proveedor de almacenamiento de claves (KSP) para el SDK AWS CloudHSM 5 del cliente
<a name="ksp-library-install"></a>

Utilice las siguientes secciones para instalar el proveedor de almacenamiento de claves (KSP) para el SDK de AWS CloudHSM cliente 5.

**nota**  
Para ejecutar un único clúster de HSM con SDK 5 de cliente, primero debe administrar la configuración de durabilidad de la clave del cliente configurando `disable_key_availability_check` en `True`. Para obtener más información, consulte [Sincronización de claves](manage-key-sync.md) y [Herramienta de configuración de SDK 5 de cliente](configure-sdk-5.md).

**Para instalar y configurar el proveedor de almacenamiento de claves (KSP)**

1. Instale el proveedor de almacenamiento de claves (KSP) para Windows Server en una arquitectura x86\$164, ábralo PowerShell como administrador y ejecute el siguiente comando:

   ```
   PS C:\> wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMKSP-latest.msi -Outfile C:\AWSCloudHSMKSP-latest.msi
   ```

   ```
   PS C:\> Start-Process msiexec.exe -ArgumentList '/i C:\AWSCloudHSMKSP-latest.msi /quiet /norestart /log C:\client-install.txt' -Wait
   ```

1. Utilice la herramienta de configuración para especificar la ubicación del certificado de emisión. Para obtener instrucciones, consulte [Especifique la ubicación del certificado de emisión.](cluster-connect.md#specify-cert-location).

1. Para conectarse a su clúster, consulte [Proceso de arranque del SDK de cliente](cluster-connect.md#connect-how-to).

1. Puede encontrar los archivos del proveedor de almacenamiento de claves (KSP) en las siguientes ubicaciones:
   + Binarios de Windows:

     ```
     C:\Program Files\Amazon\CloudHSM
     ```

     Archivos de registro y scripts de configuración de Windows:

     ```
     C:\ProgramData\Amazon\CloudHSM
     ```

# Autenticarse en el proveedor de almacenamiento de claves (KSP) para el SDK 5 AWS CloudHSM del cliente
<a name="ksp-library-authentication"></a>

Antes de utilizar el proveedor de almacenamiento de claves (KSP) para el SDK 5 del AWS CloudHSM cliente, debe configurar las credenciales de inicio de sesión del HSM de su sistema. Tiene dos opciones:
+ Administrador de credenciales de Windows (recomendado para una mayor seguridad)
+ Variables de entorno del sistema (configuración más sencilla)

## Administrador de credenciales de Windows
<a name="sdk5-wcm"></a>

Puede configurar las credenciales mediante la utilidad `set_cloudhsm_credentials` o la interfaz del Administrador de credenciales de Windows.
+ **Con la utilidad `set_cloudhsm_credentials`**:

  El instalador de Windows incluye la utilidad `set_cloudhsm_credentials`. Puede emplear esta utilidad para transferir cómodamente las credenciales de inicio de sesión de HSM al Administrador de credenciales de Windows. Si desea compilar esta utilidad desde el código fuente, puede usar el código Python incluido en el instalador.

  1. Vaya a `C:\Program Files\Amazon\CloudHSM\tools\`.

  1. Use el siguiente comando:

     ```
     set_cloudhsm_credentials.exe --username <CU USER> --password <CU PASSWORD>
     ```
+ **Con la interfaz del Administrador de credenciales**:

  1. Abra el Administrador de credenciales:
     + Ingrese `credential manager` en el cuadro de búsqueda de la barra de tareas 
     + Seleccione **Administrador de credenciales**

  1. Seleccione **Windows Credentials (Credenciales de Windows)** para administrar las credenciales de Windows.

  1. Seleccione **Agregar una credencial genérica**

  1. Escriba la información siguiente:
     + **Dirección de Internet o de red**: `CLOUDHSM_PIN`
     + **Nombre de usuario**:*<CU USER>*.
     + **Contraseña**:*<CU PASSWORD>*.

  1. Seleccione **OK**

## Variables de entorno del sistema.
<a name="sdk5-enviorn-var"></a>

Puede establecer variables de entorno del sistema para identificar el HSM y el [usuario de criptografía](understanding-users.md#crypto-user-chsm-cli) (CU). 

**aviso**  
La configuración de credenciales mediante variables de entorno del sistema almacena la contraseña en texto sin formato en el sistema. Para una mayor seguridad, use el Administrador de credenciales de Windows en su lugar.

Puede establecer variables de entorno mediante:
+ La [https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx).
+ El panel de control **Propiedades del sistema** de Windows (pestaña **Avanzado**).
+ Métodos [programáticos](https://msdn.microsoft.com/en-us/library/system.environment.setenvironmentvariable(v=vs.110).aspx) para establecer variables de entorno permanentes del sistema.

Para establecer la variable de entorno del sistema:

**`CLOUDHSM_PIN=<CU USERNAME>:<CU PASSWORD>`**  
Identifica un [usuario de criptografía](understanding-users.md#crypto-user-chsm-cli) (CU) en el HSM y proporciona toda la información de inicio de sesión necesaria. Su aplicación se autentica y ejecuta como este CU. La aplicación tiene los permisos de este CU y puede ver y administrar solo las claves que el CU posee y comparte. Para crear un nuevo usuario de criptografía, use el comando [user create](cloudhsm_cli-user-create.md) en la CLI de CloudHSM. Para buscar los existentes CUs, utilice el comando [user list](cloudhsm_cli-user-list.md) en la CLI de CloudHSM.  
Por ejemplo:  

```
setx /m CLOUDHSM_PIN test_user:password123
```

**nota**  
Al configurar las variables de entorno CLOUDHSM\$1PIN, debe evitar cualquier carácter especial que pueda interpretar el shell.

# Tipos de claves compatibles con el proveedor de almacenamiento de claves (KSP) para AWS CloudHSM Client SDK 5
<a name="ksp-library--key-types"></a>

El proveedor de almacenamiento de AWS CloudHSM claves (KSP) admite los siguientes tipos de claves con el Client SDK 5.


****  

| Tipo de clave | Description (Descripción) | 
| --- | --- | 
| EC | Genere claves mediante las curvas secp256r1 (P-256), secp384r1 (P-384) y secp521r1 (P-521). | 
| RSA | Genere claves RSA de 2048, 3072 y 4096 bits. | 

# Operaciones de API compatibles Proveedor de almacenamiento de claves (KSP) para AWS CloudHSM Client SDK 5
<a name="ksp-library-apis"></a>

Los parámetros del KSP están definidos por el KSP de Microsoft. Consulte la [documentación de Microsoft](https://learn.microsoft.com/en-us/windows/win32/api/ncrypt/) para obtener más información.

El proveedor de almacenamiento de claves (KSP) admite las siguientes operaciones de la API de KSP para el SDK 5 AWS CloudHSM del cliente.
+ [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md)
+ [NCryptOpenKey](ksp-library-apis-open-key.md)
+ [NCryptCreatePersistedKey](ksp-library-apis-create-persisted-key.md)
+ [NCryptGetProperty](ksp-library-apis-get-property.md)
+ [NCryptSetProperty](ksp-library-apis-set-property.md)
+ [NCryptFinalizeKey](ksp-library-apis-finalize-key.md)
+ [NCryptDeleteKey](ksp-library-apis-delete-key.md)
+ [NCryptFreeObject](ksp-library-apis-free-object.md)
+ [NCryptFreeBuffer](ksp-library-apis-free-buffer.md)
+ [NCryptIsAlgSupported](ksp-library-apis-is-alg-supported.md)
+ [NCryptEnumAlgorithms](ksp-library-apis-enum-algorithms.md)
+ [NCryptEnumKeys](ksp-library-apis-enum-keys.md)
+ [NCryptExportKey](ksp-library-apis-export-key.md)
+ [NCryptSignHash](ksp-library-apis-sign-hash.md)
+ [NCryptVerifySignature](ksp-library-apis-verify-signature.md)

# NCryptOpenStorageProvider funciona con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-open-provider"></a>

La función `NCryptOpenStorageProvider` carga e inicializa el proveedor de almacenamiento de claves (KSP).

## Parameters
<a name="ksp-library-apis-open-provider-parameters"></a>

 `phProvider` [salida]   
Un puntero a una variable `NCRYPT_PROV_HANDLE` que almacena el identificador del proveedor.

 `pszProviderName` [entrada]   
Un puntero a una cadena Unicode terminada en nulo que identifica el proveedor de almacenamiento de claves. El proveedor de almacenamiento de claves (KSP) de AWS CloudHSM admite los siguientes valores:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-open-provider.html)
Los valores son literales de cadena de caracteres anchos, como lo indica la L antes del literal.

`dwFlags` [entrada]  
Indicadores que modifican el comportamiento de la función. No se ha definido ningún indicador para esta función.

## Valor de retorno
<a name="ksp-library-apis-open-provider-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 

# NCryptOpenKey con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-open-key"></a>

La función `NCryptOpenKey` abre una clave que existe en el proveedor de almacenamiento de claves (KSP).

## Parameters
<a name="ksp-library-apis-open-key-parameters"></a>

 `hProvider` [entrada]   
El identificador de KSP que contiene la clave. Use [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) para obtener el identificador.

 `phKey` [salida]   
Un puntero a una variable `NCRYPT_KEY_HANDLE` que almacena el identificador de la clave.

`pszKeyName` [entrada]  
Un puntero a una cadena Unicode terminada en nulo que contiene el nombre de la clave.

`dwLegacyKeySpec` [entrada, sin usar]  
AWS CloudHSM El proveedor de almacenamiento de claves (KSP) no usa este parámetro.

`dwFlags` [entrada]  
Indicadores que modifican el comportamiento de la función. No se ha definido ningún indicador para esta función.

## Valor de retorno
<a name="ksp-library-apis-open-key-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hProvider` no es válido.  | 
|  NTE\$1BAD\$1KEYSET  |  El nombre de clave proporcionado no devolvió un resultado único.  | 

# NCryptCreatePersistedKey con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-create-persisted-key"></a>

La función `NCryptCreatePersistedKey` crea una nueva clave y la almacena en el proveedor de almacenamiento de claves (KSP). Puede usar la función [`NCryptSetProperty`](ksp-library-apis-set-property.md) para establecer sus propiedades después de la creación. Debe llamar a [`NCryptFinalizeKey`](ksp-library-apis-finalize-key.md) antes de poder usar la clave.

## Parameters
<a name="ksp-library-apis-create-persisted-key-parameters"></a>

 `hProvider` [entrada]   
El identificador del proveedor de almacenamiento de claves donde se creará la clave. Use [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) para obtener este identificador.

 `phKey` [salida]   
La dirección de una variable `NCRYPT_KEY_HANDLE` que almacena el identificador de la clave. 

 `pszAlgId` [entrada]   
Un puntero a una cadena Unicode terminada en nulo que especifica el identificador del algoritmo criptográfico para crear la clave.  
AWS CloudHSM El proveedor de almacenamiento de claves (KSP) admite los siguientes algoritmos:     
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-create-persisted-key.html)

`pszKeyName` [entrada, opcional]  
Un puntero a una cadena Unicode terminada en nulo que contiene el nombre de la clave. Si este parámetro es NULL, esta función creará una clave efímera que no se conserva.

`dwLegacyKeySpec` [entrada, sin usar]  
AWS CloudHSM El proveedor de almacenamiento de claves (KSP) no usa este parámetro.

`dwFlags` [entrada]  
Indicadores para modificar el comportamiento de la función. Use cero o uno o más de los siguientes valores:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-create-persisted-key.html)

## Valor de retorno
<a name="ksp-library-apis-create-persisted-key-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La función se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 
|  NTE\$1NOT\$1SUPPORTED  |  El parámetro `pszAlgId` contiene un valor que no se admite.  | 
|  NTE\$1EXISTS  |  Ya existe una clave con el nombre especificado y la operación no usó ` NCRYPT_OVERWRITE_KEY_FLAG`.  | 

# NCryptGetProperty con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-get-property"></a>

La función `NCryptGetProperty` recupera valores de propiedades de un objeto de almacenamiento de claves.

## Parameters
<a name="ksp-library-apis-create-get-property-parameters"></a>

 `hObject` [entrada]   
 El identificador del objeto cuya propiedad desea recuperar. Puede usar:  
+ Un identificador de proveedor (`NCRYPT_PROV_HANDLE`)
+ Un identificador de clave (`NCRYPT_KEY_HANDLE`)

 `pszProperty ` [entrada]   
Un puntero a una cadena Unicode terminada en nulo que contiene el nombre de la propiedad que se va a recuperar.   
Cuando se utiliza`NCRYPT_PROV_HANDLE`, el proveedor de almacenamiento de AWS CloudHSM claves (KSP) admite los siguientes identificadores de KSP:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)
Cuando se utiliza`NCRYPT_KEY_HANDLE`, el proveedor de almacenamiento de AWS CloudHSM claves (KSP) admite los siguientes identificadores de KSP:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)
Los valores son literales de cadena de caracteres anchos, como lo indica la L antes del literal.

 `pbOutput` [salida]   
La dirección de un búfer para almacenar el valor de la propiedad. Especifique el tamaño del búfer mediante `cbOutput`.  
Para determinar el tamaño de búfer requerido, establezca este parámetro en NULL. La función almacena el tamaño requerido (en bytes) en la ubicación a la que apunta `pcbResult`.

 `cbOutput` [entrada]   
 El tamaño del búfer `pbOutput` en bytes.

`pcbResult` [salida]  
Un puntero a una variable DWORD que almacena el número de bytes copiados en el búfer `pbOutput`.  
Si `pbOutput` es NULL, se almacena el tamaño requerido (en bytes).

`dwFlags` [entrada]  
Indicadores para modificar el comportamiento de la función. Puede usar cero o:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)
Cuando pszProperty es `NCRYPT_SECURITY_DESCR_PROPERTY`, use uno o una combinación de los siguientes valores:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)

## Valor de retorno
<a name="ksp-library-apis-get-property-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 
|  NTE\$1NOT\$1SUPPORTED  |  El parámetro `pszAlgId` contiene un valor que no se admite.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hObject` no es válido.  | 
|  NTE\$1BUFFER\$1TOO\$1SMALL  |  El parámetro `cbOutput` es demasiado pequeño para los valores de retorno.  | 

# NCryptSetProperty con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-set-property"></a>

La función `NCryptSetProperty` establece valores de propiedades para un objeto de almacenamiento de claves.

## Parameters
<a name="ksp-library-apis-create-set-property-parameters"></a>

 `hObject` [entrada]   
 El identificador del objeto cuya propiedad desea establecer. Puede usar:  
+ Un identificador de proveedor (`NCRYPT_PROV_HANDLE`)
+ Un identificador de clave (`NCRYPT_KEY_HANDLE`)

 `pszProperty ` [entrada]   
Un puntero a una cadena Unicode terminada en nulo que contiene el nombre de la propiedad que se va a recuperar.   
Cuando se utiliza`NCRYPT_PROV_HANDLE`, el proveedor de almacenamiento de AWS CloudHSM claves (KSP) admite los siguientes identificadores de KSP:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-set-property.html)
Cuando se utiliza`NCRYPT_KEY_HANDLE`, el proveedor de almacenamiento de AWS CloudHSM claves (KSP) admite los siguientes identificadores de KSP:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-set-property.html)
Los valores son literales de cadena de caracteres anchos, como lo indica la L antes del literal.

 `pbInput` [entrada]   
 La dirección de un búfer que contiene el nuevo valor de la propiedad. `cbInput` contiene el tamaño del búfer. 

 `cbInput` [entrada]   
 El tamaño del búfer `pbInput` en bytes. 

`dwFlags` [entrada]  
Indicadores que modifican el comportamiento de la función. No se ha definido ningún indicador para esta función.

## Valor de retorno
<a name="ksp-library-apis-set-property-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 
|  NTE\$1NOT\$1SUPPORTED  |  El parámetro `pszProperty` contiene un valor que no se admite.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hObject` no es válido.  | 
|  NTE\$1BAD\$1DATA  |  Los datos a los que apuntan `pbInput` y `cbInput` no son válidos.  | 

# NCryptFinalizeKey con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-finalize-key"></a>

La función `NCryptFinalizeKey` completa una clave de KSP. Para poder usar la clave, primero debe llamar a esta función.

## Parameters
<a name="ksp-library-apis-finalize-key-parameters"></a>

 `hKey` [entrada]   
 El identificador de la clave que se va a completar. Obtenga este identificador llamando a la [NCryptCreatePersistedKey](ksp-library-apis-create-persisted-key.md)función.

`dwFlags` [entrada]  
Indicadores para modificar el comportamiento de la función. Puede usar cero o estos valores:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-finalize-key.html)

## Valor de retorno
<a name="ksp-library-apis-finalize-key-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hKey` no es válido.  | 
|  NTE\$1NOT\$1SUPPORTED  |  El parámetro `dwFlags` contiene un valor que no se admite.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 

# NCryptDeleteKey con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-delete-key"></a>

La función `NCryptDeleteKey` elimina una clave de KSP del proveedor de almacenamiento de claves (KSP).

## Parameters
<a name="ksp-library-apis-delete-key-parameters"></a>

 `hKey` [entrada]   
 El identificador de la clave que se va a eliminar. 

`dwFlags` [entrada]  
Indicadores para modificar el comportamiento de la función. Puede usar cero o más de los siguientes valores:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-delete-key.html)

## Valor de retorno
<a name="ksp-library-apis-delete-key-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La función se realizó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hKey` no es válido.  | 
|  NTE\$1INTERNAL\$1ERROR  |  Se produjo un error interno al eliminar la clave.  | 

# NCryptFreeObject con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-free-object"></a>

La función `NCryptFreeObject` libera un identificador de proveedor o de clave del proveedor de almacenamiento de claves (KSP).

## Parameters
<a name="ksp-library-apis-free-object-parameters"></a>

 `hObject` [entrada]   
 El identificador del objeto que se va a liberar. Puede usar:  
+ Un identificador de proveedor (`NCRYPT_PROV_HANDLE`)
+ Un identificador de clave (`NCRYPT_KEY_HANDLE`)

## Valor de retorno
<a name="ksp-library-apis-free-object-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hObject` no es válido.  | 

# NCryptFreeBuffer con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-free-buffer"></a>

La función `NCryptFreeBuffer` libera un bloque de memoria que fue asignado por el proveedor de almacenamiento de claves (KSP).

## Parameters
<a name="ksp-library-apis-free-buffer-parameters"></a>

 `pvInput` [entrada]   
 La dirección de la memoria que se va a liberar. 

## Valor de retorno
<a name="ksp-library-apis-free-buffer-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 

# NCryptIsAlgSupported con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-is-alg-supported"></a>

NCryptIsAlgSupported la función determina si el proveedor de almacenamiento de claves (KSP) admite un algoritmo criptográfico específico.

## Parameters
<a name="ksp-library-apis-is-alg-supported-parameters"></a>

 `hProvider` [entrada]   
 El identificador del proveedor de almacenamiento de claves. Use [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) para obtener el identificador. 

 `pszAlgId` [entrada]   
 Un puntero a una cadena Unicode terminada en nulo que contiene el identificador del algoritmo criptográfico para crear la clave. El proveedor de almacenamiento de claves (KSP) de AWS CloudHSM admite los siguientes algoritmos:     
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-is-alg-supported.html)

`dwFlags` [entrada]  
Indicadores que modifican el comportamiento de la función. Puede ser cero o el siguiente valor:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-is-alg-supported.html)

## Valor de retorno
<a name="ksp-library-apis-is-alg-supported-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 
|  NTE\$1NOT\$1SUPPORTED  |  El parámetro `pszAlgId` contiene un valor que no se admite.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hProvider` no es válido.  | 

# NCryptEnumAlgorithms con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-enum-algorithms"></a>

La función `NCryptEnumAlgorithms` recupera los nombres de los algoritmos que admite el proveedor de almacenamiento de claves (KSP).

## Parameters
<a name="ksp-library-apis-enum-algorithms-parameters"></a>

 `hProvider` [entrada]   
 El identificador del proveedor de almacenamiento de claves para el cual se van a enumerar los algoritmos. Use la función [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) para obtener este identificador. 

 `dwAlgOperations` [entrada]   
Un conjunto de valores que especifican qué clases de algoritmos se van a enumerar. Puede usar cero para enumerar todos los algoritmos, o combinar uno o más de los siguientes valores:     
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-enum-algorithms.html)

`pdwAlgCount` [salida]  
La dirección de un DWORD que almacena el número de elementos en la matriz `ppAlgList`.

`ppAlgList` [salida]  
La dirección de un puntero a una estructura `NCryptAlgorithmName` que almacena una matriz de nombres de algoritmos registrados. El parámetro `pdwAlgCount` indica el número de elementos de esta matriz.

`dwFlags` [entrada]  
Indicadores para modificar el comportamiento de la función. Use cero o el siguiente valor:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-enum-algorithms.html)

## Valor de retorno
<a name="ksp-library-apis-open-key-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 
|  NTE\$1NOT\$1SUPPORTED  |  El parámetro `dwAlgOperations` contiene un valor que no se admite.  | 

# NCryptEnumKeys con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-enum-keys"></a>

NCryptEnumKeys La función muestra las claves almacenadas en el proveedor de almacenamiento de claves (KSP).

## Parameters
<a name="ksp-library-apis-enum-keys-parameters"></a>

 `hProvider` [entrada]   
El identificador del proveedor de almacenamiento de claves. Use [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md) para obtener este identificador. 

 `pszScope` [entrada, sin usar]   
 Establezca este parámetro en NULL.

 `ppKeyName` [salida]   
La dirección de un puntero a una estructura `NCryptKeyName` que almacena el nombre de la clave. Para liberar esta memoria después de usarla, llame a `NCryptFreeBuffer`. 

`ppEnumState` [entrada, salida]  
Una dirección de puntero VOID que realiza el seguimiento del progreso de la enumeración. El proveedor de almacenamiento de claves usa esta información internamente para administrar la secuencia de enumeración. Para iniciar una nueva enumeración desde el principio, establezca este puntero en NULL.  
Para liberar esta memoria después de completar la enumeración, pase este puntero a `NCryptFreeBuffer`.

`dwFlags` [entrada]  
Indicadores para modificar el comportamiento de la función. Esta función no tiene indicadores.

## Valor de retorno
<a name="ksp-library-apis-enum-keys-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hProvider` no es válido.  | 
|  NTE\$1NO\$1MORE\$1ITEMS  |  La enumeración ha listado todas las claves disponibles.  | 

# NCryptExportKey con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-export-key"></a>

La función `NCryptExportKey` exporta una clave de KSP a la memoria BLOB. Esta función solo admite la exportación de claves públicas.

## Parameters
<a name="ksp-library-apis-export-key-parameters"></a>

 `hKey` [entrada]  
El identificador de la clave que se va a exportar.

 `hExportKey` [entrada, sin usar]  
 AWS CloudHSM El proveedor de almacenamiento de claves (KSP) no usa este parámetro. 

`pszBlobType` [entrada]  
Cadena Unicode terminada en cero que especifica el tipo que se va a exportar. BLOB AWS CloudHSM El proveedor de almacenamiento de claves (KSP) admite los siguientes valores:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-export-key.html)

`pParameterList` [entrada, sin usar]  
AWS CloudHSM El proveedor de almacenamiento de claves (KSP) no usa este parámetro.

`pbOutput` [salida, opcional]  
La dirección de un búfer para almacenar el BLOB de la clave. Especifique el tamaño del búfer mediante `cbOutput`. Si se establece en NULL, la función almacena el tamaño requerido (en bytes) en el DWORD al que apunta `pcbResult`.

`cbOutput` [entrada]  
El tamaño del búfer `pbOutput` en bytes.

`pcbResult` [salida]  
La dirección de una variable DWORD que almacena el número de bytes copiados en el búfer `pbOutput`. Si `pbOutput` es NULL, la función almacena el tamaño de búfer requerido, en bytes.

`dwFlags` [entrada]  
Indicadores que modifican el funcionamiento de la función. Puede usar cero o lo siguiente:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-export-key.html)

## Valor de retorno
<a name="ksp-library-apis-export-key-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hProvider` no es válido.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 
|  NTE\$1BAD\$1KEY\$1STATE  |  El estado de la clave no es válido.  | 
|  NTE\$1NOT\$1SUPPORTED  |  El parámetro `pszBlobType` o `dwFlags` contiene un valor que no es compatible.  | 
|  STATUS\$1INTERNAL\$1ERROR  |  Se produjo un error interno durante la operación.  | 

# NCryptSignHash con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-sign-hash"></a>

La función `NCryptSignHash` crea una firma de un valor hash.

## Parameters
<a name="ksp-library-apis-sign-hash-parameters"></a>

 `hKey` [entrada]   
 El identificador de la clave que se va a usar para firmar el hash. 

`pPaddingInfo` [entrada, opcional]  
Un puntero a una estructura que contiene información de relleno. El tipo de estructura depende del valor `dwFlags`. Utilice este parámetro solo con claves asimétricas; establézcalo en NULL para otros tipos de claves.

`pbHashValue` [entrada]  
Un puntero a un búfer que contiene el valor hash que se va a firmar. Especifique el tamaño del búfer mediante `cbHashValue`.

`cbHashValue` [entrada]  
El tamaño, en bytes, del búfer `pbHashValue` que se va a firmar.

`pbSignature` [salida]  
La dirección de un búfer para almacenar la firma. Especifique el tamaño del búfer mediante `cbSignature`.  
Para determinar el tamaño de búfer requerido, establezca este parámetro en NULL. La función almacena el tamaño requerido (en bytes) en la ubicación a la que apunta `pcbResult`.

`cbSignature` [entrada]  
El tamaño del búfer `pbSignature` en bytes. La función ignora este parámetro si `pbSignature` es NULL.

`pcbResult` [salida]  
Un puntero a una variable DWORD que almacena el número de bytes copiados en el búfer `pbSignature`.  
Si `pbSignature` es NULL, se almacena el tamaño de búfer requerido, en bytes. 

`dwFlags` [entrada]  
Indicadores para modificar el comportamiento de la función. Los indicadores permitidos dependen del tipo de clave. Use uno de los siguientes valores:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-sign-hash.html)

## Valor de retorno
<a name="ksp-library-apis-sign-hash-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hKey` no es válido.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 
|  NTE\$1BUFFER\$1TOO\$1SMALL  |  El parámetro `pcbOutput` es demasiado pequeño para los valores de retorno.  | 
|  NTE\$1BAD\$1KEY\$1STATE  |  El estado de la clave no es válido.  | 
|  NTE\$1INTERNAL\$1ERROR  |  Se produjo un error interno al firmar el hash.  | 

# NCryptVerifySignature con el proveedor de almacenamiento de claves (KSP)
<a name="ksp-library-apis-verify-signature"></a>

La función `NCryptVerifySignature` confirma si una firma coincide con un hash especificado.

## Parameters
<a name="ksp-library-apis-verify-signature-parameters"></a>

 `hKey` [entrada]   
 El identificador de la clave que se va a usar para descifrar la firma. Debe usar la parte de clave pública del par de claves que se utilizó para firmar los datos con [`NCryptSignHash`](ksp-library-apis-sign-hash.md). 

`pPaddingInfo` [entrada, opcional]  
Un puntero a una estructura que contiene información de relleno. El tipo de estructura depende del valor `dwFlags`. Utilice este parámetro solo con claves asimétricas; establézcalo en NULL para otros tipos de claves.

`pbHashValue` [entrada]  
Un puntero a un búfer que contiene el valor hash que se va a firmar. Especifique el tamaño del búfer mediante `cbHashValue`.

`cbHashValue` [entrada]  
El tamaño del búfer `pbHashValue` en bytes.

`pbSignature` [salida]  
La dirección de un búfer que contiene el hash firmado de los datos. Utilice [`NCryptSignHash`](ksp-library-apis-sign-hash.md) para crear esta firma. Especifique el tamaño del búfer mediante `cbSignature`.

`cbSignature` [entrada]  
El tamaño del búfer `pbSignature` en bytes. Utilice [`NCryptSignHash`](ksp-library-apis-sign-hash.md) para crear la firma.

`dwFlags` [entrada]  
Indicadores para modificar el comportamiento de la función. Los indicadores permitidos dependen del tipo de clave. Use uno de los siguientes valores:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/ksp-library-apis-verify-signature.html)

## Valor de retorno
<a name="ksp-library-apis-verify-signature-return-value"></a>

La función devuelve un código de estado para indicar si la operación se realizó correctamente o si se produjo un error.

Los códigos de retorno comunes incluyen:


****  

| Código de retorno | Description (Descripción) | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  La operación se completó correctamente.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Uno o más parámetros no son válidos.  | 
|  NTE\$1FAIL  |  La operación no se pudo completar.  | 
|  NTE\$1INVALID\$1HANDLE  |  El identificador en `hKey` no es válido.  | 
|  NTE\$1BAD\$1FLAGS  |  El parámetro `dwFlags` contiene un valor que no es válido.  | 
|  NTE\$1BAD\$1SIGNATURE  |  La firma no se verificó.  | 
|  NTE\$1BAD\$1KEY\$1STATE  |  El estado de la clave no es válido.  | 
|  NTE\$1INTERNAL\$1ERROR  |  Se produjo un error interno al tratar de verificar la firma.  | 

# Configuraciones avanzadas para KSP para AWS CloudHSM
<a name="ksp-library-configs"></a>

El proveedor de almacenamiento de AWS CloudHSM claves (KSP) incluye la siguiente configuración avanzada, que no forma parte de las configuraciones generales que utilizan la mayoría de los clientes. Estas configuraciones proporcionan capacidades adicionales.
+ [SDK3 modo de compatibilidad para KSP](ksp-library-configs-sdk3-compatibility-mode.md)

# SDK3 modo de compatibilidad para el proveedor de almacenamiento de claves (KSP) para AWS CloudHSM
<a name="ksp-library-configs-sdk3-compatibility-mode"></a>

El proveedor de almacenamiento de claves (KSP) implementa diferentes enfoques para la interacción con claves del HSM:
+ SDK de cliente 5: proporciona comunicación directa con las claves almacenadas en el HSM y elimina la necesidad de archivos de referencia locales
+ SDK de cliente 3: mantiene archivos locales en el servidor Windows que actúan como referencias a las claves almacenadas en el HSM y utiliza estos archivos para facilitar las operaciones de clave

Para los clientes que migran del SDK de cliente 3 al SDK de cliente 5, la opción de modo de SDK3 compatibilidad permite realizar operaciones con los archivos de referencia clave existentes y, al mismo tiempo, conservar la arquitectura de almacenamiento de claves HSM subyacente.

## Habilite el modo SDK3 de compatibilidad
<a name="ksp-library-configs-sdk3-compatibility-mode-on"></a>

------
#### [ Windows ]

**Para habilitar el modo de SDK3 compatibilidad del proveedor de almacenamiento de claves (KSP) para el SDK de cliente 5 en Windows**
+ Puede usar el siguiente comando para habilitar el modo de SDK3 compatibilidad:

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-ksp.exe" --enable-sdk3-compatibility-mode
  ```

------

## Deshabilite el modo de SDK3 compatibilidad
<a name="ksp-library-configs-sdk3-compatibility-mode-off"></a>

------
#### [ Windows ]

**Para deshabilitar el modo de SDK3 compatibilidad del proveedor de almacenamiento de claves (KSP) para el SDK de cliente 5 en Windows**
+ Puede usar el siguiente comando para deshabilitar el modo de SDK3 compatibilidad:

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-ksp.exe" --disable-sdk3-compatibility-mode
  ```

------

# Proveedor de JCE para AWS CloudHSM Client SDK 5
<a name="java-library"></a>

El proveedor AWS CloudHSM JCE es una implementación de proveedor creada a partir del marco de proveedores de Java Cryptographic Extension (JCE). El JCE le permite llevar a cabo operaciones criptográficas usando el kit de desarrollo de Java (JDK). En esta guía, el proveedor de AWS CloudHSM JCE a veces se denomina proveedor de JCE. Utilice el proveedor de JCE y el JDK para transferir las operaciones criptográficas de descarga al HSM. Para obtener información sobre la solución de problemas, consulte [Problemas conocidos del SDK de JCE para AWS CloudHSM](ki-jce-sdk.md).

Para obtener información acerca del uso del SDK 3 de cliente, consulte [Uso de la versión anterior del SDK para trabajar con AWS CloudHSM](choose-client-sdk.md).

**Topics**
+ [Instale el proveedor JCE para AWS CloudHSM Client SDK 5](java-library-install_5.md)
+ [Tipos de claves compatibles con el proveedor de JCE para AWS CloudHSM Client SDK 5](java-lib-keys_5.md)
+ [Conceptos básicos de administración clave en el proveedor de JCE para AWS CloudHSM Client SDK 5](java-library-key-basics_5.md)
+ [Mecanismos compatibles con el proveedor de JCE para AWS CloudHSM Client SDK 5](java-lib-supported_5.md)
+ [Atributos clave de Java compatibles con AWS CloudHSM Client SDK 5](java-lib-attributes_5.md)
+ [Ejemplos de código de la biblioteca de AWS CloudHSM software para Java for Client SDK 5](java-samples.md)
+ [AWS CloudHSM Proveedor de ICE Javadocs](java-javadocs_5.md)
+ [AWS CloudHSM KeyStore Clase Java para Client SDK 5](alternative-keystore_5.md)
+ [Configuraciones avanzadas para AWS CloudHSM JCE for Client SDK 5](java-lib-configs.md)

# Instale el proveedor JCE para AWS CloudHSM Client SDK 5
<a name="java-library-install_5"></a>

El proveedor de JCE para AWS CloudHSM Client SDK 5 es compatible con OpenJDK 8, OpenJDK 11, OpenJDK 17, OpenJDK 21 y OpenJDK 25. Puede descargar ambos desde el [sitio web de OpenJDK](https://openjdk.java.net/).

Use las siguientes secciones para instalar y proporcionar credenciales al proveedor.

**nota**  
Para ejecutar un único clúster de HSM con SDK 5 de cliente, primero debe administrar la configuración de durabilidad de la clave del cliente configurando `disable_key_availability_check` en `True`. Para obtener más información, consulte [Sincronización de claves](manage-key-sync.md) y [Herramienta de configuración de SDK 5 de cliente](configure-sdk-5.md).

**Topics**
+ [Paso 1: Instalar el proveedor de JCE](#install-java-library_5)
+ [Paso 2: Proporcionar las credenciales al proveedor de JCE](#java-library-credentials_5)

## Paso 1: Instalar el proveedor de JCE
<a name="install-java-library_5"></a>

1. Utilice el siguiente comando para descargar e instalar el proveedor de JCE. 

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

   Instale el proveedor de JCE para Amazon Linux 2023 en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-jce-latest.amzn2023.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.amzn2023.x86_64.rpm
   ```

   Instale el proveedor JCE para Amazon Linux 2023 en la ARM64 arquitectura:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-jce-latest.amzn2023.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.amzn2023.aarch64.rpm
   ```

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

   Instale el proveedor de JCE para Amazon Linux 2 en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-jce-latest.el7.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.el7.x86_64.rpm
   ```

   Instale el proveedor JCE para Amazon Linux 2 en la ARM64 arquitectura:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-jce-latest.el7.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.el7.aarch64.rpm
   ```

------
#### [ RHEL 10 (10.0\$1) ]

   Instale el proveedor JCE para RHEL 10 en una arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL10/cloudhsm-jce-latest.el10.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.el10.x86_64.rpm
   ```

   Instale el proveedor JCE para RHEL 10 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL10/cloudhsm-jce-latest.el10.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.el10.aarch64.rpm
   ```

------
#### [ RHEL 9 (9.2\$1) ]

   Instale el proveedor de JCE para RHEL 9 (9.2\$1) en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-jce-latest.el9.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.el9.x86_64.rpm
   ```

   Instale el proveedor JCE para RHEL 9 (9.2\$1) en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-jce-latest.el9.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.el9.aarch64.rpm
   ```

------
#### [ RHEL 8 (8.3\$1) ]

   Instale el proveedor de JCE para RHEL 8 en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-jce-latest.el8.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.el8.x86_64.rpm
   ```

   Instale el proveedor JCE para RHEL 8 en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-jce-latest.el8.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-jce-latest.el8.aarch64.rpm
   ```

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

   Instale el proveedor JCE para Ubuntu 24.04 LTS en una arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-jce_latest_u24.04_amd64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-jce_latest_u24.04_amd64.deb
   ```

   Instale el proveedor JCE para Ubuntu 24.04 LTS en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-jce_latest_u24.04_arm64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-jce_latest_u24.04_arm64.deb
   ```

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

   Instale el proveedor de JCE para Ubuntu 22.04 LTS en arquitectura x86\$164:

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Jammy/cloudhsm-jce_latest_u22.04_amd64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-jce_latest_u22.04_amd64.deb
   ```

   Instale el proveedor JCE para Ubuntu 22.04 LTS en la arquitectura: ARM64 

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Jammy/cloudhsm-jce_latest_u22.04_arm64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-jce_latest_u22.04_arm64.deb
   ```

------
#### [ Windows Server ]

   Instale el proveedor JCE para Windows Server en una arquitectura x86\$164, ábralo PowerShell como administrador y ejecute el siguiente comando:

   ```
   PS C:\> wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMJCE-latest.msi -Outfile C:\AWSCloudHSMJCE-latest.msi
   ```

   ```
   PS C:\> Start-Process msiexec.exe -ArgumentList '/i C:\AWSCloudHSMJCE-latest.msi /quiet /norestart /log C:\client-install.txt' -Wait
   ```

------

1. Iniciar SDK 5 de cliente. Para obtener más información sobre las acciones de arranque, consulte [Proceso de arranque del SDK de cliente](cluster-connect.md#connect-how-to).

1. Localice los siguientes archivos de proveedor de JCE:

------
#### [ Linux ]
   + `/opt/cloudhsm/java/cloudhsm-<version>.jar`
   + `/opt/cloudhsm/bin/configure-jce`
   + `/opt/cloudhsm/bin/jce-info`

------
#### [ Windows ]
   + `C:\Program Files\Amazon\CloudHSM\java\cloudhsm-<version>.jar>`
   + `C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe`
   + `C:\Program Files\Amazon\CloudHSM\bin\jce_info.exe`

------

## Paso 2: Proporcionar las credenciales al proveedor de JCE
<a name="java-library-credentials_5"></a>

Antes de que la aplicación Java pueda utilizar un HSM, el HSM debe autenticar primero la aplicación. HSMs autentifíquese mediante un método de inicio de sesión explícito o implícito.

**Inicio de sesión explícito**: este método le permite proporcionar las credenciales de AWS CloudHSM directamente en la aplicación. Utiliza el método [https://docs.oracle.com/javase/8/docs/api/java/security/AuthProvider.html](https://docs.oracle.com/javase/8/docs/api/java/security/AuthProvider.html), en el que se pasa el nombre de usuario y la contraseña del CU en el patrón pin. Para obtener más información, consulte el ejemplo de código [Inicio de sesión en un HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java).

**Inicio de sesión implícito**: este método le permite definir las credenciales de AWS CloudHSM en un nuevo archivo de propiedades, en las propiedades del sistema o como variables de entorno.
+ **Propiedades del sistema**: defina las credenciales mediante las propiedades del sistema al ejecutar la aplicación. En los siguientes ejemplos, se muestran dos maneras diferentes de hacerlo:

------
#### [ Linux ]

  ```
  $ java -DHSM_USER=<HSM user name> -DHSM_PASSWORD=<password>
  ```

  ```
  System.setProperty("HSM_USER","<HSM user name>");
  System.setProperty("HSM_PASSWORD","<password>");
  ```

------
#### [ Windows ]

  ```
  PS C:\> java -DHSM_USER=<HSM user name> -DHSM_PASSWORD=<password>
  ```

  ```
  System.setProperty("HSM_USER","<HSM user name>");
  System.setProperty("HSM_PASSWORD","<password>");
  ```

------
+ **Variables de entorno**: defina las credenciales como variables de entorno.
**nota**  
Al configurar las variables de entorno, debe evitar cualquier carácter especial que pueda interpretar el intérprete de comandos.

------
#### [ Linux ]

  ```
  $ export HSM_USER=<HSM user name>
  $ export HSM_PASSWORD=<password>
  ```

------
#### [ Windows ]

  ```
  PS C:\> $Env:HSM_USER="<HSM user name>"
  PS C:\> $Env:HSM_PASSWORD="<password>"
  ```

------

Es posible que las credenciales no estén disponibles si la aplicación no las proporciona o si se intenta realizar una operación antes de que el HSM autentique la sesión. En esos casos, la biblioteca de software de CloudHSM para Java busca las credenciales en el orden que se indica a continuación:

1. Propiedades del sistema

1. Variables de entorno

# Tipos de claves compatibles con el proveedor de JCE para AWS CloudHSM Client SDK 5
<a name="java-lib-keys_5"></a>

La biblioteca de AWS CloudHSM software para Java permite generar los siguientes tipos de claves.


****  

| Tipo de clave | Description (Descripción) | 
| --- | --- | 
| AES | Genere claves AES de 128, 192 y 256 bits.  | 
| Triple DES (3DES, DESede) | Genere una clave DES triple de 192 bits. [*](#java-lib-keys_5-note-1) | 
| EC | Genere pares de claves EC: curvas NIST secp224r1 (P-224), secp256r1 (P-256), secp256k1 (Blockchain), secp384r1 (P-384) y secp521r1 (P-521). | 
| GENERIC\$1SECRET | Genere secretos genéricos de 1 a 800 bytes. | 
| HMAC | Soporte de hash para SHA1,, SHA224 SHA256, SHA384. SHA512 | 
| RSA | Genere claves RSA de 2048 a 4096 bits, en incrementos de 256 bits | 

\$1 De acuerdo con las directrices de NIST, esto no está permitido para clústeres en modo FIPS a partir de 2023. En el caso de los clústeres en modo no FIPS, seguirá siendo posible después de 2023. Para obtener más información, consulte [Cumplimiento de la normativa FIPS 140: anulación de mecanismo 2024](compliance-dep-notif.md#compliance-dep-notif-1).

# Conceptos básicos de administración clave en el proveedor de JCE para AWS CloudHSM Client SDK 5
<a name="java-library-key-basics_5"></a>

Los aspectos básicos de la administración de claves en el proveedor de JCE están relacionados con la importación o la exportación de claves, la carga de claves por identificador o la eliminación de claves. Para obtener más información acerca de la administración de claves, consulte el ejemplo de código de [administración de claves](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java).

También puede encontrar más ejemplos de código de proveedor de JCE en [Ejemplos de código](java-samples.md).

# Mecanismos compatibles con el proveedor de JCE para AWS CloudHSM Client SDK 5
<a name="java-lib-supported_5"></a>

En este tema se proporciona información sobre los mecanismos compatibles con el proveedor de JCE con el SDK de AWS CloudHSM cliente 5. Para obtener información sobre las interfaces y las clases de motores de la arquitectura criptográfica de Java (JCA) compatibles AWS CloudHSM, consulte los temas siguientes. 

**Topics**
+ [Generación de funciones de claves y pares de claves](#java-gen-key-pairs-5)
+ [Funciones de cifrado](#java-ciphers_5)
+ [Firma y comprobación de las funciones](#java-sign-verify_5)
+ [Funciones Digest](#java-digests_5)
+ [Funciones de código de autenticación de mensajes basado en hash (HMAC).](#java-mac_5)
+ [Funciones de código de autenticación de mensajes basados en cifrado (CMAC)](#java-cmac_5)
+ [Funciones de acuerdo de claves](#java-key-derivation_5)
+ [Conversión de las claves en especificaciones clave con generadores de claves](#java-key-factories)
+ [Notas del mecanismo](#w2aac25c21c25c15c23)

## Generación de funciones de claves y pares de claves
<a name="java-gen-key-pairs-5"></a>

La biblioteca de AWS CloudHSM software para Java le permite utilizar las siguientes operaciones para generar funciones de claves y de pares de claves.
+ `RSA`
+ `EC`
+ `AES`
+ `DESede (Triple DES)`consulte la nota [1](#java-gen-key-pairs-5-note-1)
+ `GenericSecret`

## Funciones de cifrado
<a name="java-ciphers_5"></a>

La biblioteca de AWS CloudHSM software para Java admite las siguientes combinaciones de algoritmo, modo y relleno.


| Algoritmo | Mode | Rellenado | Notas | 
| --- | --- | --- | --- | 
| AES | CBC |  `AES/CBC/NoPadding` `AES/CBC/PKCS5Padding`  |  Implementa `Cipher.ENCRYPT_MODE` y `Cipher.DECRYPT_MODE`. Implementa `Cipher.UNWRAP_MODE for AES/CBC NoPadding`  | 
| AES | ECB |  `AES/ECB/PKCS5Padding` `AES/ECB/NoPadding`  | Implementa `Cipher.ENCRYPT_MODE` y `Cipher.DECRYPT_MODE`.  | 
| AES | CTR |  `AES/CTR/NoPadding`  |  Implementa `Cipher.ENCRYPT_MODE` y `Cipher.DECRYPT_MODE`.  | 
| AES | GCM | `AES/GCM/NoPadding` | Implementa `Cipher.WRAP_MODE`, `Cipher.UNWRAP_MODE`, `Cipher.ENCRYPT_MODE` y `Cipher.DECRYPT_MODE`.Al realizar el cifrado AES-GCM, el HSM no tiene en cuenta el vector de inicialización (IV) de la solicitud y utiliza un IV que él mismo genera. Una vez que se ha completado la operación, deberá llamar a `Cipher.getIV()` para obtener el IV. | 
| AESWrap | ECB |  `AESWrap/ECB/NoPadding` `AESWrap/ECB/PKCS5Padding` `AESWrap/ECB/ZeroPadding`  | Implementa `Cipher.WRAP_MODE` y `Cipher.UNWRAP_MODE`.  | 
| DESede (Triple DES) | CBC |  `DESede/CBC/PKCS5Padding` `DESede/CBC/NoPadding`  |  Implementa `Cipher.ENCRYPT_MODE` y `Cipher.DECRYPT_MODE`. Consulte la nota [1](#java-gen-key-pairs-5-note-1) que aparece a continuación para ver los próximos cambios.  | 
| DESede (Triple DES) | ECB |  `DESede/ECB/NoPadding` `DESede/ECB/PKCS5Padding`  | Implementa `Cipher.ENCRYPT_MODE` y `Cipher.DECRYPT_MODE`. Consulte la nota [1](#java-gen-key-pairs-5-note-1) que aparece a continuación para ver los próximos cambios.  | 
| RSA | ECB | `RSA/ECB/PKCS1Padding`**consulte la nota [1](#java-gen-key-pairs-5-note-1)** `RSA/ECB/OAEPPadding` `RSA/ECB/OAEPWithSHA-1ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-224ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-256ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-384ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-512ANDMGF1Padding`  |  Implementa `Cipher.WRAP_MODE`, `Cipher.UNWRAP_MODE`, `Cipher.ENCRYPT_MODE` y `Cipher.DECRYPT_MODE`.  | 
| RSA | ECB | `RSA/ECB/NoPadding` |  Implementa `Cipher.ENCRYPT_MODE` y `Cipher.DECRYPT_MODE`.  | 
| RSAAESWrap | ECB |  `RSAAESWrap/ECB/OAEPPadding` `RSAAESWrap/ECB/OAEPWithSHA-1ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-224ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-256ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-384ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-512ANDMGF1Padding`  | Implementa `Cipher.WRAP_MODE` y `Cipher.UNWRAP_MODE`.  | 

## Firma y comprobación de las funciones
<a name="java-sign-verify_5"></a>

La biblioteca de AWS CloudHSM software para Java admite los siguientes tipos de firma y verificación. Con el SDK 5 de cliente y los algoritmos de firma con hash, los datos se codifican localmente en el software antes de enviarlos al HSM para su firma o comprobación. Esto significa que no hay límite en cuanto al tamaño de los datos que el SDK puede codificar.

**Tipos de firma RSA**
+ `NONEwithRSA`
+ `RSASSA-PSS`
+ `SHA1withRSA`
+ `SHA1withRSA/PSS`
+ `SHA1withRSAandMGF1`
+ `SHA224withRSA`
+ `SHA224withRSAandMGF1`
+ `SHA224withRSA/PSS`
+ `SHA256withRSA`
+ `SHA256withRSAandMGF1`
+ `SHA256withRSA/PSS`
+ `SHA384withRSA`
+ `SHA384withRSAandMGF1`
+ `SHA384withRSA/PSS`
+ `SHA512withRSA`
+ `SHA512withRSAandMGF1`
+ `SHA512withRSA/PSS`

**Tipos de firma ECDSA**
+ `NONEwithECDSA`
+ `SHA1withECDSA`
+ `SHA224withECDSA`
+ `SHA256withECDSA`
+ `SHA384withECDSA`
+ `SHA512withECDSA`

## Funciones Digest
<a name="java-digests_5"></a>

La biblioteca de AWS CloudHSM software para Java admite los siguientes resúmenes de mensajes. Con SDK 5 de cliente, los datos se codifican localmente en el software. Esto significa que no hay límite en cuanto al tamaño de los datos que el SDK puede codificar.
+ `SHA-1`
+ `SHA-224`
+ `SHA-256`
+ `SHA-384`
+ `SHA-512`

## Funciones de código de autenticación de mensajes basado en hash (HMAC).
<a name="java-mac_5"></a>

La biblioteca AWS CloudHSM de software para Java admite los siguientes algoritmos HMAC.
+ `HmacSHA1` (Tamaño máximo de datos en bytes: 16288)
+ `HmacSHA224` (Tamaño máximo de datos en bytes: 16256)
+ `HmacSHA256` (Tamaño máximo de datos en bytes: 16288)
+ `HmacSHA384` (Tamaño máximo de datos en bytes: 16224)
+ `HmacSHA512` (Tamaño máximo de datos en bytes: 16224)

## Funciones de código de autenticación de mensajes basados en cifrado (CMAC)
<a name="java-cmac_5"></a>

CMACs (Códigos de autenticación de mensajes cifrados) crean códigos de autenticación de mensajes (MACs) mediante un cifrado por bloques y una clave secreta. Se diferencian de ellos HMACs en que utilizan un método de clave simétrica de bloques en MACs lugar de un método de hash.

La biblioteca AWS CloudHSM de software para Java admite los siguientes algoritmos CMAC.
+ `AESCMAC`

## Funciones de acuerdo de claves
<a name="java-key-derivation_5"></a>

La biblioteca AWS CloudHSM de software para Java es compatible con ECDH con funciones de derivación clave (KDF). Se admiten los siguientes tipos de KDF:
+ `ECDHwithX963SHA1KDF`Soporta el algoritmo KDF X9.63 SHA1 [2](#kdf2)
+ `ECDHwithX963SHA224KDF`Soporta el algoritmo KDF X9.63 SHA224 [2](#kdf2)
+ `ECDHwithX963SHA256KDF`Soporta el algoritmo KDF X9.63 SHA256 [2](#kdf2)
+ `ECDHwithX963SHA384KDF`Soporta el algoritmo KDF X9.63 SHA384 [2](#kdf2)
+ `ECDHwithX963SHA512KDF`Soporta el algoritmo KDF X9.63 SHA512 [2](#kdf2)

## Conversión de las claves en especificaciones clave con generadores de claves
<a name="java-key-factories"></a>

Puede utilizar las fábricas clave para convertir las claves en especificaciones clave. AWS CloudHSM tiene dos tipos de fábricas clave para JCE:

**SecretKeyFactory:** Se utiliza para importar o derivar claves simétricas. Con SecretKeyFactory él, puede pasar una clave compatible o una clave compatible KeySpec para importar o derivar claves simétricas. AWS CloudHSM Las siguientes son las especificaciones compatibles para KeyFactory:
+  SecretKeyFactoryEl `generateSecret` método de For admite [KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html)las siguientes clases:
  + **KeyAttributesMap**se puede usar para importar bytes de una clave con atributos adicionales como clave de CloudHSM. Puede encontrar un ejemplo [aquí](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java).
  + **[SecretKeySpec](https://docs.oracle.com/javase/8/docs/api/javax/crypto/spec/SecretKeySpec.html)**se puede usar para importar una especificación de clave simétrica como clave de CloudHSM.
  + **AesCmacKdfParameterSpec**se puede utilizar para derivar claves simétricas mediante otra clave AES de CloudHSM.

**nota**  
SecretKeyFactory[El `translateKey` método utiliza cualquier clave que implemente la interfaz clave.](https://docs.oracle.com/javase/8/docs/api/java/security/Key.html)

**KeyFactory:** Se utiliza para importar claves asimétricas. Con KeyFactory él, puede pasar una clave compatible o se puede importar una clave asimétrica KeySpec a ella. AWS CloudHSM Para obtener más información, consulte los siguientes recursos:
+ Para KeyFactory el `generatePublic` método de For, se admiten [KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html)las siguientes clases:
+  KeyAttributesMap CloudHSM para RSA y EC, que incluye: KeyTypes
  +  KeyAttributesMap CloudHSM para el público de RSA y EC. KeyTypes Puede encontrar un ejemplo [aquí](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java).
  + [X509 EncodedKeySpec para clave](https://docs.oracle.com/javase/8/docs/api/java/security/spec/X509EncodedKeySpec.html) pública RSA y EC
  + [RSAPublicKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPublicKeySpec.html)para clave pública RSA
  + [ECPublicKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/ECPublicKeySpec.html)para la clave pública EC
+ Para KeyFactory el `generatePrivate` método de For, se admiten [KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html)las siguientes clases:
+  KeyAttributesMap CloudHSM para RSA y EC, que incluye: KeyTypes
  +  KeyAttributesMap CloudHSM para el público de RSA y EC. KeyTypes Puede encontrar un ejemplo [aquí](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java).
  + [PKCS8EncodedKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/PKCS8EncodedKeySpec.html)para claves privadas de EC y RSA
  + [RSAPrivateCrtKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPrivateCrtKeySpec.html)para clave privada RSA
  + [ECPrivateKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/ECPrivateKeySpec.html)para la clave privada EC

Para KeyFactory el `translateKey` método, incluye cualquier clave que implemente la [interfaz clave](https://docs.oracle.com/javase/8/docs/api/java/security/Key.html).

## Notas del mecanismo
<a name="w2aac25c21c25c15c23"></a>

[1] De acuerdo con las directrices del NIST, esto no se permite en los clústeres en modo FIPS después de 2023. En el caso de los clústeres en modo no FIPS, seguirá siendo posible después de 2023. Para obtener más información, consulte [Cumplimiento de la normativa FIPS 140: anulación de mecanismo 2024](compliance-dep-notif.md#compliance-dep-notif-1).

[2] Las funciones de derivación de claves (KDFs) se especifican en la [publicación especial 800-56A del NIST](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf), revisión 3.

# Atributos clave de Java compatibles con AWS CloudHSM Client SDK 5
<a name="java-lib-attributes_5"></a>

En este tema se proporciona información sobre los atributos clave de Java compatibles con el AWS CloudHSM Client SDK 5. Este tema describe cómo puede utilizar una extensión propia para el proveedor JCE para establecer atributos de clave. Utilice esta extensión para establecer los atributos de clave admitidos y sus valores durante estas operaciones:
+ Generación de claves
+ Importación de claves

Para ver ejemplos de cómo utilizar los atributos de clave, consulte [Ejemplos de código de la biblioteca de AWS CloudHSM software para Java for Client SDK 5](java-samples.md).

**Topics**
+ [Descripción de los atributos](#java-understanding-attributes_5)
+ [Atributos de admitidos](#java-attributes_5)
+ [Configuración de atributos para claves](#java-setting-attributes_5)

## Descripción de los atributos
<a name="java-understanding-attributes_5"></a>

Los atributos de clave se utilizan para especificar qué acciones se permiten en objetos relacionados con las claves, como claves públicas, privadas o secretas. Los atributos y valores de clave se definen durante las operaciones de creación de objetos de clave. 

Sin embargo, Java Cryptography Extension (JCE) no especifica cómo deben establecerse los valores de los atributos de clave, por lo que, de forma predeterminada, se permiten la mayoría de las acciones. Por el contrario, el estándar PKCS \$111 define un completo conjunto de atributos con valores predeterminados más restrictivos. Empezando por el proveedor JCE 3.1, AWS CloudHSM proporciona una extensión patentada que permite establecer valores más restrictivos para los atributos de uso común. 

## Atributos de admitidos
<a name="java-attributes_5"></a>

Puede establecer valores para los atributos que aparecen en la tabla siguiente. Es recomendable que solamente establezca valores para los atributos que desee hacer más restrictivos. Si no especifica ningún valor, AWS CloudHSM utiliza el valor predeterminado que se especifica en la tabla siguiente. Las celdas vacías de la columna «Valor predeterminado» indican que no hay ningún valor predeterminado específico asignado al atributo.


****  

| Atributo | Valor predeterminado | Notas |  | Clave simétrica | Clave pública del par de claves | Clave privada del par de claves |  | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| DECRYPT | TRUE |  | TRUE | True indica que la clave se puede utilizar para descifrar cualquier búfer. Por lo general, esto se establece como FALSE para una clave cuya propiedad WRAP está configurada como true.  | 
| DERIVE |  |  |  | Permite utilizar una clave para derivar otras claves. | 
| ENCRYPT | TRUE | TRUE |  | True indica que la clave se puede utilizar para cifrar cualquier búfer. | 
| EXTRACTABLE | TRUE |  | TRUE | True indica que esta clave se puede exportar fuera del HSM. | 
| ID |  |  |  | Un valor definido por el usuario que se utiliza para identificar la clave. | 
| KEY\$1TYPE |  |  |  | Se utiliza para identificar el tipo de clave (AES DESede, secreto genérico, EC o RSA). | 
| LABEL |   |  |  | Una cadena definida por el usuario que le permite identificar cómodamente las claves de su HSM. Para seguir las mejores prácticas, utilice una etiqueta única para cada clave para que sea más fácil encontrarla más adelante. | 
| LOCAL |  |  |  | Indica una clave generada por el HSM. | 
| OBJECT\$1CLASS |  |  |  | Se utiliza para identificar la clase de objeto de una clave (SecretKey, PublicKey o PrivateKey). | 
| PRIVATE | TRUE | TRUE | TRUE | True indica que es posible que los usuarios no tengan acceso a la clave hasta que se autentiquen. Para mayor claridad, los usuarios no pueden acceder a ninguna clave AWS CloudHSM hasta que se hayan autenticado, incluso si este atributo está establecido en FALSE. | 
| SIGN | TRUE |  | TRUE | True indica que la clave se puede utilizar para firmar un resumen del mensaje. Normalmente, se utiliza el valor FALSE con las claves públicas y privadas que se han archivado. | 
| SIZE |  |  |  | Atributo que define el tamaño de una clave. Para obtener más información sobre los tamaños de clave compatibles, consulte [Mecanismos compatibles con SDK 5 de cliente](https://docs.aws.amazon.com/cloudhsm/latest/userguide/java-lib-supported_5.html#java-keys_5). | 
| TOKEN | FALSE | FALSE | FALSE |  Una clave permanente que se replica HSMs en todo el clúster y se incluye en las copias de seguridad. TOKEN = FALSE implica el uso de una clave efímera, que se borra automáticamente cuando se interrumpe la conexión con ese HSM o se cierra la sesión.  | 
| UNWRAP | TRUE |  | TRUE | True indica que la clave se puede utilizar para desencapsular (importar) otra clave. | 
| VERIFY | TRUE | TRUE |  | True indica que la clave se puede utilizar para verificar una firma. Normalmente, se utiliza el valor FALSE con las claves privadas. | 
| WRAP | TRUE | TRUE |  | True indica que la clave se puede utilizar para encapsular otra clave. Por lo general, se utilizará el valor FALSE con las claves privadas. | 
| WRAP\$1WITH\$1TRUSTED | FALSE |  | FALSE | Si su valor es verdadero, indica que una clave solo se puede encapsular y desencapsular con claves que tengan el atributo TRUSTED establecido en true. Una vez que una clave se establece como WRAP\$1WITH\$1TRUSTED, ese atributo es de solo lectura y no se puede establecer como false. Para obtener más información sobre el encapsulamiento de claves de confianza, consulte [Uso de claves de confianza para controlar el desencapsulamiento de claves](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_using_trusted_keys_control_key_wrap.html). | 

**nota**  
La compatibilidad con los atributos de la biblioteca PKCS \$111 es más amplia. Para obtener más información, consulte [Atributos de PKCS \$111 admitidos](pkcs11-attributes.md).

## Configuración de atributos para claves
<a name="java-setting-attributes_5"></a>

`KeyAttributesMap` es un objeto similar a Java Map, que puede usar para establecer valores de atributo en los objetos de clave. Los métodos de la función `KeyAttributesMap` son iguales que los métodos que se utilizan para manipular mapas de Java. 

Si desea establecer valores personalizados en los atributos, tiene dos opciones:
+ Utilizar los métodos que se indican en la tabla siguiente
+ Utilizar los modelos de Builder que se ilustran más adelante en este documento

Los objetos de mapa de atributos admiten los siguientes métodos para establecer atributos:


****  

| Operación | Valor de retorno | Método de `KeyAttributesMap` | 
| --- | --- | --- | 
| Obtener el valor de un atributo de clave para una clave existente | Objeto (que contiene el valor) o null |  **get**(keyAttribute)  | 
| Rellenar el valor de un atributo de clave  | Valor anterior asociado con el atributo de clave o null si no había ninguna asignación de un atributo de clave |  **put**(keyAttribute, valor)  | 
| Rellenar valores en varios atributos de clave | N/A |  **PuTall** () keyAttributesMap  | 
| Eliminar un par clave-valor del mapa de atributos |  Valor anterior asociado con el atributo de clave o *null* si no había ninguna asignación de un atributo de clave  |  **remove**(keyAttribute)  | 

**nota**  
Los atributos que no se especifican explícitamente se establecen en los valores predeterminados que se indican en la tabla anterior de [Atributos de admitidos](#java-attributes_5). 

### Configuración de atributos para un par de claves
<a name="java-setting-attributes-key-pair"></a>

Utilice la clase `KeyPairAttributesMap` de Java para administrar los atributos de clave de un par de claves. `KeyPairAttributesMap` encapsula dos objetos `KeyAttributesMap`: uno para una clave pública y otro para una clave privada.

Para establecer por separado atributos específicos en la clave pública y en la clave privada, puede utilizar el método `put()` en el objeto de mapa `KeyAttributes` que corresponda a esa clave. Utilice el método `getPublic()` para recuperar el mapa de atributos de la clave pública y utilice `getPrivate()` para recuperar el mapa de atributos de la clave privada. Puede rellenar el valor de varios atributos de clave a la vez tanto de pares de claves públicas como de pares de claves privadas utilizando `putAll()` con un mapa de atributos de pares de claves como argumento.

# Ejemplos de código de la biblioteca de AWS CloudHSM software para Java for Client SDK 5
<a name="java-samples"></a>

En este tema, se proporcionan recursos e información sobre ejemplos de código de Java para Client SDK 5 del AWS CloudHSM .

## Requisitos previos
<a name="java-samples-prereqs_5"></a>

 Antes de ejecutar las muestras, debe configurar el entorno:
+ Instale y configure el [Proveedor de la Extensión Criptográfica de Java (JCE)](java-library-install_5.md#install-java-library_5). 
+ Configure un [nombre de usuario y contraseña de HSM](manage-hsm-users.md) válidos. Los permisos del usuario criptográfico (CU) son suficientes para estas tareas. La aplicación utiliza estas credenciales para iniciar sesión en el HSM en cada ejemplo.
+ Decida cómo proporcionar las credenciales al [proveedor de JCE](java-library-install_5.md#java-library-credentials_5).

## Ejemplos de código
<a name="java-samples-code_5"></a>

Los siguientes ejemplos de código muestran cómo utilizar el [proveedor de JCE de AWS CloudHSM](java-library.md) para realizar tareas básicas. Hay más ejemplos de código disponibles en [GitHub](https://github.com/aws-samples/aws-cloudhsm-jce-examples/tree/sdk5).
+ [Inicio de sesión en un HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java)
+ [Administración de claves](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)
+ [Generación de claves simétricas](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/SymmetricKeys.java)
+ [Generación de claves asimétricas](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AsymmetricKeys.java)
+ [Cifrado y descifrado con AES-GCM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AESGCMEncryptDecryptRunner.java)
+ [Cifrado y descifrado con AES-CTR](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AESCTREncryptDecryptRunner.java)
+ [Encripta y descifra con DESede -ECB](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/DESedeECBEncryptDecryptRunner.java) (ver nota) [1](#java-samples-code-5-note-1)
+ [Firma y verificación con claves RSA](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/RSAOperationsRunner.java)
+ [Firma y verificación con claves de EC](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/ECOperationsRunner.java)
+ [Usar atributos clave admitidos](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyAttributesRunner.java)
+ [Uso del almacén de claves de CloudHSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyStoreExampleRunner.java)

[1] De acuerdo con las directrices del NIST, esto no se permite en los clústeres en modo FIPS después de 2023. En el caso de los clústeres en modo no FIPS, seguirá siendo posible después de 2023. Para obtener más información, consulte [Cumplimiento de la normativa FIPS 140: anulación de mecanismo 2024](compliance-dep-notif.md#compliance-dep-notif-1).

# AWS CloudHSM Proveedor de ICE Javadocs
<a name="java-javadocs_5"></a>

Utilice Javadoc, el proveedor de JCE, para obtener información de uso sobre los tipos y métodos de Java definidos en el SDK JCE de AWS CloudHSM. Para descargar los Javadocs más recientes AWS CloudHSM, consulte la [AWS CloudHSM última versión del SDK de cliente](latest-releases.md) sección de la página de descargas.

Puede importar Javadocs a un entorno de desarrollo integrado (IDE) o visualizarlas en un navegador web.

# AWS CloudHSM KeyStore Clase Java para Client SDK 5
<a name="alternative-keystore_5"></a>

La AWS CloudHSM `KeyStore` clase proporciona un almacén de PKCS12 claves para fines especiales. Este almacén de claves puede almacenar certificados junto con datos de la clave y relacionar estos certificados con los datos de clave que están almacenados en AWS CloudHSM. La AWS CloudHSM `KeyStore` clase implementa la interfaz de proveedor `KeyStore` de servicios (SPI) de la extensión de criptografía de Java (JCE). [Para obtener más información sobre su uso`KeyStore`, consulte Class. KeyStore](https://devdocs.io/openjdk~8/java/security/keystore)

**nota**  
Dado que los certificados son información pública y, para maximizar la capacidad de almacenamiento de las claves criptográficas, no AWS CloudHSM admite el almacenamiento de certificados en HSMs ellos.

## Elija el almacén de claves adecuado para AWS CloudHSM Client SDK 5
<a name="choosing_keystore_5"></a>

El proveedor de AWS CloudHSM Java Cryptographic Extension (JCE) ofrece un AWS CloudHSM específico. KeyStore La AWS CloudHSM `KeyStore` clase admite la transferencia de operaciones clave al HSM, el almacenamiento local de certificados y las operaciones basadas en certificados.

Cargue el CloudHSM de uso especial de la siguiente manera: KeyStore 

```
KeyStore ks = KeyStore.getInstance("CloudHSM")
```

## Inicialice el SDK 5 del cliente AWS CloudHSM KeyStore
<a name="initialize_cloudhsm_keystore_5"></a>

Inicie sesión de AWS CloudHSM KeyStore la misma forma en que inicia sesión en el proveedor de JCE. Puede usar variables de entorno o el archivo de propiedades del sistema, y debe iniciar sesión antes de empezar a usar CloudHSM KeyStore. Para ver un ejemplo de inicio de sesión en un HSM mediante el proveedor JCE, consulte [Inicio de sesión en un HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java).

Si lo desea, puede especificar una contraseña para cifrar el PKCS12 archivo local que contiene los datos del almacén de claves. Al crear el AWS CloudHSM almacén de claves, se establece la contraseña y se la proporciona cuando se utilizan los métodos load, set y get.

Cree una instancia de un nuevo objeto KeyStore CloudHSM de la siguiente manera:

```
ks.load(null, null);
```

Para escribir los datos del almacén de claves en un archivo, utilice el método `store`. A partir de ese momento, puede cargar el almacén de claves existente utilizando el método `load` con el archivo de origen y la contraseña de la siguiente manera: 

```
ks.load(inputStream, password);
```

## Utilice nuestro SDK de cliente 5 AWS CloudHSM KeyStore AWS CloudHSM
<a name="using_cloudhsm_keystore_5"></a>

AWS CloudHSM KeyStore cumple con la KeyStore especificación de la [clase](https://devdocs.io/openjdk~8/java/security/keystore) JCE y proporciona las siguientes funciones.
+ `load`

  Carga el almacén de claves a partir de la secuencia de entrada especificada. Si se estableció una contraseña al guardar el almacén de claves, debe proporcionarse esta misma contraseña para que la carga se realice correctamente. Establezca los dos parámetros en null para inicializar un nuevo almacén de claves vacío.

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  ks.load(inputStream, password);
  ```
+ `aliases`

  Devuelve una enumeración de los nombres de alias de todas las entradas de la instancia especificada del almacén de claves. Los resultados incluyen los objetos almacenados localmente en el PKCS12 archivo y los objetos que residen en el HSM. 

  **Código de muestra:**

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  for(Enumeration<String> entry = ks.aliases(); entry.hasMoreElements();) {    
      String label = entry.nextElement();    
      System.out.println(label);
  }
  ```
+ `containsalias`

  Devuelve true si el almacén de claves tiene acceso al menos a un objeto con el alias especificado. El almacén de claves comprueba los objetos almacenados localmente en el PKCS12 archivo y los objetos que residen en el HSM.
+ `deleteEntry`

  Elimina una entrada de certificado del archivo local PKCS12 . No se permite eliminar los datos clave almacenados en un HSM mediante el. AWS CloudHSM KeyStore Puede eliminar las claves mediante el método `destroy` de la interfaz [Destruible](https://devdocs.io/openjdk~8/javax/security/auth/destroyable#destroy--).

  ```
  ((Destroyable) key).destroy();
  ```
+ `getCertificate`

  Devuelve el certificado asociado a un alias, si está disponible. Si el alias no existe o hace referencia a un objeto que no es un certificado, la función devuelve NULL. 

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  Certificate cert = ks.getCertificate(alias);
  ```
+ `getCertificateAlias`

  Devuelve el nombre (alias) de la primera entrada del almacén de claves cuyos datos coinciden con el certificado especificado. 

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  String alias = ks.getCertificateAlias(cert);
  ```
+ `getCertificateChain`

  Devuelve la cadena de certificados asociada con el alias especificado. Si el alias no existe o hace referencia a un objeto que no es un certificado, la función devuelve NULL. 
+ `getCreationDate`

  Devuelve la fecha de creación de la entrada identificada por el alias especificado. Si no hay disponible ninguna fecha de creación, la función devuelve la fecha en la que el certificado pasó a ser válido.
+ `getKey`

  GetKey se pasa al HSM y devuelve un objeto clave correspondiente a la etiqueta dada. Como consulta `getKey` directamente al HSM, se puede utilizar para cualquier clave del HSM, independientemente de si fue generada por el. KeyStore 

  ```
  Key key = ks.getKey(keyLabel, null);
  ```
+ `isCertificateEntry`

  Comprueba si la entrada con el alias especificado representa una entrada de certificado. 
+ `isKeyEntry`

  Comprueba si la entrada con el alias especificado representa una entrada de clave. La acción busca el alias tanto en el PKCS12 archivo como en el HSM. 
+ `setCertificateEntry`

  Asigna el certificado especificado al alias proporcionado. Si el alias proporcionado ya se utiliza para identificar una clave o un certificado, se inicia una excepción `KeyStoreException`. Puede utilizar el código JCE para obtener el objeto clave y, a continuación, utilizar el KeyStore `SetKeyEntry` método para asociar el certificado a la clave.
+ `setKeyEntry` con una clave `byte[]`

  **Actualmente, esta API no es compatible con SDK 5 de cliente.**
+ `setKeyEntry` con un objeto `Key`

  Asigna la clave especificada al alias proporcionado y la almacena dentro del HSM. Si la clave aún no existe en el HSM, se importará al HSM como una clave de sesión extraíble.

  Si el objeto `Key` es de tipo `PrivateKey`, debe ir acompañado de la cadena de certificados correspondiente. 

  Si el alias ya existe, la llamada a `SetKeyEntry` inicia una excepción `KeyStoreException` y evita que la clave se sobrescriba. Si es necesario sobrescribir la clave, utilice KMU o JCE para ese propósito. 
+ `engineSize`

  Devuelve el número de entradas del almacén de claves.
+ `store`

  Almacena el almacén de claves del flujo de salida dado como un PKCS12 archivo y lo protege con la contraseña proporcionada. Además, conserva todas las claves cargadas (que se establecen mediante llamadas a `setKey`).

# Configuraciones avanzadas para AWS CloudHSM JCE for Client SDK 5
<a name="java-lib-configs"></a>

El proveedor de AWS CloudHSM JCE incluye las siguientes configuraciones avanzadas, que no forman parte de las configuraciones generales que utilizan la mayoría de los clientes.
+ [Conexión a múltiples clústeres](java-lib-configs-multi.md)
+ [Extracción de claves mediante JCE](java-lib-configs-getencoded.md)
+ [Vuelva a intentar la configuración del JCE](java-lib-configs-retry.md).

# Conexión a varios AWS CloudHSM clústeres con el proveedor de JCE
<a name="java-lib-configs-multi"></a>

Esta configuración permite que una sola instancia de cliente se comunique con varios clústeres de AWS CloudHSM . En comparación con tener una sola instancia que solo se comunique con un único clúster, esta característica puede suponer un ahorro de costos en algunos casos de uso. La `CloudHsmProvider` clase es AWS CloudHSM la implementación de la [clase Provider de Java Security](https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html). Cada instancia de esta clase representa una conexión a todo el AWS CloudHSM clúster. Cree una instancia de esta clase y añádala a la lista de proveedores de seguridad de Java para poder interactuar con ella mediante clases de JCE estándar.

En el siguiente ejemplo, se crea una instancia de esta clase y se añade a la lista de proveedores de seguridad de Java:

```
if (Security.getProvider(CloudHsmProvider.PROVIDER_NAME) == null) {
    Security.addProvider(new CloudHsmProvider());
}
```

`CloudHsmProvider` puede configurarse de dos formas:

1. Configurar con un archivo (configuración predeterminada)

1. Configuración mediante código

En los siguientes temas, se describen estas configuraciones y cómo conectarse a varios clústeres.

**Topics**
+ [Configurar la clase `CloudHsmProvider` de AWS CloudHSM con un archivo (configuración predeterminada)](java-lib-configs-default.md)
+ [Configurar la clase `CloudHsmProvider` de AWS CloudHSM con un código](java-lib-configs-using-code.md)
+ [Conéctese a varios AWS CloudHSM clústeres](java-lib-connecting-to-multiclusters.md)

# Configurar la clase `CloudHsmProvider` de AWS CloudHSM con un archivo (configuración predeterminada)
<a name="java-lib-configs-default"></a>

La forma predeterminada de configurar la AWS CloudHSM `CloudHsmProvider` clase es con un archivo.

Al iniciar `CloudHsmProvider` con el constructor predeterminado, de forma predeterminada buscará el archivo de configuración en la ruta `/opt/cloudhsm/etc/cloudhsm-jce.cfg` en Linux. Este archivo de configuración se puede configurar usando `configure-jce`. 

Un objeto creado con el constructor predeterminado utilizará el nombre de proveedor de CloudHSM predeterminado `CloudHSM`. El nombre del proveedor es útil para interactuar con el JCE y decirle qué proveedor debe utilizar para las distintas operaciones. A continuación, se muestra un ejemplo de cómo utilizar el nombre del proveedor de CloudHSM para la operación de cifrado:

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHSM");
```

# Configurar la clase `CloudHsmProvider` de AWS CloudHSM con un código
<a name="java-lib-configs-using-code"></a>

A partir de la versión 5.8.0 del SDK de cliente, también puede configurar la AWS CloudHSM `CloudHsmProvider` clase mediante código Java. La forma de hacerlo es utilizando un objeto de clase `CloudHsmProviderConfig`. Puede construir este objeto utilizando `CloudHsmProviderConfigBuilder`. 

`CloudHsmProvider` tiene otro constructor que toma el objeto `CloudHsmProviderConfig`, como se muestra en el siguiente ejemplo.

**Example**  

```
CloudHsmProviderConfig config = CloudHsmProviderConfig.builder()  
                                    .withCluster(  
                                        CloudHsmCluster.builder()  
                                            .withHsmCAFilePath(hsmCAFilePath)
                                            .withClusterUniqueIdentifier("CloudHsmCluster1")
        .withServer(CloudHsmServer.builder().withHostIP(hostName).build())  
                        .build())  
        .build();
CloudHsmProvider provider = new CloudHsmProvider(config);
```

En este ejemplo, el nombre del proveedor JCE es `CloudHsmCluster1`. Este es el nombre que la aplicación puede utilizar posteriormente para interactuar con JCE.

**Example**  

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHsmCluster1");
```

Como alternativa, las aplicaciones también pueden usar el objeto de proveedor creado anteriormente para que JCE sepa que debe usar ese proveedor para la operación:

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider);
```

Si no se especifica un identificador único con el método de `withClusterUniqueIdentifier`, se crea para usted un nombre de proveedor generado aleatoriamente. Para obtener este identificador generado aleatoriamente, las aplicaciones pueden llamar `provider.getName()` para obtener el identificador.

# Conéctese a varios AWS CloudHSM clústeres
<a name="java-lib-connecting-to-multiclusters"></a>

Cada uno `CloudHsmProvider` representa una conexión a su AWS CloudHSM clúster. Si desea comunicarse con otro clúster desde la misma aplicación, puede crear otro objeto de `CloudHsmProvider` con las configuraciones del otro clúster e interactuar con este otro clúster mediante el objeto del proveedor o el nombre del proveedor, como se muestra en el siguiente ejemplo.

**Example**  

```
CloudHsmProviderConfig config = CloudHsmProviderConfig.builder()  
                                    .withCluster(  
                                        CloudHsmCluster.builder()  
                                            .withHsmCAFilePath(hsmCAFilePath)
                                            .withClusterUniqueIdentifier("CloudHsmCluster1")
        .withServer(CloudHsmServer.builder().withHostIP(hostName).build())  
                        .build())  
        .build();
CloudHsmProvider provider1 = new CloudHsmProvider(config);

if (Security.getProvider(provider1.getName()) == null) {
    Security.addProvider(provider1);
}

CloudHsmProviderConfig config2 = CloudHsmProviderConfig.builder()  
                                    .withCluster(  
                                        CloudHsmCluster.builder()  
                                            .withHsmCAFilePath(hsmCAFilePath2)
                                            .withClusterUniqueIdentifier("CloudHsmCluster2")
        .withServer(CloudHsmServer.builder().withHostIP(hostName2).build())  
                        .build())  
        .build();
CloudHsmProvider provider2 = new CloudHsmProvider(config2);

if (Security.getProvider(provider2.getName()) == null) {
    Security.addProvider(provider2);
}
```

Una vez que haya configurado los dos proveedores (ambos clústeres) anteriores, podrá interactuar con ellos mediante el objeto del proveedor o mediante el nombre del proveedor. 

Ampliando este ejemplo que muestra cómo hablar con`cluster1`, puede utilizar el siguiente ejemplo para una AES/GCM/NoPadding operación:

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider1);
```

Y en la misma aplicación para generar la clave «AES» en el segundo clúster con el nombre del proveedor, también puede usar el siguiente ejemplo:

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider2.getName());
```

# Extracción de claves mediante JCE para AWS CloudHSM
<a name="java-lib-configs-getencoded"></a>

La extensión de criptografía de Java (JCE) utiliza una arquitectura que permite conectar diferentes implementaciones de criptografía. AWS CloudHSM envía uno de esos proveedores de JCE que transfiere las operaciones criptográficas al HSM. Para que la mayoría de los demás proveedores de JCE trabajen con claves almacenadas en AWS CloudHSM, deben extraer los bytes clave del texto sin cifrar y llevarlos a la memoria HSMs de la máquina para su uso. HSMs por lo general, solo permiten extraer las claves como objetos empaquetados, no como texto claro. Sin embargo, para facilitar los casos de uso de la integración entre proveedores, ofrece una opción de configuración opcional que AWS CloudHSM permite extraer los bytes clave en blanco.

**importante**  
JCE transfiere las operaciones a AWS CloudHSM cada vez que se especifique el proveedor de AWS CloudHSM o se utilice un objeto clave. AWS CloudHSM No necesita extraer las claves sin cifrar si espera que la operación se lleve a cabo dentro del HSM. La extracción de claves en texto no cifrado solo es necesaria cuando la aplicación no puede utilizar mecanismos seguros, como encapsular y desencapsular una clave, debido a las restricciones de una biblioteca externa o de un proveedor de JCE. 

De forma predeterminada, el proveedor de AWS CloudHSM JCE permite la extracción de **claves públicas** para que funcionen con proveedores de JCE externos. Siempre se permiten los siguientes métodos:


| Clase | Método | Formato (GetEncoded) | 
| --- | --- | --- | 
| EcPublicKey | getEncoded() | X.509 | 
|  | getW() | N/A | 
| RSAPublicClave | getEncoded() | X.509 | 
|  | getPublicExponent() | N/A | 
| CloudHsmRsaPrivateCrtKey | getPublicExponent() | N/A | 

El proveedor AWS CloudHSM JCE no permite la extracción de los bytes de la clave en blanco para las claves **privadas** o **secretas** de forma predeterminada. Si su caso de uso lo requiere, puede habilitar la extracción de los bytes de claves sin cifrar para claves **privadas** o **secretas** en las siguientes condiciones:

1. El atributo `EXTRACTABLE` para claves privadas y secretas se establece como **true**.
   + De forma predeterminada, el atributo `EXTRACTABLE` de las claves privadas y secretas está establecido como **true**. Las claves de `EXTRACTABLE` son claves que se pueden exportar fuera del HSM. Para obtener más información, consulte Atributos de Java admitidos para [SDK 5 de cliente](java-lib-attributes_5.md).

1. El atributo `WRAP_WITH_TRUSTED` para claves privadas y secretas se establece en **false**. 
   + `getEncoded`, `getPrivateExponent` y `getS` no se pueden usar con claves privadas que no se puedan exportar sin cifrar. `WRAP_WITH_TRUSTED` no permite exportar sus claves privadas fuera del HSM de sin cifrar. Para obtener más información, consulte [Cómo usar claves de confianza para controlar el desencapsulamiento de claves](manage-keys-using-trusted-keys.md).

# Permita que el proveedor de JCE extraiga los secretos de las claves privadas de AWS CloudHSM
<a name="get-encoded-take-out-private-keys"></a>

Siga los siguientes pasos para permitir que el proveedor de AWS CloudHSM JCE extraiga sus secretos de clave privada.

**importante**  
Este cambio de configuración permite extraer todos los bytes de claves `EXTRACTABLE` sin procesar del clúster de HSM. Para mejorar la seguridad, debería considerar la posibilidad de utilizar [métodos de encapsulamiento de claves](java-lib-supported_5.md) para extraer la clave del HSM de forma segura. Esto evita la extracción involuntaria de los bytes clave del HSM. 

1. Utilice los siguientes comandos para permitir que sus claves **privadas** o **secretas** se extraigan en JCE:

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/configure-jce --enable-clear-key-extraction-in-software
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --enable-clear-key-extraction-in-software
   ```

------

1. Una vez que habilite la extracción de claves sin cifrar, se habilitarán los siguientes métodos para extraer las claves privadas de la memoria.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/cloudhsm/latest/userguide/get-encoded-take-out-private-keys.html)

Si quiere restaurar el comportamiento predeterminado y no permitir que JCE exporte las claves en formato sin cifrar, ejecute el siguiente comando:

------
#### [ Linux ]

```
$ /opt/cloudhsm/bin/configure-jce --disable-clear-key-extraction-in-software
```

------
#### [ Windows ]

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --disable-clear-key-extraction-in-software
```

------

# Vuelva a intentar los comandos de JCE para AWS CloudHSM
<a name="java-lib-configs-retry"></a>

AWS CloudHSM El SDK de cliente 5.8.0 y las versiones posteriores tienen una estrategia de reintento automático integrada que reintentará las operaciones reguladas por HSM desde el lado del cliente. Cuando un HSM limita las operaciones porque está demasiado ocupado realizando operaciones anteriores y no puede aceptar más solicitudes, el cliente intentará volver a intentar las operaciones restringidas hasta 3 veces y, al mismo tiempo, SDKs retrocederá exponencialmente. Esta estrategia de reintento automático se puede configurar en uno de estos dos modos: **desactivado** y **estándar**.
+ **desactivado**: el SDK de cliente no realizará ninguna estrategia de reintentos para ninguna operación limitada por parte del HSM.
+ **estándar**: este es el modo predeterminado para la versión 5.8.0 y posteriores de SDK de cliente. En este modo, el cliente SDKs volverá a intentar automáticamente las operaciones restringidas y se retrasará exponencialmente.

Para obtener más información, consulte [Limitación de HSM](troubleshoot-hsm-throttling.md).

## Configuración de los comandos de reintento en modo desactivado
<a name="w2aac25c21c25c25c15b9"></a>

------
#### [ Linux ]

**Cómo configurar los comandos de reintento en **off** para SDK 5 de cliente en Linux**
+ Puede utilizar los siguientes comandos para administrar la configuración de reintento en modo **off**:

  ```
  $ sudo /opt/cloudhsm/bin/configure-jce --default-retry-mode off
  ```

------
#### [ Windows ]

**Cómo configurar los comandos de reintento en **off** para SDK 5 de cliente en Windows**
+ Puede utilizar los siguientes comandos para administrar la configuración de reintento en modo **off**:

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --default-retry-mode off
  ```

------

