Etapa 2: Gerar ou importar uma chave privada e um certificado SSL/TLS - AWS CloudHSM

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Etapa 2: Gerar ou importar uma chave privada e um certificado SSL/TLS

Para habilitar o HTTPS, o aplicativo do servidor Web (NGINX ou Apache) precisa de uma chave privada e de um certificado SSL/TLS correspondente. Para usar o servidor web SSL/TLS offload com AWS CloudHSM, você deve armazenar a chave privada em um HSM no seu cluster. AWS CloudHSM Você pode conseguir isso de uma das seguintes maneiras:

  • Se você ainda não tem uma chave privada e um certificado correspondente, gere uma chave privada em um HSM. Em seguida, use a chave privada para criar uma solicitação de assinatura de certificado (CSR), que é então assinada para produzir um certificadoSSL/TLS.

  • Se você já tiver uma chave privada e um certificado correspondente, importe a chave privada para um HSM.

Independentemente de qual dos métodos anteriores você escolher, você exporta uma chave privada PEM falsa do HSM, que é um arquivo de chave privada no formato PEM que contém uma referência à chave privada armazenada no HSM (não é a chave privada real). Seu servidor web usa o arquivo da chave privada PEM falsa para identificar a chave privada no HSM durante o descarregamento de SSL/TLS.

Gerar uma chave privada e um certificado

Gerar uma chave privada

Esta seção mostra como gerar um par de chaves usando o Key Management Utility (KMU) do Client SDK 3. Depois de gerar um par de chaves dentro do HSM, você pode exportá-lo como um arquivo PEM falso e gerar o certificado correspondente.

As chaves privadas geradas com o Key Management Utility (KMU) podem ser usadas com o Client SDK 3 e Client SDK 5.

Instalar e configurar o Key Management Utility (KMU)
  1. Conecte-se à instância do cliente.

  2. Instale e configure o Client SDK 3.

  3. Execute o comando a seguir para iniciar o AWS CloudHSM cliente.

    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

    O suporte para o OpenSSL Dynamic Engine ainda não está disponível.

  4. Execute o comando a seguir para iniciar a ferramenta da linha de comando key_mgmt_util.

    $ /opt/cloudhsm/bin/key_mgmt_util
  5. Execute o seguinte comando para fazer login no HSM. Substitua <user name> e <password> pelo nome do usuário e a senha do usuário de criptografia (CU).

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

Gerar uma chave privada

Dependendo do seu caso de uso, você pode gerar um RSA ou um par de chaves EC. Execute um destes procedimentos:

  • Para gerar uma chave privada RSA em um HSM

    Use o comando genRSAKeyPair para gerar um par de chaves RSA. Este exemplo gera um par de chaves RSA com um módulo de 2048, um expoente público de 65537 e um rótulo de tls_rsa_keypair.

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

    Se o comando tiver sido bem-sucedido, você verá a seguinte saída indicando que gerou com êxito um par de chaves 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
  • Para gerar uma chave privada EC em um HSM

    Use o comando genECCKeyPair para gerar um par de chaves EC. Este exemplo gera um par de chaves EC com um ID de curva de 2 (correspondente à curva NID_X9_62_prime256v1 ) e um rótulo de tls_ec_keypair.

    Command: genECCKeyPair -i 2 -l tls_ec_keypair

    Se o comando tiver sido bem-sucedido, você verá a seguinte saída indicando que você gerou com êxito um par de chaves 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

Exportar um arquivo de chave privada PEM falso

Depois de ter uma chave privada no HSM, você deve exportar um arquivo de chave privada PEM falso. Esse arquivo não contém os dados reais da chave, mas permite que o OpenSSL Dynamic Engine identifique a chave privada no HSM. Em seguida, use a chave privada para criar uma solicitação de assinatura de certificado (CSR) e assinar o CSR para criar um certificado.

nota

Arquivos de armazenamento de chaves gerados com o Key Management Utility (KMU) podem ser usadas com o Client SDK 3 e Client SDK 5.

Verifique o identificador da chave que corresponde à chave que você gostaria de exportar como um PEM falso e execute o comando a seguir para exportar a chave privada no formato PEM falso e salvá-la em um arquivo. Substitua os seguintes valores pelo seu próprio.

  • <private_key_handle> Identificador da chave privada gerada. Esse identificador foi gerado por um dos comando de geração de chave na etapa anterior. No exemplo anterior, o identificador da chave privada é 8.

  • <web_server_fake_PEM.key> Nome do arquivo no qual sua chave PEM falsa será gravada.

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

Exit

Execute o seguinte comando para interromper a key_mgmt_util.

Command: exit

Agora você deve ter um novo arquivo em seu sistema, localizado no caminho especificado por <web_server_fake_PEM.key> no comando anterior. Esse arquivo é o arquivo de chave privada PEM falso.

Gere um certificado autoassinado

Depois de gerar uma chave privada PEM falsa, você pode usar esse arquivo para gerar uma solicitação de assinatura de certificado (CSR) e um certificado.

Em um ambiente de produção, geralmente usa-se uma autoridade de certificação (CA) para criar um certificado de uma CSR. Não é necessária uma CA para um ambiente de teste. Se você usa uma CA, envie o arquivo CSR para eles e use o certificado SSL/TLS assinado que eles fornecem em seu servidor web para HTTPS.

Como alternativa ao uso de uma CA, você pode usar o AWS CloudHSM OpenSSL Dynamic Engine para criar um certificado autoassinado. Os certificados autoassinados não são confiáveis para os navegadores e não devem ser usados em ambientes de produção. Eles podem ser usados em ambientes de teste.

Atenção

Os certificados autoassinados devem ser usados apenas em um ambiente de teste. Para um ambiente de produção, use um método mais seguro, como uma autoridade de certificação, para criar um certificado.

Instalar e configurar o OpenSSL Dynamic Engine
  1. Conecte-se à instância do cliente.

  2. Para instalar e configurar, faça um dos seguintes procedimentos:

Gere um certificado
  1. Obtenha uma cópia do arquivo PEM falso gerado em uma etapa anterior.

  2. Crie uma CSR

    Execute o comando a seguir para usar o AWS CloudHSM OpenSSL Dynamic Engine para criar uma solicitação de assinatura de certificado (CSR). Substitua <web_server_fake_PEM.key> pelo nome do arquivo que contém a chave privada PEM falsa. Substitua <web_server.csr> pelo nome do arquivo que contém a CSR.

    O comando req é interativo. Responda a cada campo. As informações do campo são copiadas para o certificado SSL/TLS.

    $ openssl req -engine cloudhsm -new -key <web_server_fake_PEM.key> -out <web_server.csr>
  3. Criar um certificado autoassinado

    Execute o comando a seguir para usar o AWS CloudHSM OpenSSL Dynamic Engine para assinar sua CSR com sua chave privada em seu HSM. Isso cria um certificado autoassinado. Substitua os valores a seguir no comando pelos seus próprios.

    • <web_server.csr> – Nome do arquivo que contém o CSR.

    • <web_server_fake_PEM.key> – Nome do arquivo que contém a chave privada PEM falsa.

    • <web_server.crt> – Nome do arquivo que conterá o certificado do servidor Web.

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

Depois de concluir essas etapas, vá para Etapa 3: configure o servidor Web.

Importar uma chave privada e um certificado existentes

Pode ser que você já tenha uma chave privada e um certificado SSL/TLS correspondente que use para HTTPS em seu servidor Web. Se esse for o caso, você pode importar a chave para um HSM seguindo as etapas desta seção.

nota

Algumas observações sobre importações de chaves privadas e compatibilidade com o Client SDK:

  • A importação de uma chave privada existente requer o Client SDK 3.

  • Você pode usar chaves privadas do Client SDK 3 com o Client SDK 5.

  • O OpenSSL Dynamic Engine para Client SDK 3 não é compatível com as plataformas Linux mais recentes, mas a implementação do OpenSSL Dynamic Engine para Client SDK 5 sim. Você pode importar uma chave privada existente usando o Key Management Utility (KMU) fornecido com o Client SDK 3 e, em seguida, usar essa chave privada e a implementação do OpenSSL Dynamic Engine com o Client SDK 5 para suportar o descarregamento de SSL/TLS nas plataformas Linux mais recentes.

Para importar uma chave privada para um HSM com o Client SDK 3.
  1. Conecte-se à sua instância do cliente Amazon EC2. Se necessário, copie a chave privada e o certificado existentes para a instância.

  2. Instalar e configurar o Client SDK 3.

  3. Execute o comando a seguir para iniciar o AWS CloudHSM cliente.

    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

    O suporte para o OpenSSL Dynamic Engine ainda não está disponível.

  4. Execute o comando a seguir para iniciar a ferramenta da linha de comando key_mgmt_util.

    $ /opt/cloudhsm/bin/key_mgmt_util
  5. Execute o seguinte comando para fazer login no HSM. Substitua <user name> e <password> pelo nome do usuário e a senha do usuário de criptografia (CU).

    Command: loginHSM -u CU -s <user name> -p <password>
  6. Execute os comandos a seguir para importar sua chave privada em um HSM.

    1. Execute o comando a seguir para criar uma chave de encapsulamento simétrica que seja válida somente para a sessão atual. O comando e a saída são exibidos.

      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. Execute o comando a seguir para importar sua chave privada existente em um HSM. O comando e a saída são exibidos. Substitua os seguintes valores pelo seu próprio:

      • <web_server_existing.key> – Nome do arquivo que contém a chave privada.

      • <web_server_imported_key> – Rótulo da chave privada importada.

      • <wrapping_key_handle> – Identificador da chave de encapsulamento gerada no comando anterior. No exemplo anterior, o identificador de chave de encapsulamento é 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. Execute o seguinte comando para exportar a chave privada no formato PEM falso e salvá-lo em um arquivo. Substitua os seguintes valores pelo seu próprio.

    • <private_key_handle> – Identificador da chave privada importada. Esse identificador foi gerado pelo segundo comando na etapa anterior. No exemplo anterior, o identificador da chave privada é 8.

    • <web_server_fake_PEM.key> – Nome do arquivo que contém a chave privada PEM falsa exportada.

    Command: getCaviumPrivKey -k <private_key_handle> -out <web_server_fake_PEM.key>
  8. Execute o seguinte comando para interromper a key_mgmt_util.

    Command: exit

Depois de concluir essas etapas, vá para Etapa 3: configure o servidor Web.