

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

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

**La AWS CloudHSM `KeyStore` clase proporciona un almacén de PKCS12 claves específico que permite el acceso a AWS CloudHSM las claves a través de aplicaciones como **keytool** y jarsigner.** 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. 

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

La AWS CloudHSM `KeyStore` clase implementa la interfaz de proveedor de `KeyStore` 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://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html)

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

El proveedor de la extensión criptográfica de AWS CloudHSM Java (JCE) incluye un almacén de claves de solo lectura y transferencia predeterminado que transfiere todas las transacciones al HSM. Este almacén de claves predeterminado es distinto del almacén de uso especial. AWS CloudHSM KeyStore En la mayoría de los casos, obtendrá mejor rendimiento en tiempo de ejecución con el valor predeterminado. Solo debe usarlo AWS CloudHSM KeyStore para aplicaciones en las que necesite soporte para certificados y operaciones basadas en certificados, además de delegar las operaciones clave al HSM.

Aunque los dos almacenes de claves utilizan el proveedor JCE para las operaciones, son entidades independientes y no intercambian información entre sí. 

Cargue el almacén de claves predeterminado para la aplicación Java de la siguiente manera:

```
KeyStore ks = KeyStore.getInstance("Cavium");
```

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

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

## Inicialice el SDK 3 para Client AWS CloudHSM KeyStore
<a name="initialize_cloudhsm_keystore"></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/master/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 el SDK 3 para el cliente AWS CloudHSM KeyStore AWS CloudHSM
<a name="using_cloudhsm_keystore"></a>

[Por lo general, un objeto KeyStore CloudHSM se utiliza a través de una aplicación de terceros, [como](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jarsigner.html) jarsigner o keytool.](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html) También puede obtener acceso al objeto directamente a través del código. 

AWS CloudHSM KeyStore cumple con la KeyStore especificación de la [clase](https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html) 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 admite la eliminación de datos clave almacenados en un HSM mediante el. AWS CloudHSM KeyStore Puede eliminar las claves con la herramienta [key\_mgmt\_util](https://docs.aws.amazon.com/cloudhsm/latest/userguide/key_mgmt_util.html) de CloudHSM.
+ `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 3 de cliente.**
+ `SetKeyEntry` con un objeto `Key`

  Asigna la clave especificada al alias proporcionado y la almacena dentro del HSM. Si el objeto `Key` no es de tipo `CaviumKey`, la clave se importa en el HSM como 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`).