Esegui la migrazione del tuo provider JCE da Client SDK 3 a Client SDK 5 - AWS CloudHSM

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 Client SDK 3 a Client SDK 5

Utilizzate questo argomento per migrare il vostro provider JCE da Client SDK 3 a Client SDK 5. Per i vantaggi della migrazione, consulta. Vantaggi del Client SDK 5

NelAWS 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 e API personalizzate 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 di successo.

Per consultare le istruzioni di migrazione per tutti i provider, consultaMigrazione da Client SDK 3 a Client SDK 5.

Preparati affrontando le modifiche più importanti

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

La classe e il nome del Provider sono cambiati

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'CloudHsmProvideroggetto è disponibile nel repository di AWS CloudHSM GitHub esempio.

L'accesso esplicito è cambiato, quello implicito no

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

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

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.

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. 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. AWS CloudHSM GitHub

La generazione delle chiavi è cambiata

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

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

Per un esempio su come utilizzare KeyAttributesMap per generare una chiave simmetrica, consulta l'esempio nel repository di SymmetricKeys esempio Github di AWS 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

In Client SDK 5, KeyPairAttributesMap viene utilizzato per specificare questi parametri. Per un frammento di codice, consulta la nota a piè di pagina. 4

Per un esempio su come KeyAttributesMap generare una chiave asimmetrica, consultate l'esempio nel AsymmetricKeys repository di esempio. 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

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.

Poiché gli handle dei tasti non fanno parte delle specifiche JCE, Client SDK 5 utilizza etichette chiave (alias) per fare riferimento alle chiavi. Come prerequisito per l'utilizzo delle etichette chiave, si prevede che le chiavi nell'HSM abbiano etichette univoche. A tale scopo è possibile utilizzare il Set di chiavi-attributi comando nella CLI di CloudHSM.

Per ulteriori informazioni, consulta la nota 1 a piè di pagina.

Trova le chiavi

Quando si cerca una chiave per etichetta (alias) in scenari in cui sono presenti più chiavi con la stessa etichetta (alias) Cavium KeyStore, verrà restituita solo la prima chiave trovata.

Con CloudHSM KeyStore, questo stesso scenario comporterà la generazione di un'eccezione. Per risolvere questo problema, si consiglia di impostare etichette univoche per le chiavi utilizzando il Set di chiavi-attributi comando nella CLI di CloudHSM.

Trova tutte le chiavi

La ricerca delle chiavi in Client SDK 3 richiede l'utilizzo Util.findAllKeys() e il successivo filtraggio in base a tipo/attributo di chiave specifici

Sebbene Client SDK 5 non supporti la ricerca di tutte le chiavi, Client SDK 5 semplifica la ricerca delle chiavi utilizzando la classe. KeyStoreWithAttributes Quando possibile, memorizza nella cache le chiavi per ridurre al minimo la latenza. Per ulteriori informazioni, consulta Gestisci in modo efficace le chiavi nella tua applicazione.

Un esempio che utilizza la KeyStoreWithAttributes classe per trovare una chiave è disponibile nel repository di esempio di AWS CloudHSM Github e un frammento di codice è mostrato in. 2

Eliminazione della chiave

Client SDK 3 utilizza Util.deleteKey() per eliminare una chiave.

L'oggetto Key in Client SDK 5 implementa l'Destroyableinterfaccia che consente di eliminare le chiavi utilizzando il metodo destroy di questa interfaccia.

Un codice di esempio che mostra la funzionalità di eliminazione delle chiavi è disponibile nel repository di esempio Github di CloudHSM. Un frammento di esempio per ogni SDK è mostrato in. 3

  • [1] Set di chiavi-attributi Per informazioni sull'utilizzo della CLI di CloudhSM, vedere per impostare un'etichetta univoca per un determinato keyhandle.

    Una volta impostate le etichette univoche, puoi usare il KeyStore per trovare quella chiave nell'applicazione:

    keyStore.getKey("uniquelabel1234", null)
  • [2] di seguito viene mostrato uno snippet:

    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);
  • [3] 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

Nota

Non sono necessarie modifiche per le operazioni di crittografia/decrittografia/ avvolgimento di Cipher.

Le operazioni Unwrap richiedono la sostituzione della CaviumUnwrapParameterSpec classe Client SDK 3 con una delle seguenti classi specifiche per le operazioni crittografiche elencate.

  • GCMUnwrapKeySpecper unwrap AES/GCM/NoPadding

  • IvUnwrapKeySpecper 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

Non sono necessarie modifiche per le operazioni di firma.

Esegui la migrazione a Client SDK 5

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-jce
    CentOS 7
    $ sudo yum remove cloudhsm-jce
    RHEL 7
    $ sudo yum remove cloudhsm-jce
    RHEL 8
    $ sudo yum remove cloudhsm-jce
  2. 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
    Nota

    Le configurazioni personalizzate devono essere nuovamente abilitate.

  3. Installa il provider Client SDK JCE seguendo la procedura riportata di seguito. Installare e utilizzare il provider JCE AWS CloudHSM per Client SDK 5

  4. 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

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

Argomenti correlati