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.
Migre su proveedor de JCE de AWS CloudHSM Client SDK 3 a Client SDK 5
Use este tema para migrar su proveedor de JCE de Client SDK 3 del AWS CloudHSM a Client SDK 5. Para obtener información sobre las ventajas de la migración, consulte Ventajas del AWS CloudHSM cliente SDK 5.
En AWS CloudHSM, las aplicaciones del cliente realizan operaciones criptográficas mediante el kit de desarrollo de software (SDK) para AWS CloudHSM clientes. Client SDK 5 es el SDK principal al que se le siguen agregando nuevas características y compatibilidad con plataformas.
El proveedor de JCE Client SDK 3 utiliza clases personalizadas APIs que no forman parte de la especificación JCE estándar. Client SDK 5 para el proveedor de JCE cumple con la especificación de JCE y, en determinadas áreas, es incompatible con versiones anteriores de Client SDK 3. Es posible que las aplicaciones del cliente requieran cambios como parte de la migración a Client SDK 5. En esta sección, se describen los cambios requeridos para que la migración se lleve a cabo correctamente.
Para revisar las instrucciones de migración de todos los proveedores, consulte Migración del AWS CloudHSM cliente SDK 3 al cliente 5 SDK.
Temas
Preparación teniendo en cuenta los cambios más importantes
Revise estos cambios importantes y actualice su aplicación en su entorno de desarrollo como corresponde.
La clase y el nombre del proveedor han cambiado
¿Qué ha cambiado? | Descripción anterior de Client SDK 3 | Descripción actual de Client SDK 5 | Ejemplo |
---|---|---|---|
Clase y nombre del proveedor |
La clase de proveedor de JCE en Client SDK 3 se denomina |
En Client SDK 5, la clase de proveedor se denomina |
El inicio de sesión explícito ha cambiado, pero el implícito no
¿Qué ha cambiado? | Descripción anterior de Client SDK 3 | Descripción actual de Client SDK 5 | Ejemplo |
---|---|---|---|
Inicio de sesión explícito |
Client SDK 3 usa la clase |
En Client SDK 5, el proveedor de |
Para ver un ejemplo sobre cómo utilizar el inicio de sesión explícito con Client SDK 5, consulte el LoginRunner ejemplo en el repositorio de ejemplos de AWS GitHub CloudHSM |
Inicio de sesión implícito |
No se requieren cambios para el inicio de sesión implícito. El mismo archivo de propiedades y todas las variables de entorno seguirán funcionando para el inicio de sesión implícito al migrar de Client SDK 3 a Client SDK 5. |
Para ver un ejemplo de cómo usar el inicio de sesión implícito con el SDK de cliente 5, consulte el LoginRunner ejemplo en el AWS CloudHSM GitHub repositorio de ejemplos |
-
[1] Fragmento de código de Client SDK 3:
LoginManager lm = LoginManager.getInstance(); lm.login(partition, user, pass);
-
[2] Fragmento de código de Client SDK 5:
// Construct or get the existing provider object AuthProvider provider = new CloudHsmProvider(); // Call login method on the CloudHsmProvider object // Here loginHandler is a CallbackHandler provider.login(null, loginHandler);
Para ver un ejemplo sobre cómo utilizar el inicio de sesión explícito con Client SDK 5, consulta el LoginRunner ejemplo
en el repositorio AWS CloudHSM GitHub de ejemplos.
La generación de claves ha cambiado
¿Qué ha cambiado? | Descripción anterior de Client SDK 3 | Descripción actual de Client SDK 5 | Ejemplo |
---|---|---|---|
Generación de claves |
En Client SDK 3, |
En Client SDK 5, |
Para ver un ejemplo de cómo |
Generación de pares de claves |
En Client SDK 3, |
En Client SDK 5, |
Para ver un ejemplo de cómo se utiliza |
-
[1] Fragmento de código de generación de claves de Client SDK 3:
KeyGenerator keyGen = KeyGenerator.getInstance("AES", "Cavium"); CaviumAESKeyGenParameterSpec aesSpec = new CaviumAESKeyGenParameterSpec( keySizeInBits, keyLabel, isExtractable, isPersistent); keyGen.init(aesSpec); SecretKey aesKey = keyGen.generateKey();
-
[2] Fragmento de código de generación de claves de Client SDK 5:
KeyGenerator keyGen = KeyGenerator.getInstance("AES", CloudHsmProvider.PROVIDER_NAME); final KeyAttributesMap aesSpec = new KeyAttributesMap(); aesSpec.put(KeyAttribute.LABEL, keyLabel); aesSpec.put(KeyAttribute.SIZE, keySizeInBits); aesSpec.put(KeyAttribute.EXTRACTABLE, isExtractable); aesSpec.put(KeyAttribute.TOKEN, isPersistent); keyGen.init(aesSpec); SecretKey aesKey = keyGen.generateKey();
-
[3] Fragmento de código de generación de claves de Client SDK 3:
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("rsa", "Cavium"); CaviumRSAKeyGenParameterSpec spec = new CaviumRSAKeyGenParameterSpec( keySizeInBits, new BigInteger("65537"), label + ":public", label + ":private", isExtractable, isPersistent); keyPairGen.initialize(spec); keyPairGen.generateKeyPair();
-
[4] Fragmento de código de generación de claves de Client SDK 5:
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", providerName); // Set attributes for RSA public key final KeyAttributesMap publicKeyAttrsMap = new KeyAttributesMap(); publicKeyAttrsMap.putAll(additionalPublicKeyAttributes); publicKeyAttrsMap.put(KeyAttribute.LABEL, label + ":Public"); publicKeyAttrsMap.put(KeyAttribute.MODULUS_BITS, keySizeInBits); publicKeyAttrsMap.put(KeyAttribute.PUBLIC_EXPONENT, new BigInteger("65537").toByteArray()); // Set attributes for RSA private key final KeyAttributesMap privateKeyAttrsMap = new KeyAttributesMap(); privateKeyAttrsMap.putAll(additionalPrivateKeyAttributes); privateKeyAttrsMap.put(KeyAttribute.LABEL, label + ":Private"); // Create KeyPairAttributesMap and use that to initialize the // keyPair generator KeyPairAttributesMap keyPairSpec = new KeyPairAttributesMapBuilder() .withPublic(publicKeyAttrsMap) .withPrivate(privateKeyAttrsMap) .build(); keyPairGen.initialize(keyPairSpec); keyPairGen.generateKeyPair();
Se han modificado las claves de búsqueda, eliminación y referencia
Encontrar una clave ya generada AWS CloudHSM implica usar la KeyStore. El SDK 3 del cliente tiene dos KeyStore tipos: Cavium
yCloudHSM
. El SDK de cliente 5 solo tiene un KeyStore tipo:CloudHSM
.
Pasar de un Cavium
KeyStore a CloudHSM
KeyStore otro requiere un cambio de KeyStore tipo. Además, Client SDK 3 usa identificadores de claves para hacer referencia a las claves, mientras que Client SDK 5 usa etiquetas de clave. A continuación, se enumeran los cambios de comportamiento resultantes.
¿Qué ha cambiado? | Descripción anterior de Client SDK 3 | Descripción actual de Client SDK 5 | Ejemplo |
---|---|---|---|
Referencias de claves |
Con Client SDK 3, las aplicaciones usan etiquetas o identificadores de claves para hacer referencia a las claves del HSM. Usan etiquetas KeyStore para encontrar una clave, o usan asas para crear |
En Client SDK 5, las aplicaciones pueden usar la Clase de Java KeyStore del AWS CloudHSM para Client SDK 5 para buscar claves por etiqueta. Para buscar las llaves por asa, usa la tecla AWS CloudHSM |
|
Buscar múltiples entradas |
Al buscar una clave utilizando |
Con la AWS CloudHSM |
|
Buscar todas las claves |
En Client SDK 3, es posible buscar todas las claves del HSM usando |
Client SDK 5 simplifica y hace que la búsqueda de claves sea más sencilla y eficiente usando la clase |
En el repositorio de muestras hay un ejemplo en el que se utiliza la |
Eliminación de claves |
Client SDK 3 usa |
El objeto |
Puede encontrar un código de ejemplo que muestra la funcionalidad de eliminación de claves en el repositorio de ejemplos de GitHub CloudHSM |
-
[1] A continuación, se muestra un fragmento de código:
KeyAttributesMap findSpec = new KeyAttributesMap(); findSpec.put(KeyAttribute.LABEL, label); findSpec.put(KeyAttribute.KEY_TYPE, keyType); KeyStoreWithAttributes keyStore = KeyStoreWithAttributes.getInstance("CloudHSM"); keyStore.load(null, null); keyStore.getKey(findSpec);
-
[2] Eliminar una clave en Client SDK 3:
Util.deleteKey(key);
Eliminar una clave en Client SDK 5:
((Destroyable) key).destroy();
Las operaciones de desempaquetado de cifrado han cambiado, pero otras operaciones de cifrado no
nota
No es necesario realizar cambios en las operaciones de cifradoencrypt/decrypt/wrap.
Las operaciones de desempaquetado requieren que la clase CaviumUnwrapParameterSpec
de Client SDK 3 se sustituya por una de las siguientes clases específicas para las operaciones criptográficas enumeradas.
GCMUnwrapKeySpec
para el desempaquetado deAES/GCM/NoPadding
IvUnwrapKeySpec
paraAESWrap unwrap
yAES/CBC/NoPadding unwrap
OAEPUnwrapKeySpec
paraRSA OAEP unwrap
Ejemplo de fragmento de código para OAEPUnwrapkeySpec
:
OAEPParameterSpec oaepParameterSpec = new OAEPParameterSpec( "SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSpecified.DEFAULT); KeyAttributesMap keyAttributesMap = new KeyAttributesMap(KeyAttributePermissiveProfile.KEY_CREATION); keyAttributesMap.put(KeyAttribute.TOKEN, true); keyAttributesMap.put(KeyAttribute.EXTRACTABLE, false); OAEPUnwrapKeySpec spec = new OAEPUnwrapKeySpec(oaepParameterSpec, keyAttributesMap); Cipher hsmCipher = Cipher.getInstance( "RSA/ECB/OAEPPadding", CloudHsmProvider.PROVIDER_NAME); hsmCipher.init(Cipher.UNWRAP_MODE, key, spec);
Las operaciones de firma no han cambiado
No se requieren cambios en las operaciones de firma.
Migración a Client SDK 5
Siga las instrucciones de esta sección para migrar de Client SDK 3 a Client SDK 5.
nota
Actualmente, Amazon Linux, Ubuntu 16.04, Ubuntu 18.04, CentOS 6, CentOS 8 y RHEL 6 no son compatibles con Client SDK 5. Si actualmente usa una de estas plataformas con Client SDK 3, tendrá que elegir una plataforma diferente al migrar a Client SDK 5.
-
Desinstale el proveedor de JCE para Client SDK 3.
-
Desinstale el daemon de cliente para Client SDK 3.
nota
Es necesario volver a habilitar las configuraciones personalizadas.
-
Instale el proveedor de JCE de Client SDK siguiendo los pasos que se indican en Instale el proveedor JCE para AWS CloudHSM Client SDK 5.
-
Client SDK 5 presenta un nuevo formato de archivo de configuración y una nueva herramienta de arranque desde la línea de comandos. Para arrancar su proveedor de JCE para Client SDK 5, siga las instrucciones que se indican en la guía del usuario en Inicie el cliente SDK.
-
Pruebe su aplicación en su entorno de desarrollo. Actualice el código existente para resolver los cambios importantes antes de la migración final.