Usar o Client SDK 5 para integração com Java Keytool e Jarsigner - 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á.

Usar o Client SDK 5 para integração com Java Keytool e Jarsigner

AWS CloudHSM O armazenamento de chaves é um armazenamento de chaves JCE para fins especiais que utiliza certificados associados às chaves em seu HSM por meio de ferramentas de terceiros, como e. keytool jarsigner AWS CloudHSM não armazena certificados no HSM, pois os certificados são dados públicos e não confidenciais. O armazenamento de AWS CloudHSM chaves armazena os certificados em um arquivo local e mapeia os certificados para as chaves correspondentes no seu HSM.

Quando você usa o armazenamento de AWS CloudHSM chaves para gerar novas chaves, nenhuma entrada é gerada no arquivo de armazenamento de chaves local — as chaves são criadas no HSM. Da mesma forma, quando você usa o repositório de chaves do AWS CloudHSM para procurar chaves, a pesquisa é transmitida para o HSM. Quando você armazena certificados no armazenamento de AWS CloudHSM chaves, o provedor verifica se existe um par de chaves com o alias correspondente no HSM e, em seguida, associa o certificado fornecido ao par de chaves correspondente.

Pré-requisitos

Para usar o armazenamento de AWS CloudHSM chaves, primeiro você deve inicializar e configurar o SDK do AWS CloudHSM JCE.

Etapa 1: Instalar o JCE

Para instalar o JCE, incluindo os pré-requisitos AWS CloudHSM do cliente, siga as etapas para instalar a biblioteca Java.

Etapa 2: Adicionar credenciais de login do HSM a variáveis de ambiente

Configure variáveis de ambiente para conter suas credenciais de login do 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

O AWS CloudHSM JCE oferece várias opções de login. Para usar o armazenamento de AWS CloudHSM chaves com aplicativos de terceiros, você deve usar o login implícito com variáveis de ambiente. Se você quiser usar o login explícito por meio do código do aplicativo, deverá criar seu próprio aplicativo usando o armazenamento de AWS CloudHSM chaves. Para obter informações adicionais, consulte o artigo sobre Como usar o armazenamento de AWS CloudHSM chaves.

Etapa 3: Registrar o provedor JCE

Para registrar o provedor JCE na CloudProvider configuração Java, siga estas etapas:

  1. Abra o arquivo de configuração java.security em sua instalação Java para edição.

  2. No arquivo de configuração java.security, adicione com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider como o último provedor. Por exemplo, se houver nove provedores no arquivo java.security, adicione o provedor a seguir como o último provedor na seção:

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

nota

Adicionar o AWS CloudHSM provedor como uma prioridade mais alta pode afetar negativamente o desempenho do seu sistema, pois o AWS CloudHSM provedor será priorizado para operações que possam ser transferidas com segurança para o software. Como prática recomendada, sempre especifique o provedor que você deseja usar para uma operação, seja ele AWS CloudHSM ou um provedor baseado em software.

nota

A especificação de opções de linha de comando -providerName, -providerclass e -providerpath ao gerar chaves usando o keytool com o armazenamento de chave do AWS CloudHSM pode causar erros.

Usando o armazenamento de AWS CloudHSM chaves com o keytool

Keytool é um utilitário de linha de comando popular para tarefas comuns de chave e certificado. Um tutorial completo sobre o keytool está fora do escopo da documentação do AWS CloudHSM . Este artigo explica os parâmetros específicos que você deve usar com várias funções de ferramentas-chave ao utilizá-las AWS CloudHSM como raiz de confiança por meio do armazenamento de AWS CloudHSM chaves.

Ao usar o keytool com o armazenamento de AWS CloudHSM chaves, especifique os seguintes argumentos para qualquer comando keytool:

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

Se você quiser criar um novo arquivo de armazenamento de chaves usando o armazenamento de AWS CloudHSM chaves, consulteUsando AWS CloudHSM KeyStore. Para usar um armazenamento de chaves existente, especifique seu nome (incluindo o caminho) usando o argumento keystore para keytool. Se você especificar um arquivo de armazenamento de chaves inexistente em um comando keytool, o armazenamento de AWS CloudHSM chaves criará um novo arquivo de armazenamento de chaves.

Criar novas chaves com keytool

Você pode usar keytool para gerar os tipos de chaves RSA, AES e DESede suportadas pelo SDK JCE do AWS CloudHSM.

Importante

Uma chave gerada por meio do keytool é gerada no software e depois importada AWS CloudHSM como uma chave persistente e extraível.

É altamente recomendável gerar chaves não exportáveis fora do keytool e importar certificados correspondentes para o repositório de chaves. Se você usar chaves RSA ou EC extraíveis por meio do keytool e do Jarsigner, os provedores exportarão as chaves do e, em seguida, usarão a chave AWS CloudHSM localmente para operações de assinatura.

Se você tiver várias instâncias de cliente conectadas ao seu AWS CloudHSM cluster, saiba que importar um certificado no armazenamento de chaves de uma instância cliente não disponibilizará automaticamente os certificados em outras instâncias de cliente. Para registrar a chave e os certificados associados em cada instância do cliente, você precisa executar um aplicativo Java conforme descrito em Gerar um CSR usando keytool. Como alternativa, você pode fazer as alterações necessárias em um cliente e copiar o arquivo repositório de chaves resultante para todas as outras instâncias de cliente.

Exemplo 1: para gerar uma chave AES-256 simétrica e salvá-la em um arquivo armazenamento de chave chamado “my_keystore.store”, no diretório de trabalho. Substitua <secret label> por um rótulo exclusivo.

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\*"'

Exemplo 2: para gerar um par de chaves RSA 2048 e salvá-lo em um arquivo armazenamento de chave chamado “my_keystore.store”, no diretório de trabalho. Substitua <RSA key pair label> por um rótulo exclusivo.

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\*"'

Você pode encontrar uma lista de algoritmos de assinatura suportados na biblioteca Java.

Excluir uma chave usando keytool

O armazenamento de AWS CloudHSM chaves não suporta a exclusão de chaves. Você pode excluir chaves usando o método de destruição da interface Destrutível.

((Destroyable) key).destroy();

Gerar um CSR usando keytool

Você recebe a maior flexibilidade na geração de um pedido de assinatura de certificado (CSR) se você usar o Mecanismo dinâmico do OpenSSL. O comando a seguir usa o keytool para gerar um CSR para um par de chaves com o 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

Para usar um par de chaves da keytool, esse par de chaves deve ter uma entrada no arquivo de repositório de chaves especificado. Se você quiser usar um par de chaves que foi gerado fora do keytool, você deve importar os metadados de chave e certificado para o repositório de chaves. Para obter instruções sobre como importar os dados do armazenamento de chave, consulte. Usando o keytool para importar certificados intermediários e raiz para o armazenamento de AWS CloudHSM chaves

Usando o keytool para importar certificados intermediários e raiz para o armazenamento de AWS CloudHSM chaves

Para importar um certificado CA, você deve habilitar a verificação de uma cadeia de certificados completa em um certificado recém-importado. O seguinte comando mostra um exemplo.

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 você conectar várias instâncias do cliente ao seu AWS CloudHSM cluster, importar um certificado no armazenamento de chaves de uma instância do cliente não disponibilizará automaticamente o certificado em outras instâncias do cliente. Você deve importar o certificado em cada instância do cliente.

Usando o keytool para excluir certificados do armazenamento de AWS CloudHSM chaves

O comando a seguir mostra um exemplo de como excluir um certificado de um repositório de chaves Java keytool.

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 você conectar várias instâncias do cliente ao seu AWS CloudHSM cluster, a exclusão de um certificado no armazenamento de chaves de uma instância do cliente não removerá automaticamente o certificado de outras instâncias do cliente. Você deve excluir o certificado em cada instância de cliente.

Importando um certificado funcional para o armazenamento de AWS CloudHSM chaves usando o keytool

Depois que uma solicitação de assinatura de certificado (CSR) for assinada, você poderá importá-la para o repositório de chaves do AWS CloudHSM e associá-la ao par de chaves apropriado. O comando a seguir fornece um exemplo.

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\*"'

O alias deve ser um par de chaves com um certificado associado no repositório de chaves. Se a chave for gerada fora da ferramenta de chave ou for gerada em uma instância de cliente diferente, você deve primeiro importar os metadados de chave e certificado para o repositório de chaves.

A cadeia de certificados deve ser verificável. Se você não conseguir verificar o certificado, talvez seja necessário importar o certificado de assinatura (autoridade de certificação) para o repositório de chaves para que a cadeia possa ser verificada.

Exportar um certificado usando Keytool

O exemplo a seguir gera um certificado no formato binário X.509. Para exportar um certificado legível por humanos, adicione -rfc ao 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\*"'

Usando o armazenamento de AWS CloudHSM chaves com o Jarsigner

O Jarsigner é um utilitário de linha de comando popular para assinar arquivos JAR usando uma chave armazenada com segurança em um HSM. Um tutorial completo sobre Jarsigner está fora do escopo da documentação do AWS CloudHSM . Esta seção explica os parâmetros do Jarsigner que você deve usar para assinar e verificar assinaturas AWS CloudHSM como raiz de confiança por meio do AWS CloudHSM armazenamento de chaves.

Configuração de chaves e certificados

Antes de assinar arquivos JAR com Jarsigner, verifique se você configurou ou concluiu as seguintes etapas:

  1. Siga as orientações nos AWS CloudHSM pré-requisitos de repositório de chaves .

  2. Configure suas chaves de assinatura e os certificados associados e a cadeia de certificados, que devem ser armazenados no armazenamento de AWS CloudHSM chaves da instância atual do servidor ou cliente. Crie as chaves no AWS CloudHSM e, em seguida, importe os metadados associados para o seu armazenamento de AWS CloudHSM chaves. Se você quiser usar o keytool para configurar as chaves e certificados, consulte Criar novas chaves com keytool. Se você usar várias instâncias de cliente para assinar seus JARs, crie a chave e importe a cadeia de certificados. Em seguida, copie o arquivo de repositório de chaves resultante para cada instância do cliente. Se você gerar novas chaves com frequência, talvez seja mais fácil importar certificados individualmente para cada instância do cliente.

  3. Toda a cadeia de certificados deve ser verificável. Para que a cadeia de certificados seja verificável, talvez seja necessário adicionar o certificado CA e os certificados intermediários ao armazenamento de AWS CloudHSM chaves. Consulte o trecho de código em Assine um arquivo JAR usando AWS CloudHSM e Jarsigner para obter instruções sobre como usar o código Java para verificar a cadeia de certificados. Se preferir, você pode usar o keytool para importar certificados. Para obter instruções sobre como usar o keytool, consulte Usando o keytool para importar certificados intermediários e raiz para o armazenamento de AWS CloudHSM chaves .

Assine um arquivo JAR usando AWS CloudHSM e Jarsigner

Use o seguinte comando para assinar um arquivo JAR:

Linux;

Para 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>

Para 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

Para 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>

Para 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>

Use o seguinte comando para verificar um JAR assinado:

Linux

Para 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>

Para 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

Para 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>

Para 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>

Problemas conhecidos

  1. Não oferecemos suporte a chaves EC com Keytool e Jarsigner.