

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 搭配使用的指示，會顯示在[向 AWS CloudHSM Key Store 註冊既有金鑰](register-pre-existing-keys-with-keystore.md)的程式碼範例中。我們強烈建議您不要在 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)清單。