

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 更改 AWS CloudHSM 客户端密钥持久性设置
<a name="working-client-sync"></a>

密钥同步总体是一个自动过程，但您可以管理客户端密钥的耐久性设置。客户端软件开发工具包 5 和客户端软件开发工具包 3 中的客户端密钥持久性设置的运作方式不同。
+ 在 Client SDK 5 中，我们引入了*密钥可用性法定人数的概念，它要求您运行至少为两个*的集群。 HSMs您可以使用客户端密钥持久性设置，选择不要求使用两个 HSM。有关仲裁的更多信息，请参阅 [AWS CloudHSM 关键概念](concepts-key-sync.md)。
+ 在 Client SDK 3 中，您可以使用客户端密钥持久性设置来指定必须成功创建密钥的次数，才能将整个操作视为成功。 HSMs 

## 客户端软件开发工具包 5 客户端密钥持久性设置
<a name="client-sync-sdk8"></a>

在客户端软件开发工具包 5 中，密钥同步是全自动的过程。在密钥可用性法定人数下，新创建的密钥必须存在于集群 HSMs 中的两个上，然后您的应用程序才能使用该密钥。要使用密钥可用性法定人数，您的集群必须至少有两个。 HSMs

如果您的集群配置不符合密钥持久性要求，则任何创建或使用令牌密钥的尝试都将失败，并在日志中显示以下错误消息：

```
Key <key handle> does not meet the availability requirements - The key must be available on at least 2 HSMs before being used.
```

您可以使用客户端配置设置选择退出密钥可用性仲裁。例如，您可能希望选择不使用单个 HSM 运行集群。

### 客户端软件开发工具包 5 概念
<a name="client-sync-8concept"></a>

**密钥可用性仲裁**  
AWS CloudHSM 指定集群 HSMs 中必须存在密钥的数量，然后您的应用程序才能使用该密钥。需要至少有两个的集群 HSMs。

### 管理客户端密钥持久性设置
<a name="setting-file-sdk8"></a>

要管理客户端密钥持久性设置，必须使用客户端软件开发工具包 5 的配置工具。

------
#### [ PKCS \$111 library ]

**在 Linux 上禁用客户端软件开发工具包 5 的客户端密钥持久性**
+  使用配置工具禁用客户端密钥持久性设置。

  ```
  $ sudo /opt/cloudhsm/bin/configure-pkcs11 --disable-key-availability-check
  ```

**在 Windows 上禁用客户端软件开发工具包 5 的客户端密钥持久性**
+  使用配置工具禁用客户端密钥持久性设置。

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" --disable-key-availability-check
  ```

------
#### [ OpenSSL Dynamic Engine ]

**在 Linux 上禁用客户端软件开发工具包 5 的客户端密钥持久性**
+  使用配置工具禁用客户端密钥持久性设置。

  ```
  $ sudo /opt/cloudhsm/bin/configure-dyn --disable-key-availability-check
  ```

------
#### [ OpenSSL Dynamic Engine Provider ]

**在 Linux 上禁用客户端软件开发工具包 5 的客户端密钥持久性**
+  使用配置工具禁用客户端密钥持久性设置。

  ```
  $ sudo /opt/cloudhsm/bin/configure-openssl-provider --disable-key-availability-check
  ```

------
#### [ Key Storage Provider (KSP) ]

**在 Windows 上禁用客户端软件开发工具包 5 的客户端密钥持久性**
+  使用配置工具禁用客户端密钥持久性设置。

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-ksp.exe" --disable-key-availability-check
  ```

------
#### [ JCE provider ]

**在 Linux 上禁用客户端软件开发工具包 5 的客户端密钥持久性**
+  使用配置工具禁用客户端密钥持久性设置。

  ```
  $ sudo /opt/cloudhsm/bin/configure-jce --disable-key-availability-check
  ```

**在 Windows 上禁用客户端软件开发工具包 5 的客户端密钥持久性**
+  使用配置工具禁用客户端密钥持久性设置。

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --disable-key-availability-check
  ```

------
#### [ CloudHSM CLI ]

**在 Linux 上禁用客户端软件开发工具包 5 的客户端密钥持久性**
+  使用配置工具禁用客户端密钥持久性设置。

  ```
  $ sudo /opt/cloudhsm/bin/configure-cli --disable-key-availability-check
  ```

**在 Windows 上禁用客户端软件开发工具包 5 的客户端密钥持久性**
+  使用配置工具禁用客户端密钥持久性设置。

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-cli.exe" --disable-key-availability-check
  ```

------

## 客户端软件开发工具包 3 客户端密钥持久性设置
<a name="client-sync-sdk3"></a>

在客户端软件开发工具包 3 中，密钥同步总体是一个自动过程，但您可以使用客户端密钥持久性设置来提高密钥的耐久性。您可以指定必须成功创建密钥的 HSMs 次数，才能将整个操作视为成功。无论您选择什么设置，客户端同步功能始终会尽力将密钥克隆到集群中的每个 HSM。您的设置会强制根据 HSMs 您指定的数量创建密钥。如果您指定了一个值，但系统无法将该密钥复制到该数量的 HSMs，则系统会自动清理所有不需要的密钥材料，您可以重试。

**重要**  
如果您未设置客户端密钥持久性设置（或者使用默认值 1），则密钥很容易丢失。如果您当前的 HSM 在服务器端服务将该密钥克隆到另一个 HSM 前出现故障，则密钥材料会丢失。

为了最大限度地提高密钥的持久性，请考虑 HSMs 为客户端同步指定至少两个密钥。请记住，无论 HSMs 您指定多少，集群上的工作负载都保持不变。客户端同步总是尽最大努力将密钥克隆到集群中的每个 HSM。

**建议**
+ **最少**： HSMs 每个集群两个
+ **最大值**：比集群 HSMs 中的总数少一个

如果客户端同步失败，则客户端服务会清理可能已创建且现在不需要的所有不需要的密钥。这种清理是尽力而为的应对措施，可能并不总是奏效。如果清理失败，则可能需要您删除不需要的密钥材料。有关更多信息，请参阅[密钥同步故障](ts-client-sync-fail.md)。

### 为客户端密钥持久性设置配置文件
<a name="setting-file"></a>

要指定客户端密钥持久性设置，必须编辑 `cloudhsm_client.cfg`。

**编辑客户端配置文件**

1. 打开 `cloudhsm_client.cfg`。

   **Linux：**

   ```
   /opt/cloudhsm/etc/cloudhsm_client.cfg
   ```

   **Windows：**

   ```
   C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_client.cfg
   ```

1. 在文件`client`节点中，添加`create_object_minimum_nodes`并指定一个值，指定 AWS CloudHSM 必须成功创建密钥才能成功创建密钥才能成功创建密钥的最小数量。 HSMs 

   ```
   "create_object_minimum_nodes" : 2
   ```
**注意**  
key\$1mgmt\$1util (KMU) 命令行工具还有额外的客户端密钥持久性设置。有关更多信息，请参阅 [KMU 和客户端同步](#kmu-sync)。

#### 配置参考
<a name="client-side-ref"></a>

以下是客户端同步属性，如以下 `cloudhsm_client.cfg` 的摘录所示：

```
{
    "client": {
        "create_object_minimum_nodes" : 2,
        ...
    },
    
    ...
}
```

**create\$1object\$1minimum\$1nodes**  
指定认为密钥生成、密钥导入或密钥解包操作成功 HSMs 所需的最小数量。如果已设置，默认为“1”。这意味着，对于每个密钥创建操作，客户端服务都会尝试在集群中的每个 HSM 上创建密钥，但要返回“成功”，只需在集群中的一个 HSM 上创建*单个密钥*即可。

### KMU 和客户端同步
<a name="kmu-sync"></a>

*如果使用 key\$1mgmt\$1util (KMU) 命令行工具创建密钥，则使用可选的命令行参数 (`-min_srv`) 来限制要克隆密钥的数量。* HSMs 如果您在配置文件中指定命令行参数*和*值，则使用两个值 AWS CloudHSM 中较大的一个。

 有关更多信息，请参阅以下主题：
+ [DSAKey一代对](key_mgmt_util-genDSAKeyPair.md)
+ [ECCKey一代对](key_mgmt_util-genECCKeyPair.md)
+ [RSAKey一代对](key_mgmt_util-genRSAKeyPair.md)
+ [genSymKey](key_mgmt_util-genSymKey.md)
+ [importPrivateKey](key_mgmt_util-importPrivateKey.md)
+ [importPubKey](key_mgmt_util-importPubKey.md)
+ [imSymKey](key_mgmt_util-imSymKey.md)
+ [insertMaskedObject](key_mgmt_util-insertMaskedObject.md)
+ [unWrapKey](key_mgmt_util-unwrapKey.md)