Utilizzo di Client SDK 5 per l'integrazione con Java Keytool e Jarsigner - 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à.

Utilizzo di Client SDK 5 per l'integrazione con Java Keytool e Jarsigner

AWS CloudHSM è un archivio di chiavi JCE per usi speciali che utilizza certificati associati alle chiavi dell'HSM tramite strumenti di terze parti quali keytool e jarsigner. AWS CloudHSM non memorizza i certificati in HSM, poiché i certificati sono dati pubblici e non riservati. L'archivio chiavi AWS CloudHSM archivia i certificati in un file locale e associa i certificati alle chiavi corrispondenti dell'HSM.

Quando si utilizza l'archivio chiavi AWS CloudHSM per generare nuove chiavi, non vengono generate voci nel file dell'archivio delle chiavi locale: le chiavi vengono create nell'HSM. Allo stesso modo, quando si utilizza l'archivio chiavi AWS CloudHSM per cercare le chiavi, la ricerca viene passata all'HSM. Quando si archiviano certificati nell'archivio chiavi AWS CloudHSM, il provider verifica che una coppia di chiavi con l'alias corrispondente esista sull'HSM e quindi associa il certificato fornito alla coppia di chiavi corrispondente.

Prerequisiti

Per utilizzare l'archivio delle chiavi AWS CloudHSM, è necessario innanzitutto inizializzare e configurare l'SDK JCE AWS CloudHSM.

Fase 1: Installare JCE

Per installare JCE, inclusi i prerequisiti del client AWS CloudHSM, segui alla procedura per installare la libreria Java.

Passaggio 2: aggiungere le credenziali di accesso HSM alle variabili di ambiente

Imposta le variabili di ambiente per contenere le credenziali di accesso all'HSM.

Linux
$ export HSM_USER=<HSM user name>
$ export HSM_PASSWORD=<HSM password>
Windows
PS C:\> $Env:HSM_USER=<HSM user name>
PS C:\> $Env:HSM_PASSWORD=<HSM password>
Nota

JCE AWS CloudHSM offre varie opzioni di accesso. Per utilizzare l'archivio chiavi AWS CloudHSM con applicazioni di terze parti, devi utilizzare l'accesso implicito con variabili di ambiente. Se desideri utilizzare l'accesso esplicito tramite il codice dell'applicazione, devi creare la tua applicazione utilizzando l'archivio chiavi AWS CloudHSM. Per ulteriori informazioni, vedi l'articolo sull'utilizzo dell'archivio chiavi AWS CloudHSM.

Passaggio 3: Registrazione del provider JCE

Per registrare il provider JCE nella CloudProvider configurazione Java, procedi nel seguente modo:

  1. Apri il file di configurazione java.security nell'installazione Java, per la modifica.

  2. Nel file di configurazione java.security, aggiungi com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider come ultimo provider. Ad esempio, se sono presenti nove provider nel file java.security, aggiungi il seguente provider come ultimo provider nella sezione.

    security.provider.10=com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider

Nota

L'aggiunta del provider AWS CloudHSM come priorità più elevata può influire negativamente sulle prestazioni del sistema, poiché al provider AWS CloudHSM verrà assegnata la priorità per le operazioni che possono essere trasferite in sicurezza sul software. Come procedura ottimale, specifica sempre il provider che desideri utilizzare per un'operazione, indipendentemente dal fatto che si tratti del provider AWS CloudHSM o di un provider basato su software.

Nota

L'indicazione delle opzioni -providerName, -providerclass, e -providerpath della riga di comando quando si generano le chiavi con keytool con l'archivio chiavi AWS CloudHSM può causare errori.

Utilizzo dell'archivio chiavi AWS CloudHSM con Keytool

Keytool è una utility a riga di comando molto usata per le attività comuni di chiavi e certificati sui sistemi Linux. Nella documentazione AWS CloudHSM non è incluso un tutorial completo su keytool. In questo articolo vengono illustrati i parametri specifici da utilizzare con varie funzioni keytool quando si utilizza AWS CloudHSM come root per l’attendibilità attraverso l'archivio chiavi AWS CloudHSM.

Quando utilizzi keytool con l'archivio chiavi AWS CloudHSM, specifica i seguenti argomenti per qualsiasi comando keytool:

Linux
-storetype CLOUDHSM -J-classpath< '-J/opt/cloudhsm/java/*'>
Windows
-storetype CLOUDHSM -J-classpath<'-J"C:\Program Files\Amazon\CloudHSM\java\*"'>

Se desideri creare un nuovo file dell'archivio chiavi utilizzando l'archivio chiavi AWS CloudHSM, vedi Usare KeyStore AWS CloudHSM. Per utilizzare un archivio di chiavi esistente, specificane il nome (incluso il percorso) utilizzando l'argomento -keystore per keytool. Se specifichi un file di archivio chiavi inesistente in un comando keytool, l'archivio chiavi AWS CloudHSM crea un nuovo file di archivio chiavi.

Crea nuove chiavi con Keytool

È possibile utilizzare keytool per generare qualsiasi tipo di chiave supportato dall'SDK JCE di AWS CloudHSM.

Importante

Una chiave generata tramite keytool viene generata nel software e quindi importata in AWS CloudHSM come chiave permanente estraibile.

Ti consigliamo vivamente di generare chiavi non esportabili al di fuori del keytool e quindi di importare i certificati corrispondenti nell'archivio chiavi. Se utilizzi chiavi RSA o EC estraibili tramite keytool e jarsigner, i provider esportano chiavi dal AWS CloudHSM e quindi utilizzano la chiave localmente per le operazioni di firma.

Se disponi di più istanze client connesse al cluster AWS CloudHSM, tenere presente che l'importazione di un certificato nell'archivio chiavi di un'istanza del client non renderà automaticamente disponibili i certificati in altre istanze del client. Per registrare la chiave e i certificati associati su ogni istanza del client è necessario eseguire un'applicazione Java come descritto in Generare una CSR usando Keytool. In alternativa, è possibile apportare le modifiche necessarie su un client e copiare il file dell'archivio delle chiavi risultante in ogni altra istanza del client.

Esempio 1: Per generare una chiave AES-256 simmetrica e salvarla in un file di archivio chiavi denominato "my_keystore.store", nella directory di lavoro. Sostituisci <etichetta segreta> con un'etichetta univoca.

Linux
$ keytool -genseckey -alias <secret label> -keyalg aes \ -keysize 256 -keystore my_keystore.store \ -storetype CloudHSM -J-classpath '-J/opt/cloudhsm/java/*' \
Windows
PS C:\> keytool -genseckey -alias <secret label> -keyalg aes ` -keysize 256 -keystore my_keystore.store ` -storetype CloudHSM -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Esempio 2: Per generare una coppia di chiavi RSA 2048 e salvarla in un file di archivio chiavi denominato "my_keystore.store" nella directory di lavoro. Sostituisci<Etichetta coppia chiavi RSA> con un'etichetta unica.

Linux
$ keytool -genkeypair -alias <RSA key pair label> \ -keyalg rsa -keysize 2048 \ -sigalg sha512withrsa \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -genkeypair -alias <RSA key pair label> ` -keyalg rsa -keysize 2048 ` -sigalg sha512withrsa ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

È possibile trovare un elenco di algoritmi di firma supportati nella libreria Java.

Elimina una chiave usando Keytool

L'archivio chiavi AWS CloudHSM non supporta l'eliminazione delle chiavi. È possibile eliminare le chiavi utilizzando il metodo distruggi dell'interfaccia Distruggibile.

((Destroyable) key).destroy();

Generare una CSR usando Keytool

Ottieni la massima flessibilità nella generazione di una richiesta di firma del certificato (CSR) se utilizzi OpenSSL Dynamic Engine. Il comando seguente utilizza keytool per generare un CSR per una coppia di chiavi con l'alias, my-key-pair.

Linux
$ keytool -certreq -alias <key pair label> \ -file my_csr.csr \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -certreq -alias <key pair label> ` -file my_csr.csr ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
Nota

Per utilizzare una coppia di chiavi da keytool, tale coppia di chiavi deve avere una voce nel file dell'archivio chiavi specificato. Se si desidera utilizzare una coppia di chiavi generata al di fuori di keytool, è necessario importare i metadati della chiave e del certificato nell'archivio chiavi. Per istruzioni sull'importazione dei dati dell'archivio chiavi, vedi Utilizzo di Keytool per importare certificati intermedi e radice nell'archivio chiavi AWS CloudHSM.

Utilizzo di Keytool per importare certificati intermedi e radice nell'archivio chiavi AWS CloudHSM

Per importare un certificato CA devi abilitare la verifica di una catena di certificati completa su un certificato appena importato. Il comando seguente mostra un esempio.

Linux
$ keytool -import -trustcacerts -alias rootCAcert \ -file rootCAcert.cert -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -import -trustcacerts -alias rootCAcert ` -file rootCAcert.cert -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Se si connettono più istanze di client al cluster AWS CloudHSM, l'importazione di un certificato nell'archivio chiavi di un'istanza del client non renderà automaticamente disponibile il certificato in altre istanze del client. È necessario importare il certificato in ogni istanza del client.

Utilizzo di Keytool per eliminare i certificati dall'archivio chiavi AWS CloudHSM

Il comando seguente mostra un esempio di come eliminare un certificato da un archivio chiavi keytool Java.

Linux
$ keytool -delete -alias mydomain \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -delete -alias mydomain ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Se si connettono più istanze del client al cluster AWS CloudHSM, l'eliminazione di un certificato nell'archivio chiavi di un'istanza del client non rimuoverà automaticamente il certificato da altre istanze del client. È necessario eliminare il certificato su ogni istanza del client.

Importazione di un certificato di lavoro nell'archivio chiavi AWS CloudHSM utilizzando Keytool

Una volta firmata una richiesta di firma del certificato (CSR), è possibile importarla nell'archivio chiavi AWS CloudHSM e associarla alla coppia di chiavi appropriata. Il seguente comando fornisce un esempio.

Linux
$ keytool -importcert -noprompt -alias <key pair label> \ -file my_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -importcert -noprompt -alias <key pair label> ` -file my_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

L'alias deve essere una coppia di chiavi con un certificato associato nell'archivio chiavi. Se la chiave viene generata al di fuori di keytool o viene generata in un'istanza del client diversa, è necessario prima importare i metadati della chiave e del certificato nell'archivio chiavi.

La catena di certificati deve essere verificabile. Se non è possibile verificare il certificato, potrebbe essere necessario importare il certificato di firma (autorità di certificazione) nell'archivio chiavi in modo che la catena possa essere verificata.

Esportazione di un certificato utilizzando Keytool

Nell'esempio seguente viene generato un certificato in formato binario X.509. Per esportare un certificato leggibile dall'uomo, aggiungere -rfc al comando -exportcert.

Linux
$ keytool -exportcert -alias <key pair label> \ -file my_exported_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -exportcert -alias <key pair label> ` -file my_exported_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Utilizzo di Key Store AWS CloudHSM con Jarsigner

Jarsigner è una popolare utilità a riga di comando per firmare file JAR utilizzando una chiave archiviata in modo sicuro su un HSM. Nella documentazione AWS CloudHSM non è previsto un tutorial completo su Jarsigner In questa sezione vengono illustrati i parametri di Jarsigner da utilizzare per firmare e verificare le firme con AWS CloudHSM come radice di fiducia attraverso l'archivio chiavi AWS CloudHSM.

Impostazione di chiavi e certificati

Prima di poter firmare i file JAR con Jarsigner, assicurati di aver impostato o completato i seguenti passaggi:

  1. Segui le indicazioni contenute nei prerequisiti dell'archivio chiavi AWS CloudHSM.

  2. Imposta le chiavi di firma e i certificati associati e la catena di certificati che devono essere archiviati nell'archivio chiavi AWS CloudHSM dell'istanza del server o del client corrente. Crea le chiavi su AWS CloudHSM e quindi importa i metadati associati nell'archivio chiavi AWS CloudHSM. Se desideri utilizzare keytool per impostare le chiavi e i certificati, vedi Crea nuove chiavi con Keytool. Se utilizzi più istanze del client per firmare i JAR, crearla chiave e importa la catena di certificati. Quindi copia il file dell'archivio delle chiavi risultante in ogni istanza del client. Se generi frequentemente nuove chiavi, è possibile che sia più semplice importare singolarmente i certificati in ogni istanza client.

  3. L'intera catena di certificati dovrebbe essere verificabile. Affinché la catena di certificati sia verificabile, potrebbe essere necessario aggiungere il certificato CA e i certificati intermedi all'archivio chiavi AWS CloudHSM. Vedere lo snippet di codice in Firmare un file JAR usando AWS CloudHSM e Jarsigner per istruzione su come utilizzare il codice Java per verificare la catena di certificati. Se preferisci, puoi utilizzare keytool per importare i certificati. Per istruzioni su come usare keytool, vedi Utilizzo di Keytool per importare certificati intermedi e radice nell'archivio chiavi AWS CloudHSM.

Firmare un file JAR usando AWS CloudHSM e Jarsigner

Utilizza il seguente comando per firmare un file JAR:

Linux;

Per OpenJDK 8

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>

Per OpenJDK 11, OpenJDK 17 e OpenJDK 21

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>
Windows

Per OpenJDK8

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

Per OpenJDK 11, OpenJDK 17 e OpenJDK 21

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*'` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

Utilizza il seguente comando per verificare un file JAR firmato:

Linux

Per OpenJDK8

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>

Per OpenJDK 11, OpenJDK 17 e OpenJDK 21

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>
Windows

Per OpenJDK 8

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

Per OpenJDK 11, OpenJDK 17 e OpenJDK 21

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

Problemi noti

  1. Non supportiamo le chiavi EC con Keytool e Jarsigner.