

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

# 使用 keytool 创建新 AWS CloudHSM 密钥
<a name="create_key_keytool"></a>

你可以使用 keytool 生成 AWS CloudHSM JCE SDK 支持的任何类型的密钥。请参阅 Java 库中[支持的密钥](java-lib-supported.md#java-keys)文章中的密钥和长度的完整列表。

**重要**  
通过 keytool 生成的密钥在软件中生成，然后 AWS CloudHSM 作为可提取的永久密钥导入到。

直接在硬件安全模块 (HSM) 上创建不可提取的密钥，然后将其与 keytool 或 Jarsigner 一起使用的说明见向密钥库[注册](register-pre-existing-keys-with-keystore.md)已存在的密钥中的代码示例。 AWS CloudHSM 我们强烈建议在 keytool 之外生成不可导出的密钥，然后将相应的证书导入密钥库。如果您通过 keytool 和 jarsigner 使用可提取的 RSA 或 EC 密钥，则提供程序会从中导出密钥， AWS CloudHSM 然后在本地使用该密钥进行签名操作。

如果您有多个客户端实例连接到 CloudHSM 集群，请注意，在一个客户端实例的密钥库上导入证书不会自动使证书在其他客户端实例上可用。要在每个客户端实例上注册密钥和关联证书，您需要运行 Java 应用程序，如[使用 Keytool 生成 CSR](generate_csr_using_keytool.md) 中所述。或者，您可以在一个客户端上进行必要的更改，并将生成的密钥库文件复制到其他每个客户端实例。

**示例 1：**生成对称 AES-256 密钥，并将其保存在工作目录中名为“example\_keystore.store”的密钥库文件中。{{<secret label>}}替换为唯一的标签。

```
keytool -genseckey -alias {{<secret label>}} -keyalg aes \
		-keysize 256 -keystore example_keystore.store \
		-storetype CloudHSM -J-classpath '-J/opt/cloudhsm/java/*' \
		-J-Djava.library.path=/opt/cloudhsm/lib/
```

**示例 2：**生成 RSA 2048 密钥对，并将其保存在工作目录中名为“example\_keystore.store”的密钥库文件中。{{<RSA key pair label>}}替换为唯一的标签。

```
keytool -genkeypair -alias {{<RSA key pair label>}} \
        -keyalg rsa -keysize 2048 \
        -sigalg sha512withrsa \
        -keystore example_keystore.store \
        -storetype CLOUDHSM \
        -J-classpath '-J/opt/cloudhsm/java/*' \
        -J-Djava.library.path=/opt/cloudhsm/lib/
```

**示例 3：**生成 p256 ED 密钥，并将其保存在工作目录中名为“example\_keystore.store”的密钥库文件中。{{<ec key pair label>}}替换为唯一的标签。

```
keytool -genkeypair -alias {{<ec key pair label>}} \
        -keyalg ec -keysize 256 \
        -sigalg SHA512withECDSA \
        -keystore example_keystore.store \
        -storetype CLOUDHSM \
        -J-classpath '-J/opt/cloudhsm/java/*' \
        -J-Djava.library.path=/opt/cloudhsm/lib/
```

您可以在 Java 库中找到[支持的签名算法](java-lib-supported.md#java-sign-verify)列表。