Salta al contenuto

Come posso utilizzare OpenSSL per crittografare un file con chiavi asimmetriche AWS KMS?

4 minuti di lettura
0

Desidero utilizzare OpenSSL per crittografare un file con chiavi del Servizio AWS di gestione delle chiavi (AWS KMS).

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Crea la coppia di chiavi RSA, scarica la chiave pubblica e crea una chiave AES a 256 bit

Completa i seguenti passaggi:

  1. Crea la coppia di chiavi RSA.
  2. Per scaricare la chiave pubblica, esegui il comando AWS CLI get-public-key:
    aws kms get-public-key --key-id your-key-id --output text --query 'PublicKey' > RSAPublic.b64 && base64 -d RSAPublic.b64 > RSAPublic.bin
    Nota: sostituisci your-key-id con l'ID della tua chiave asimmetrica. La funzione --query ottiene la chiave pubblica e decodifica il file base64 in una chiave DER.
  3. Esegui questo comando OpenSSL rand per creare una chiave AES (Advanced Encryption Standard) a 256 bit:
    openssl rand -base64 32 > key.bin

Crittografa i dati

Completa i seguenti passaggi:

  1. Esegui questo comando OpenSSL enc con il file key.bin:
    openssl enc -aes-256-cbc -salt -pbkdf2 -in FILE_TO_ENCRYPT -out FILE_TO_ENCRYPT.enc -pass file:./key.bin
    Nota: sostituisci FILE_TO_ENCRYPT con il nome del tuo file. Il comando**-pbkdf2** è disponibile solo con OpenSSL 1.1.1. L'AMI (Amazon Machine Image) Amazon Linux 2 utilizza OpenSSL 1.0.2 e non supporta il comando -pbkdf2.
  2. Crittografa il file key.bin con la chiave pubblica AWS KMS. In questo modo, proteggi i dati della chiave. Solo gli utenti che hanno accesso alla chiave privata AWS KMS possono accedere al file key.bin. Per farlo, esegui il comando OpenSSL pkeyutl:
    openssl pkeyutl -in key.bin -out enc.key.bin -inkey RSAPublic.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
    Nota: il comando pkeyutl utilizza un algoritmo di crittografia che supporta la decrittografia tramite l'API AWS KMS RSAES_OAEP_SHA_256. La chiave pubblica AWS KMS RSAPublic.bin crittografa la chiave AES a 256 bit e crea un nuovo file denominato enc.key.bin.
  3. Per crittografare il file key.bin in modo che gli utenti debbano decrittografare il file enc.key.bin per accedere a key.bin, esegui il comando AWS CLI rm:
    aws s3 rm key.bin && rm FILE_TO_ENCRYPT
    Nota: sostituisci FILE_TO_ENCRYPT con il nome del tuo file.
  4. (Facoltativo) Elimina il file originale che desideri crittografare in modo che gli utenti non possano accedervi.

Ora hai a disposizione le seguenti risorse:

  • I dati crittografati nel file FILE_TO_ENCRYPT.enc.
  • La chiave AES a 256 bit crittografata enc.key.bin.
  • La chiave pubblica AWS KMS RSAPublic.bin.

Nota: gli utenti con dati crittografati devono inviarti i file da decrittografare.

Decrittografa i file

Per recuperare i dati crittografati, decrittografa la chiave enc.key.bin, quindi utilizzala per decrittografare il file FILE_TO_ENCRYPT.enc.

Nota: devi avere accesso all'API AWS KMS perché la chiave privata AWS KMS non è visualizzabile in chiaro.

Completa i seguenti passaggi:

  1. Per decrittografare il file enc.key.bin e inviarlo all'API AWS KMS, esegui il comando AWS CLI decrypt:
    aws kms decrypt --key-id your-key-id --ciphertext-blob fileb://enc.key.bin --encryption-algorithm RSAES_OAEP_SHA_256 --output text --query 'Plaintext' | base64 --decode > decryptedKey.bin
    Nota: sostituisci your-key-id con l'ID della tua chiave. La funzione --query seleziona il testo in chiaro e decodifica il valore base64 nel file decryptedKey.bin.
  2. Per produrre il file decrittografato, utilizza il file decryptedKey.bin quando esegui questo comando OpenSSL enc:
    openssl enc -d -aes-256-cbc -pbkdf2 -in FILE_TO_ENCRYPT.enc -out DECRYPTED_FILE -pass file:./decryptedKey.bin
    Nota: sostituisci DECRYPTED_FILE con il nome del tuo file.
  3. Per verificare che la crittografia e la decrittografia siano state completate correttamente, confronta DECRYPTED_FILE con FILE_TO_ENCRYPT.