

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á.

# AWS CloudHSM KeyStore Classe Java para Client SDK 3
<a name="alternative-keystore"></a>

**A AWS CloudHSM `KeyStore` classe fornece um armazenamento de PKCS12 chaves para fins especiais que permite o acesso às AWS CloudHSM chaves por meio de aplicativos como **keytool** e jarsigner.** Este repositório de chaves pode armazenar certificados junto com os seus dados de chave e correlacioná-los com os dados da chave armazenados no AWS CloudHSM. 

**nota**  
Como os certificados são informações públicas e, para maximizar a capacidade de armazenamento de chaves criptográficas, AWS CloudHSM não oferece suporte ao armazenamento de certificados em HSMs.

A AWS CloudHSM `KeyStore` classe implementa a `KeyStore` Service Provider Interface (SPI) da Java Cryptography Extension (JCE). Para obter mais informações sobre o uso`KeyStore`, consulte [Classe KeyStore](https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html).

## Escolha o armazenamento de chaves apropriado para o AWS CloudHSM Client SDK 3
<a name="choosing_keystore"></a>

O provedor AWS CloudHSM Java Cryptographic Extension (JCE) vem com um armazenamento de chaves padrão de passagem e somente leitura que passa todas as transações para o HSM. Esse armazenamento de chaves padrão é diferente do de propósito especial AWS CloudHSM KeyStore. Na maioria das situações, você obterá melhor desempenho de runtime e throughput usando o padrão. Você só deve usar o AWS CloudHSM KeyStore para aplicativos em que precise de suporte para certificados e operações baseadas em certificados, além de transferir as principais operações para o HSM.

Embora ambos os armazenamentos de chaves usem o provedor JCE para operações, eles são entidades independentes e não trocam informações entre si. 

Carregue o repositório de chaves padrão para seu aplicativo Java da seguinte forma:

```
KeyStore ks = KeyStore.getInstance("Cavium");
```

Carregue o CloudHSM para fins especiais da seguinte forma: KeyStore 

```
KeyStore ks = KeyStore.getInstance("CloudHSM")
```

## Inicialize o AWS CloudHSM KeyStore for Client SDK 3
<a name="initialize_cloudhsm_keystore"></a>

Faça login AWS CloudHSM KeyStore da mesma forma que você faz login no provedor JCE. Você pode usar variáveis de ambiente ou o arquivo de propriedades do sistema e deve fazer login antes de começar a usar o CloudHSM KeyStore. Para obter um exemplo de login em um HSM usando o JCE, consulte [Login em um HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java).

Se desejar, você pode especificar uma senha para criptografar o PKCS12 arquivo local que contém os principais dados do armazenamento. Ao criar o AWS CloudHSM Keystore, você define a senha e a fornece ao usar os métodos load, set e get.

Instancie um novo objeto CloudHSM da seguinte forma: KeyStore 

```
ks.load(null, null);
```

Grave dados de repositório de chaves em um arquivo usando o método `store`. A partir desse ponto, você pode carregar o repositório de chaves existente usando o método `load` com o arquivo de origem e a senha da seguinte forma: 

```
ks.load(inputStream, password);
```

## Use o AWS CloudHSM KeyStore for AWS CloudHSM Client SDK 3
<a name="using_cloudhsm_keystore"></a>

[Um objeto KeyStore CloudHSM geralmente é usado por meio de um aplicativo de terceiros, [como](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jarsigner.html) jarsigner ou keytool.](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html) Você também pode acessar o objeto diretamente com código. 

AWS CloudHSM KeyStore está em conformidade com a KeyStore especificação da [classe](https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html) JCE e fornece as seguintes funções.
+ `load`

  Carrega o repositório de chaves do fluxo de entrada fornecido. Se uma senha foi definida ao salvar o repositório de chaves, essa mesma senha deve ser fornecida para que o carregamento seja bem-sucedido. Defina ambos os parâmetros como null para inicializar um novo repositório de chaves vazio.

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  ks.load(inputStream, password);
  ```
+ `aliases`

  Retorna uma enumeração dos nomes de alias de todas as entradas na instância de repositório de chaves dada. Os resultados incluem objetos armazenados localmente no PKCS12 arquivo e objetos residentes no HSM. 

  **Código de exemplo:**

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  for(Enumeration<String> entry = ks.aliases(); entry.hasMoreElements();) 
  	{    
  		String label = entry.nextElement();    
  		System.out.println(label);
  	}
  ```
+ `ContainsAlias`

  Retorna true se o repositório de chaves tiver acesso a pelo menos um objeto com o alias especificado. O armazenamento de chaves verifica os objetos armazenados localmente no PKCS12 arquivo e os objetos residentes no HSM.
+ `DeleteEntry`

  Exclui uma entrada de certificado do PKCS12 arquivo local. A exclusão de dados-chave armazenados em um HSM não é suportada usando o. AWS CloudHSM KeyStore Você pode excluir chaves com a ferramenta [key\_mgmt\_util](https://docs.aws.amazon.com/cloudhsm/latest/userguide/key_mgmt_util.html) do CloudHSM.
+ `GetCertificate`

  Retorna o certificado associado a um alias, se disponível. Se o alias não existir ou fizer referência a um objeto que não for um certificado, a função retornará NULL. 

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  Certificate cert = ks.getCertificate(alias)
  ```
+ `GetCertificateAlias`

  Retorna o nome (alias) da primeira entrada de repositório de chaves cujos dados correspondem ao certificado fornecido. 

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  String alias = ks.getCertificateAlias(cert)
  ```
+ `GetCertificateChain`

  Retorna a cadeia de certificados associada ao alias fornecido. Se o alias não existir ou fizer referência a um objeto que não for um certificado, a função retornará NULL. 
+ `GetCreationDate`

  Retorna a data de criação da entrada identificada pelo alias fornecido. Se uma data de criação não estiver disponível, a função retornará a data em que o certificado se tornou válido.
+ `GetKey`

  GetKey é passado para o HSM e retorna um objeto chave correspondente ao rótulo fornecido. Ao consultar `getKey` diretamente o HSM, ela pode ser usada para qualquer chave no HSM, independentemente de ter sido gerada pelo. KeyStore 

  ```
  Key key = ks.getKey(keyLabel, null);
  ```
+ `IsCertificateEntry`

  Verifica se a entrada com o alias fornecido representa uma entrada de certificado. 
+ `IsKeyEntry`

  Verifica se a entrada com o alias fornecido representa uma entrada de chave. A ação pesquisa o alias no PKCS12 arquivo e no HSM. 
+ `SetCertificateEntry`

  Atribui o certificado fornecido ao alias fornecido. Se o alias fornecido já estiver sendo usado para identificar uma chave ou certificado, um `KeyStoreException` é lançado. Você pode usar o código JCE para obter o objeto chave e, em seguida, usar o KeyStore `SetKeyEntry` método para associar o certificado à chave.
+ `SetKeyEntry` com chave `byte[]`

  **No momento, essa API não é compatível com o Client SDK 3.**
+ `SetKeyEntry` com objeto `Key`

  Atribui a chave fornecida ao alias fornecido e armazena-a dentro do HSM. Se o objeto `Key` não for do tipo `CaviumKey`, a chave será importada para o HSM como uma chave de sessão extraível. 

  Se o objeto `Key` for do tipo `PrivateKey`, ele deve ser acompanhado por uma cadeia de certificados correspondente. 

  Se o alias já existir, a `SetKeyEntry` chamada lança um `KeyStoreException` e impede que a chave seja substituída. Se a chave precisar ser substituída, use KMU ou JCE para esse fim. 
+ `EngineSize`

  Retorna o número de entradas no repositório de chaves.
+ `Store`

  Armazena o armazenamento de chaves no fluxo de saída fornecido como um PKCS12 arquivo e o protege com a senha fornecida. Além disso, mantém todas as chaves carregadas (que são definidas usando chamadas `setKey`).