Fase 2: generazione o importazione di una chiave privata e certificato SSL/TLS - 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à.

Fase 2: generazione o importazione di una chiave privata e certificato SSL/TLS

Per abilitare il protocollo HTTPS, l'applicazione del tuo server Web (NGINX o Apache) necessita di una chiave privata e di un corrispondente certificato SSL/TLS. Per utilizzare l'offload SSL/TLS del server Web con AWS CloudHSM devi archiviare la chiave privata in un HSM nel tuo cluster AWS CloudHSM. Questa operazione può essere eseguita in uno dei seguenti modi:

  • In mancanza di una chiave privata e di un certificato corrispondente, genera una chiave privata in un HSM, che serve a creare una richiesta di firma del certificato (CSR), che si utilizza per creare il certificato SSL/TLS.

  • Se sono già disponibili una chiave privata e un certificato corrispondente, importa la chiave privata in un HSM.

Indipendentemente dal metodo scelto tra i precedenti, si esporta una chiave privata PEM falsa dall'HSM, che è un file di chiave privata in formato PEM contenente un riferimento alla chiave privata archiviata nell'HSM (non è la chiave privata effettiva). Il server Web utilizza la chiave privata PEM falsa per identificare la chiave privata nell'HSM durante l'offload SSL/TLS.

Generazione di una chiave privata e di un certificato

Generazione di una chiave privata

Questa sezione mostra come generare una coppia di chiavi utilizzando Key Management Utility (KMU) di Client SDK 3. Una volta generata una coppia di chiavi all'interno dell'HSM, è possibile esportarla come file PEM falso e generare il certificato corrispondente.

Le chiavi private generate con Key Management Utility (KMU) possono essere utilizzate sia con Client SDK 3 che con Client SDK 5.

Installazione e configurazione di Key Management Utility (KMU)
  1. Effettuare la connessione all'istanza del client.

  2. Installa e configura Client SDK 3.

  3. Eseguire il comando seguente per avviare il client AWS CloudHSM.

    Amazon Linux
    $ sudo start cloudhsm-client
    Amazon Linux 2
    $ sudo service cloudhsm-client start
    CentOS 7
    $ sudo service cloudhsm-client start
    CentOS 8
    $ sudo service cloudhsm-client start
    RHEL 7
    $ sudo service cloudhsm-client start
    RHEL 8
    $ sudo service cloudhsm-client start
    Ubuntu 16.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 18.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 20.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 22.04 LTS

    Il supporto per OpenSSL Dynamic Engine non è ancora disponibile.

  4. Eseguire il comando seguente per avviare lo strumento a riga di comando key_mgmt_util.

    $ /opt/cloudhsm/bin/key_mgmt_util
  5. Eseguire il comando seguente per accedere all'HSM. Sostituire il <nome utente> e la <password> con i valori relativi all'utente di crittografia (CU).

    Command: loginHSM -u CU -s <user name> -p <password>>

Generazione di una chiave privata

A seconda del caso d'uso, è possibile generare una coppia di chiavi RSA o EC. Completa una delle seguenti operazioni:

  • Come generare una chiave privata RSA su un HSM

    Utilizza il comando genRSAKeyPair per generare una coppia di chiavi RSA. Questo esempio illustra la generazione di una coppia di chiavi RSA con un modulo di 2048, un esponente pubblico di 65537 e un'etichetta di tls_rsa_keypair.

    Command: genRSAKeyPair -m 2048 -e 65537 -l tls_rsa_keypair

    Se il comando ha dato esito positivo, dovresti vedere il seguente output che indica che hai generato una coppia di chiavi RSA.

    Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS
  • Come generare una chiave privata EC su un HSM

    Utilizza il comando genECCKeyPair per generare una coppia di chiavi EC. Questo esempio illustra la generazione di una coppia di chiavi EC con un ID curva pari a 2 (corrispondente alla curva NID_X9_62_prime256v1) e un'etichetta di tls_ec_keypair.

    Command: genECCKeyPair -i 2 -l tls_ec_keypair

    Se il comando ha dato esito positivo, dovresti vedere il seguente output che indica che hai generato una coppia di chiavi EC.

    Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS

Esportazione di un file di chiave privata PEM falso

Una volta che disponi di una chiave privata nell'HSM, devi esportare un file di chiave privata PEM falso. Questo file non contiene i dati della chiave effettivi, ma consente a OpenSSL Dynamic Engine di identificare la chiave privata nell'HSM, che potrà quindi essere utilizzata per creare una richiesta di firma del certificato (CSR) e firmare la CSR per creare il certificato.

Nota

I file PEM falsi generati con Key Management Utility (KMU) possono essere utilizzati sia con Client SDK 3 che con Client SDK 5.

Identifica l'handle della chiave corrispondente alla chiave che desideri esportare come PEM falsa, quindi esegui il comando seguente per esportare la chiave privata in formato PEM falso e salvarla in un file. Sostituire i valori seguenti con i propri valori.

  • <private_key_handle>: handle della chiave privata generata. Questo handle è stato generato da uno dei comandi di generazione della chiave nella fase precedente. Nell'esempio sopra riportato, l'handle della chiave privata è 8.

  • <web_server_fake_PEM.key>: il nome del file su cui verrà scritta la chiave PEM falsa.

Command: getCaviumPrivKey -k <private_key_handle> -out <web_server_fake_PEM.key>

Exit (Esci)

Esegui il comando seguente per arrestare key_mgmt_util.

Command: exit

Ora dovresti avere un nuovo file sul sistema, situato nel percorso specificato da <web_server_fake_PEM.key> nel comando precedente. Questo file è il file della chiave privata PEM falsa.

Generazione di un certificato auto-firmato

Dopo aver generato una chiave privata PEM falsa, puoi utilizzare questo file per generare una richiesta di firma del certificato (CSR) e un certificato.

In un ambiente di produzione, per creare un certificato da una CSR in genere ci si avvale di un'autorità di certificazione, che non è invece necessaria per un ambiente di test. Se ti affidi a un'autorità di certificazione, invia il file della CSR a tale autorità e utilizza il certificato SSL/TLS firmato che ti è stato fornito nel server Web per HTTPS.

In alternativa all'utilizzo di un'autorità di certificazione, è possibile utilizzare AWS CloudHSM OpenSSL Dynamic Engine per creare un certificato auto-firmato. I certificati autofirmati non sono considerati attendibili dai browser e non devono essere utilizzati negli ambienti di produzione, ma solo negli ambienti di test.

avvertimento

È consigliabile utilizzare i certificati autofirmati solo in un ambiente di test. Per un ambiente di produzione, è consigliabile utilizzare un metodo più sicuro, ad esempio un'autorità di certificazione per creare un certificato.

Installazione e configurazione di OpenSSL Dynamic Engine
  1. Effettuare la connessione all'istanza del client.

  2. Per l'installazione e la configurazione, esegui una delle seguenti operazioni:

Generazione di un certificato
  1. Ottieni una copia del file KeyStore generato in un passaggio precedente.

  2. Crea un CSR

    Esegui il comando seguente per utilizzare AWS CloudHSM OpenSSL Dynamic Engine per creare una richiesta di firma del certificato (CSR). Sostituire <web_server_fake_PEM.key> con il nome del file che contiene la chiave privata PEM falsa. Sostituire <web_server.csr> con il nome del file che contiene la CSR.

    Il comando req è interattivo. Ogni campo deve essere compilato e le informazioni vengono copiate nel certificato SSL/TLS.

    $ openssl req -engine cloudhsm -new -key <web_server_fake_PEM.key> -out <web_server.csr>
  3. Crea un certificato auto-firmato

    Esegui il comando seguente per utilizzare AWS CloudHSM OpenSSL Dynamic Engine per firmare la CSR con la chiave privata nell'HSM. In questo modo viene creato un certificato autofirmato. Sostituire i valori seguenti nel comando con i propri valori.

    • <web_server.csr>: il nome del file che contiene la CSR.

    • <web_server_fake_PEM.key>: il nome del file che contiene la chiave privata PEM falsa.

    • <web_server.crt>: il nome del file che conterrà il certificato del server Web.

    $ openssl x509 -engine cloudhsm -req -days 365 -in <web_server.csr> -signkey <web_server_fake_PEM.key> -out <web_server.crt>

Dopo aver completato queste operazioni, andare su Fase 3: configurazione del server Web.

Importa una chiave privata e un certificato esistenti

Se disponi già di una chiave privata e di un certificato SSL/TLS corrispondente che usi per HTTPS sul server Web, puoi importare la chiave in un HSM seguendo la procedura descritta in questa sezione.

Nota

Alcune note sull'importazione di chiavi private e sulla compatibilità con Client SDK:

  • L'importazione di una chiave privata esistente richiede Client SDK 3.

  • È possibile utilizzare le chiavi private di Client SDK 3 con Client SDK 5.

  • OpenSSL Dynamic Engine per Client SDK 3 non supporta le piattaforme Linux più recenti, che sono invece supportate con l'implementazione di OpenSSL Dynamic Engine per Client SDK 5. È possibile importare una chiave privata esistente utilizzando Key Management Utility (KMU) fornita con Client SDK 3, quindi utilizzare quella chiave privata e l'implementazione di OpenSSL Dynamic Engine con Client SDK 5 per supportare l'offload SSL/TLS sulle piattaforme Linux più recenti.

Per importare una chiave privata esistente in un HSM con Client SDK 3
  1. Esegui la connessione all'istanza del client Amazon EC2. Se necessario, copiare la chiave privata esistente e il certificato nell'istanza.

  2. Installa e configura Client SDK 3

  3. Eseguire il comando seguente per avviare il client AWS CloudHSM.

    Amazon Linux
    $ sudo start cloudhsm-client
    Amazon Linux 2
    $ sudo service cloudhsm-client start
    CentOS 7
    $ sudo service cloudhsm-client start
    CentOS 8
    $ sudo service cloudhsm-client start
    RHEL 7
    $ sudo service cloudhsm-client start
    RHEL 8
    $ sudo service cloudhsm-client start
    Ubuntu 16.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 18.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 20.04 LTS
    $ sudo service cloudhsm-client start
    Ubuntu 22.04 LTS

    Il supporto per OpenSSL Dynamic Engine non è ancora disponibile.

  4. Eseguire il comando seguente per avviare lo strumento a riga di comando key_mgmt_util.

    $ /opt/cloudhsm/bin/key_mgmt_util
  5. Eseguire il comando seguente per accedere all'HSM. Sostituire il <nome utente> e la <password> con i valori relativi all'utente di crittografia (CU).

    Command: loginHSM -u CU -s <user name> -p <password>
  6. Eseguire i comandi seguenti per importare la chiave privata in un HSM.

    1. Eseguire il comando seguente per creare una chiave di wrapping simmetrica valida solo per la sessione corrente. Di seguito sono riportati il comando e l'output.

      Command: genSymKey -t 31 -s 16 -sess -l wrapping_key_for_import Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 6 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
    2. Eseguire il comando seguente per importare la chiave privata esistente in un HSM. Di seguito sono riportati il comando e l'output. Sostituire i valori seguenti con i propri valori:

      • <web_server_existing.key>: il nome del file che contiene la chiave privata.

      • <web_server_imported_key>: l'etichetta per la chiave privata importata.

      • <wrapping_key_handle>: handle della chiave di wrapping generato dal comando precedente. Nell'esempio precedente, l'handle della chiave di wrapping è 6.

      Command: importPrivateKey -f <web_server_existing.key> -l <web_server_imported_key> -w <wrapping_key_handle> BER encoded key length is 1219 Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Private Key Unwrapped. Key Handle: 8 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
  7. Eseguire il comando seguente per esportare la chiave privata nel falso formato PEM e salvarla in un file. Sostituire i valori seguenti con i propri valori.

    • <private_key_handle>: handle della chiave privata importata. Questo handle è stato generato dal secondo comando nella fase precedente. Nell'esempio sopra riportato, l'handle della chiave privata è 8.

    • <web_server_fake_PEM.key>: il nome del file che contiene la chiave privata PEM falsa esportata.

    Command: getCaviumPrivKey -k <private_key_handle> -out <web_server_fake_PEM.key>
  8. Eseguire il comando seguente per arrestare key_mgmt_util.

    Command: exit

Dopo aver completato queste operazioni, andare su Fase 3: configurazione del server Web.