

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Esegui la migrazione del tuo provider JCE da AWS CloudHSM Client SDK 3 a Client SDK 5
<a name="java-lib-migrate_to_sdk5"></a>

Utilizzate questo argomento per migrare il vostro [provider JCE](java-library.md) da AWS CloudHSM Client SDK 3 a Client SDK 5. Per i vantaggi della migrazione, consulta. [Vantaggi di AWS CloudHSM Client SDK 5](client-sdk-5-benefits.md)

Nel AWS CloudHSM, le applicazioni dei clienti eseguono operazioni crittografiche utilizzando il AWS CloudHSM Client Software Development Kit (SDK). Client SDK 5 è l'SDK principale che continua ad avere nuove funzionalità e supporto per la piattaforma.

Il provider Client SDK 3 JCE utilizza classi personalizzate APIs che non fanno parte delle specifiche JCE standard. Client SDK 5 per il provider JCE è conforme alla specifica JCE ed è retrocompatibile con Client SDK 3 in alcune aree. Le applicazioni del cliente potrebbero richiedere modifiche come parte della migrazione a Client SDK 5. Questa sezione descrive le modifiche necessarie per una migrazione corretta.

Per consultare le istruzioni di migrazione per tutti i provider, consulta[Migrazione da AWS CloudHSM Client SDK 3 a Client SDK 5](client-sdk-migration.md).

**Topics**
+ [Preparati affrontando le modifiche più importanti](#jce-migration-preparation-sdk5)
+ [Esegui la migrazione a Client SDK 5](#w2aac25c19c21c15)
+ [Argomenti correlati](#java-lib-migrate_to_sdk5-seealso)

## Preparati affrontando le modifiche più importanti
<a name="jce-migration-preparation-sdk5"></a>

Rivedi queste modifiche sostanziali e aggiorna di conseguenza l'applicazione nel tuo ambiente di sviluppo.

### La classe e il nome del Provider sono cambiati
<a name="w2aac25c19c21c13b5"></a>


****  

| Cosa è cambiato | Cosa c'era in Client SDK 3 | Che cos'è in Client SDK 5 | Esempio | 
| --- | --- | --- | --- | 
| Classe e nome del provider | La classe del provider JCE in Client SDK 3 viene chiamata `CaviumProvider` e ha il nome Provider. `Cavium` | In Client SDK 5, la classe Provider viene chiamata `CloudHsmProvider` e ha il nome Provider. `CloudHSM` | Un esempio di come inizializzare l'`CloudHsmProvider`oggetto è disponibile nel repository di [AWS CloudHSM GitHub esempio](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AESGCMEncryptDecryptRunner.java#L43-L50). | 

### L'accesso esplicito è cambiato, quello implicito no
<a name="w2aac25c19c21c13b7"></a>


****  

| Cosa è cambiato | Cosa c'era in Client SDK 3 | Che cos'è in Client SDK 5 | Esempio | 
| --- | --- | --- | --- | 
| Login esplicito | Client SDK 3 utilizza la `LoginManager` classe per l'accesso esplicito. [1](#explicit_login_sdk3_note) | In Client SDK 5, il `CloudHSM` provider implementa l'accesso `AuthProvider` esplicito. `AuthProvider`è una classe Java standard e segue il modo idiomatico di Java per accedere a un provider. Grazie alla migliore gestione dello stato di accesso in Client SDK 5, le applicazioni non devono più monitorare ed eseguire l'accesso durante le riconnessioni. [2](#explicit_login_sdk5_note) | Per un esempio su come utilizzare l'accesso esplicito con Client SDK 5, consulta l' LoginRunner esempio nel repository di esempio di [AWS GitHub CloudHSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java#L109C5-L141). | 
| Accesso implicito | Non sono richieste modifiche per l'accesso implicito. Lo stesso file di proprietà e tutte le variabili di ambiente continueranno a funzionare per l'accesso implicito durante la migrazione da Client SDK 3 a Client SDK 5. | [Per un esempio su come utilizzare l'accesso implicito con Client SDK 5, consulta l'LoginRunner esempio nel repository di esempio.](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java#L143-L202) AWS CloudHSM GitHub  | 
+ [1] Frammento di codice Client SDK 3:

  ```
  LoginManager lm = LoginManager.getInstance();
                         
  lm.login(partition, user, pass);
  ```
+ [2] Frammento di codice 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);
  ```

  Per un esempio su come utilizzare l'accesso esplicito con Client SDK 5, consulta l'[LoginRunner esempio nel repository di esempio](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java#L109C5-L141). AWS CloudHSM GitHub 

### La generazione delle chiavi è cambiata
<a name="w2aac25c19c21c13b9"></a>


****  

| Cosa è cambiato | Cosa c'era in Client SDK 3 | Che cos'è in Client SDK 5 | Esempio | 
| --- | --- | --- | --- | 
| Generazione delle chiavi | In Client SDK 3, `Cavium[Key-type]AlgorithmParameterSpec` viene utilizzato per specificare i parametri di generazione delle chiavi. Per un frammento di codice, consulta la nota a piè di pagina. [1](#key_generation_sdk3_note) | In Client SDK 5, `KeyAttributesMap` viene utilizzato per specificare gli attributi di generazione delle chiavi. Per un frammento di codice, consulta la nota a piè di pagina. [2](#key_generation_sdk5_note) | Per un esempio su come generare una chiave simmetrica, consulta l'`KeyAttributesMap`esempio nel repository di [SymmetricKeys esempio](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/SymmetricKeys.java) di AWS GitHub CloudHSM. | 
| Generazione di coppie di chiavi | In Client SDK 3, `Cavium[Key-type]AlgorithmparameterSpec` viene utilizzato per specificare i parametri di generazione delle key pair. Per un frammento di codice, consulta la nota a piè di pagina. [3](#key_pair_generation_sdk3_note) | In Client SDK 5, `KeyPairAttributesMap` viene utilizzato per specificare questi parametri. Per un frammento di codice, consulta la nota a piè di pagina. [4](#key_pair_generation_sdk5_note) | [Per un esempio su come `KeyAttributesMap` generare una chiave asimmetrica, consultate l'esempio nel AsymmetricKeys repository di esempio.](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AsymmetricKeys.java) AWS CloudHSM GitHub  | 
+ [1] Frammento di codice per la generazione di chiavi 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] Frammento di codice per la generazione di chiavi 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] Frammento di codice di generazione di key pair 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] Frammento di codice di generazione di key pair 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();
  ```

### La ricerca, l'eliminazione e il riferimento alle chiavi sono cambiati
<a name="w2aac25c19c21c13c11"></a>

La ricerca di una chiave già generata con AWS CloudHSM comporta l'utilizzo di. KeyStore Client SDK 3 è di due KeyStore tipi: `Cavium` e. `CloudHSM` Client SDK 5 ha solo un KeyStore tipo:. `CloudHSM` 

Il passaggio da `Cavium` KeyStore a `CloudHSM` KeyStore richiede un cambio di KeyStore tipo. Inoltre, Client SDK 3 utilizza le maniglie dei tasti per fare riferimento alle chiavi, mentre Client SDK 5 utilizza le etichette delle chiavi. Le modifiche comportamentali risultanti sono elencate di seguito.


| Cosa è cambiato | Cosa c'era in Client SDK 3 | Che cos'è in Client SDK 5 | Esempio | 
| --- | --- | --- | --- | 
| Riferimenti chiave | Con Client SDK 3, le applicazioni utilizzano etichette o maniglie di tasti per fare riferimento alle chiavi nell'HSM. Utilizzano etichette KeyStore per trovare una chiave oppure usano maniglie per creare `CaviumKey` oggetti. | In Client SDK 5, le applicazioni possono utilizzare il comando [AWS CloudHSM KeyStore Classe Java per Client SDK 5](alternative-keystore_5.md) per trovare le chiavi per etichetta. Per trovare le chiavi in base alla maniglia, usa il comando AWS CloudHSM `KeyStoreWithAttributes` with AWS CloudHSM `KeyReferenceSpec`. |  | 
| Ricerca di voci multiple | Quando si cerca una chiave utilizzando `getEntry` o `getCertificate` in scenari in cui sono presenti più elementi con gli stessi criteri in `Cavium` KeyStore, verrà restituita solo la prima voce trovata. `getKey` | Con AWS CloudHSM `KeyStore` and`KeyStoreWithAttributes`, questo stesso scenario comporterà la generazione di un'eccezione. Per risolvere questo problema, si consiglia di impostare etichette univoche per le chiavi utilizzando il [Imposta gli attributi delle chiavi con CloudhSM CLI](cloudhsm_cli-key-set-attribute.md) comando nella CLI di CloudHSM. Oppure usa `KeyStoreWithAttributes#getKeys` per restituire tutte le chiavi che corrispondono ai criteri. |  | 
| Trova tutte le chiavi | In Client SDK 3 è possibile trovare tutte le chiavi nell'HSM utilizzando. `Util.findAllKeys()` | Client SDK 5 rende la ricerca delle chiavi più semplice ed efficiente utilizzando la classe. `KeyStoreWithAttributes` Quando possibile, memorizza nella cache le chiavi per ridurre al minimo la latenza. Per ulteriori informazioni, consulta [Gestisci efficacemente le chiavi nella tua applicazione](bp-application-integration.md#bp-manage-application). Se devi recuperare tutte le chiavi dall'HSM, usale `KeyStoreWithAttributes#getKeys` con una chiave vuota. `KeyAttributesMap`  | Un esempio che utilizza la `KeyStoreWithAttributes` classe per trovare una chiave è disponibile nel [repository di AWS CloudHSM GitHub esempio](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java#L205-L223) e un frammento di codice è mostrato in. [1](#using_keystore_att_note) | 
| Eliminazione della chiave | Client SDK 3 utilizza `Util.deleteKey()` per eliminare una chiave.  | L'`Key`oggetto in Client SDK 5 implementa l'`Destroyable`interfaccia che consente di eliminare le chiavi utilizzando il `destroy()` metodo di questa interfaccia. | Un codice di esempio che mostra la funzionalità di eliminazione delle chiavi è disponibile nel repository di esempio [ GitHub CloudHSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java#L229-L234). Un frammento di esempio per ogni SDK è mostrato in. [2](#delete_key_note) | 
+ [1] uno snippet è mostrato di seguito:

  ```
  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] Eliminazione di una chiave in Client SDK 3:

  ```
  Util.deleteKey(key);
  ```

  Eliminazione di una chiave in Client SDK 5:

  ```
  ((Destroyable) key).destroy();
  ```

### Le operazioni di cancellazione di cifratura sono cambiate, le altre operazioni di cifratura no
<a name="w2aac25c19c21c13c13"></a>

**Nota**  
Non sono necessarie modifiche per le operazioni di cifratura. encrypt/decrypt/wrap

Le operazioni Unwrap richiedono la sostituzione della `CaviumUnwrapParameterSpec` classe Client SDK 3 con una delle seguenti classi specifiche per le operazioni crittografiche elencate.
+ `GCMUnwrapKeySpec`per unwrap `AES/GCM/NoPadding`
+ `IvUnwrapKeySpec`per `AESWrap unwrap` e `AES/CBC/NoPadding unwrap`
+ `OAEPUnwrapKeySpec` per `RSA OAEP unwrap`

Frammento di esempio per: `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);
```

### Le operazioni di firma non sono cambiate
<a name="w2aac25c19c21c13c15"></a>

Non sono necessarie modifiche per le operazioni di firma. 

## Esegui la migrazione a Client SDK 5
<a name="w2aac25c19c21c15"></a>

Segui le istruzioni in questa sezione per migrare da Client SDK 3 a Client SDK 5.

**Nota**  
Amazon Linux, Ubuntu 16.04, Ubuntu 18.04 CentOS 6, CentOS 8 e RHEL 6 non sono attualmente supportati con Client SDK 5. Se attualmente utilizzi una di queste piattaforme con Client SDK 3, dovrai scegliere una piattaforma diversa durante la migrazione a Client SDK 5.

1. Disinstalla il provider JCE per Client SDK 3.

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

   ```
   $ sudo yum remove cloudhsm-client-jce
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo yum remove cloudhsm-client-jce
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo yum remove cloudhsm-client-jce
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo yum remove cloudhsm-client-jce
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client-jce
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client-jce
   ```

------

1. Arresta il Client Daemon per Client SDK 3.

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

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo systemctl stop cloudhsm-client
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo systemctl stop cloudhsm-client
   ```

------

1. Disinstalla il Client Daemon per Client SDK 3.

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

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client
   ```

------
**Nota**  
Le configurazioni personalizzate devono essere nuovamente abilitate.

1. Installa il provider Client SDK JCE seguendo la procedura riportata di seguito. [Installare il provider JCE per AWS CloudHSM Client SDK 5](java-library-install_5.md)

1. Client SDK 5 introduce un nuovo formato di file di configurazione e uno strumento di avvio da riga di comando. Per avviare il provider Client SDK 5 JCE, segui le istruzioni elencate nella guida per l'utente riportata di seguito. [Esegui il bootstrap di Client SDK](cluster-connect.md#connect-how-to)

1. Nel tuo ambiente di sviluppo, prova la tua applicazione. Aggiorna il codice esistente per risolvere le modifiche sostanziali prima della migrazione finale. 

## Argomenti correlati
<a name="java-lib-migrate_to_sdk5-seealso"></a>
+ [Le migliori pratiche per AWS CloudHSM](best-practices.md)