Clase de Java KeyStore de AWS CloudHSM para Client SDK 3 - AWS CloudHSM

Clase de Java KeyStore de AWS CloudHSM para Client SDK 3

La clase KeyStore de AWS CloudHSM proporciona un almacén de claves PKCS12 para usos especiales que permite obtener acceso a las claves de AWS CloudHSM 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

Como los certificados son información pública, para maximizar la capacidad de almacenamiento de las claves criptográficas, AWS CloudHSM no permite almacenar certificados en los HSM.

La clase KeyStore de AWS CloudHSM implementa la interfaz de proveedor de servicios (SPI) KeyStore de Java Cryptography Extension (JCE). Para obtener más información sobre el uso de KeyStore, consulte Clase KeyStore.

Elegir el almacén de claves adecuado para Client SDK 3 de AWS CloudHSM

El proveedor AWS CloudHSM Java Cryptographic Extension (JCE) incluye por defecto un almacén de claves de paso directo y de solo lectura que transfiere todas las transacciones al HSM: Este almacén de claves predeterminado es distinto del almacén de claves de AWS CloudHSM para usos especiales. En la mayoría de los casos, obtendrá mejor rendimiento en tiempo de ejecución con el valor predeterminado. Solo debe utilizar el almacén de claves de AWS CloudHSM con las aplicaciones en las que es necesario tener compatibilidad con certificados y operaciones basadas en certificados, además de descargar operaciones de claves en el 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 almacén de claves de CloudHSM para usos especiales de la siguiente manera:

KeyStore ks = KeyStore.getInstance("CloudHSM")

Inicializar la KeyStore del AWS CloudHSM para Client SDK 3

Inicie sesión en el almacén de claves de AWS CloudHSM de la misma manera que inicia sesión en el proveedor de JCE. Puede utilizar variables de entorno o el archivo de propiedades del sistema, aunque debe iniciar sesión antes de empezar a usar el almacén de claves de CloudHSM. Para ver un ejemplo de inicio de sesión en un HSM mediante el proveedor JCE, consulte Inicio de sesión en un HSM.

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

Para crear instancias de un nuevo objeto KeyStore de CloudHSM, haga lo siguiente:

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);

Usar la KeyStore de AWS CloudHSM para Client SDK 3 de AWS CloudHSM

El objeto KeyStore de CloudHSM se utiliza generalmente a través de una aplicación de terceros, como jarsigner o keytool. También puede obtener acceso al objeto directamente a través del código.

El objeto KeyStore de AWS CloudHSM se ajusta a la especificación de la clase KeyStore de 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 objetos almacenados localmente en el archivo PKCS12 y objetos residentes 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 archivo PKCS12 y los objetos residentes en el HSM.

  • DeleteEntry

    Elimina una entrada de certificado del archivo PKCS12 local. No se pueden eliminar datos de claves almacenados en un HSM utilizando el objeto KeyStore de AWS CloudHSM. Puede eliminar las claves con la herramienta key_mgmt_util 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 de clave que se corresponde con la etiqueta especificada. Como getKey consulta directamente el HSM, puede utilizarse con cualquier clave del HSM, independientemente de si la generó 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 archivo PKCS12 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 de JCE para obtener el objeto de clave y después utilizar el método SetKeyEntry del almacén de claves 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

    Guarda el almacén de claves en el flujo de salida especificado como un archivo PKCS12 y lo protege con la contraseña proporcionada. Además, conserva todas las claves cargadas (que se establecen mediante llamadas a setKey).