Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Come posso utilizzare OpenSSL e lo strumento a riga di comando CloudHSM per trasferire in modo sicuro le mie chiavi su CloudHSM?
Desidero utilizzare lo strumento a riga di comando CloudHSM (CloudHSM CLI) per importare chiavi locali in AWS CloudHSM eseguendo il sottocomando "key unwrap".
Breve descrizione
Innanzitutto, crittografa la chiave del payload con una chiave effimera Advanced Encryption Standard (AES). Quindi crittografa la chiave AES effimera con la chiave pubblica da una coppia di chiavi. Infine, unisci la chiave del payload crittografata e la chiave effimera crittografata in un unico file. Il file viene inviato a CloudHSM in formato crittografato e la chiave privata decrittografa il file dalla coppia di chiavi. Il meccanismo AES_KEY_WRAP decrittografa la chiave AES effimera e la utilizza per decrittografare la chiave del payload.
Nota: completa i seguenti passaggi su un'istanza Amazon Elastic Compute Cloud (Amazon EC2) che esegue Linux. È consigliabile utilizzare un'Amazon Machine Image (AMI) Amazon Linux 2023 che includa la versione e le utilità OpenSSL richieste.
Crea le seguenti chiavi:
- Chiave AES, RSA o EC del payload da importare e utilizzare con CloudHSM.
- Chiave AES temporanea richiesta da AES_KEY_WRAP per crittografare il payload. È consigliabile utilizzare AES perché non impone limiti di dimensione su ciò che può essere crittografato.
- Coppia di chiavi RSA per comprimere ed estrarre in modo sicuro le chiavi in CloudHSM.
Per utilizzare envelop wrap, devi avere la versione 3.x di OpenSSL.
Per determinare la versione di OpenSSL in uso, esegui questo comando:
openssl version
Esempio di output:
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
Risoluzione
Nota: in comandi seguenti, sostituisci questi valori con i tuoi valori:
- YOUR_CRYPTO_USER_NAME con il tuo nome utente crittografico
- YOUR_CRYPTO_USER_PASSWORD con la tua password
- YOUR_WRAPPING_KEY_LABEL con l'etichetta della chiave che hai assegnato per comprimere la tua chiave pubblica RSA
- YOUR_UNWRAPPING_KEY_LABEL con l'etichetta della chiave che hai assegnato per estrarre la tua chiave privata RSA
- YOUR_IMPORTED_KEY_LABEL con l'etichetta della chiave che hai assegnato alla chiave del payload importata
Le etichette delle chiavi per la compressione e l'estrazione devono essere univoche perché sono una condizione di filtro per i comandi key generate-file e key unwrap. In alternativa, puoi utilizzare una condizione di filtro diversa per identificare in modo univoco le chiavi. Per ulteriori informazioni sui filtri delle chiavi, consulta Filtra le chiavi utilizzando CloudHSM CLI.
Imposta le credenziali degli utenti crittografici per CloudHSM CLI
Esegui questi comandi:
export CLOUDHSM_ROLE="crypto-user" export CLOUDHSM_PIN="YOUR_CRYPTO_USER_NAME:YOUR_CRYPTO_USER_PASSWORD"
Importa il payload AES
Per creare, crittografare e importare le chiavi locali, completa i seguenti passaggi:
-
Per creare le chiavi AES, AES effimere e RSA del payload, esegui i seguenti comandi:
openssl rand -out payload_aes 32 openssl rand -out ephemeral_aes 32 /opt/cloudhsm/bin/cloudhsm-cli key generate-asymmetric-pair rsa --public-label YOUR_WRAPPING_KEY_LABEL --private-label YOUR_UNWRAPPING_KEY_LABEL --modulus-size-bits 4096 --public-exponent 65537 --private-attributes unwrap=true /opt/cloudhsm/bin/cloudhsm-cli key generate-file --encoding pem --path public.pem --filter attr.label=YOUR_WRAPPING_KEY_LABELNota: per tenere traccia dei tuoi file, crea le chiavi nella loro directory.
-
Per inserire i valori esadecimali grezzi della chiave AES effimera in una variabile, esegui questo comando:
EPHEMERAL_AES_HEX=$(hexdump -v -e '/1 "%02X"' < ephemeral_aes)Nota: assicurati di aver installato l'utilità hexdump. Se non installi hexdump, il comando precedente restituisce un errore. Per istruzioni sull'installazione dell'utilità hexdump, fai riferimento alla documentazione del sistema operativo.
-
Per comprimere il payload utilizzando la chiave AES effimera, esegui il comando OpenSSL enc:
openssl enc -id-aes256-wrap-pad -K $EPHEMERAL_AES_HEX -iv A65959A6 -in payload_aes -out payload_wrappedNota: la cifratura -id-aes256-wrap-pad è il meccanismo di compressione conforme a RFC 3394 che coesiste con CKM_RSA_AES_KEY_WRAP. L'estensione RFC 3394, RFC 5649, imposta i valori -iv. Per ulteriori informazioni, consulta AES key wrap with padding algorithm (Compressione della chiave AES con algoritmo di padding) e AES key wrap algorithm (Algoritmo di compressione della chiave AES) sul sito web di IETF.
-
Utilizza la chiave pubblica della coppia di chiavi RSA per crittografare la chiave AES:
openssl pkeyutl -encrypt -in ephemeral_aes -out ephemeral_wrapped -pubin -inkey public.pem -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha1 -pkeyopt rsa_mgf1_md:sha1 -
Dal computer locale, concatena la chiave del payload crittografata e la chiave AES effimera in un unico file denominato rsa_aes_wrapped:
cat ephemeral_wrapped payload_wrapped > rsa_aes_wrapped -
Per utilizzare la chiave privata RSA con key unwrap rsa-aes per estrarre la chiave del payload concatenata in CloudHSM, esegui questo comando:
/opt/cloudhsm/bin/cloudhsm-cli key unwrap rsa-aes --data-path rsa_aes_wrapped --key-type-class aes --label YOUR_IMPORTED_KEY_LABEL --hash-function sha1 --mgf mgf1-sha1 --filter attr.label=YOUR_UNWRAPPING_KEY_LABEL --attributes decrypt=true encrypt=trueNota: è necessario utilizzare**--key-type-class aes** per estrarre le chiavi AES. In base all'utilizzo della chiave, assegna gli attributi con --attributes. Per ulteriori informazioni sulle opzioni e sugli attributi delle chiavi, consulta Attributi della chiave per CloudHSM CLI e gli esempi di utilizzo del comando key unwrap rsa-aes.
Se l’importazione della chiave AES del payload avviene correttamente, ricevi un output simile al seguente:
{ "error_code": 0, "data": { "key": { "key-reference": "0x000000000068031a", "key-info": { "key-owners": [ { "username": "YOUR_CRYPTO_USER_NAME", "key-coverage": "full" } ], "shared-users": [], "cluster-coverage": "full" }, "attributes": { "key-type": "aes", "label": "YOUR_IMPORTED_KEY_LABEL", "id": "0x", "check-value": "0xb31c2a", "class": "secret-key", "encrypt": true, "decrypt": true, "token": true, "always-sensitive": false, "derive": false, "destroyable": true, "extractable": true, "local": false, "modifiable": true, "never-extractable": false, "private": true, "sensitive": true, "sign": true, "trusted": false, "unwrap": false, "verify": true, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 32 } } } }
Importa il payload RSA
Completa i seguenti passaggi:
-
Se desideri estrarre una chiave privata RSA in CloudHSM, esegui questi comandi per convertire la chiave del payload in una chiave privata RSA:
openssl genrsa -out payload_rsa.pem 2048 openssl rand -out ephemeral_aes 32 -
Utilizza un editor di testo per verificare il formato delle chiavi RSA:
PKCS1 format: -----BEGIN RSA PRIVATE KEY----- - PKCS8 format: -----BEGIN PRIVATE KEY-----Nota: le chiavi RSA sono in formato PKCS #1. Tuttavia, l'interfaccia a riga di comando di CloudHSM presuppone che la chiave privata sia nel formato PKCS #8 DER.
-
Per convertire la chiave payload\ _rsa.pem in formato PKCS #8 codificato DER, esegui il seguente comando:
openssl pkcs8 -topk8 -inform PEM -outform DER -in payload_rsa.pem -out payload_rsa_pkcs8.der -nocrypt -
Completa i passaggi 2-5 della sezione Importa il payload AES. Sostituisci a payload_aes payload_rsa_pkcs8.der.
-
Per estrarre la chiave privata RSA del payload in CloudHSM, esegui il seguente comando:
/opt/cloudhsm/bin/cloudhsm-cli key unwrap rsa-aes --data-path rsa_aes_wrapped --key-type-class rsa-private --label YOUR_IMPORTED_KEY_LABEL --hash-function sha1 --mgf mgf1-sha1 --filter attr.label=YOUR_UNWRAPPING_KEY_LABEL --attributes decrypt=true sign=trueNota: è necessario utilizzare**--key-type-class rsa-private** per estrarre le chiavi RSA. In base all'utilizzo della chiave, assegna gli attributi con --attributes.
Importaz del payload EC
Per importare il payload, completa i seguenti passaggi:
-
Per estrarre una chiave privata EC in CloudHSM, esegui i seguenti comandi per cambiare la chiave del payload in una chiave privata EC:
openssl ecparam -name secp256k1 -genkey -noout -out payload_ec.pemopenssl rand -out ephemeral_aes 32 -
Utilizza un editor di testo in chiaro per controllare il formato delle chiavi EC:
PKCS1 format: -----BEGIN EC PRIVATE KEY----- - PKCS8 format: -----BEGIN PRIVATE KEY-----Nota: le chiavi EC sono in formato PKCS #1. Tuttavia, l'interfaccia a riga di comando di CloudHSM presuppone che la chiave privata sia nel formato PKCS #8 DER.
-
Per convertire la chiave payload_ec.pem in formato PKCS #8 codificato DER, esegui il seguente comando:
openssl pkcs8 -topk8 -inform PEM -outform DER -in payload_ec.pem -out payload_ec_pkcs8.der -nocrypt -
Completa i passaggi 2-5 della sezione Importa il payload AES. Sostituisci a payload\ _aes payload_ec_pkcs8.der.
-
Per estrarre la chiave privata EC del payload in CloudHSM, esegui il seguente comando:
/opt/cloudhsm/bin/cloudhsm-cli key unwrap rsa-aes --data-path rsa_aes_wrapped --key-type-class ec-private --label YOUR_IMPORTED_KEY_LABEL --hash-function sha1 --mgf mgf1-sha1 --filter attr.label=YOUR_UNWRAPPING_KEY_LABEL --attributes decrypt=true sign=trueNota: è necessario utilizzare**--key-type-class ec-private** per estrarre le chiavi EC. In base all'utilizzo della chiave, assegna gli attributi con --attributes.
Informazioni correlate
Meccanismi supportati per la libreria PKCS #11 per AWS CloudHSM Client SDK 5
- Argomenti
- Security, Identity, & Compliance
- Tag
- AWS CloudHSM
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata 4 anni fa