

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

# 使用用戶端 SDK 3 搭配 keytool 使用 AWS CloudHSM 金鑰存放區
<a name="using_keystore_with_keytool"></a>

[ Keytool](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html) 是 Linux 系統中常見的金鑰和憑證任務的常用命令列執行程序。完整的 Keytool 教學並不在 AWS CloudHSM 文件範圍之內。本文說明透過金鑰存放區使用 AWS CloudHSM 作為信任根時，應搭配各種 AWS CloudHSM keytool 函數使用的特定參數。

搭配 AWS CloudHSM 金鑰存放區使用 keytool 時，請為任何 keytool 命令指定下列引數：

```
-storetype CLOUDHSM \
		-J-classpath '-J/opt/cloudhsm/java/*' \
		-J-Djava.library.path=/opt/cloudhsm/lib
```

如果您想要使用金鑰存放區建立新的 AWS CloudHSM 金鑰存放區檔案，請參閱 [使用 AWS CloudHSM 用戶端 SDK 3 的 AWS CloudHSM KeyStore](alternative-keystore.md#using_cloudhsm_keystore)。若要要使用現有的金鑰存放區，請使用金鑰存放區引數指定其名稱 (包含路徑) 至 Keytool。如果您在 keytool 命令中指定不存在的金鑰存放區檔案， AWS CloudHSM 金鑰存放區會建立新的金鑰存放區檔案。

# 使用 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\$1keystore.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\$1keystore.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\$1keystore.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)清單。

# 使用 AWS CloudHSM keytool 刪除金鑰
<a name="delete_key_using_keytool"></a>

 AWS CloudHSM 金鑰存放區不支援刪除金鑰。若要刪除金鑰，您必須使用 AWS CloudHSM命令列工具 的 `deleteKey`函數[使用 KMU 刪除 AWS CloudHSM 金鑰](key_mgmt_util-deleteKey.md)。

# 使用 keytool 產生 AWS CloudHSM CSR
<a name="generate_csr_using_keytool"></a>

如果您使用 [適用於 AWS CloudHSM 用戶端 SDK 5 的 OpenSSL 動態引擎](openssl-library.md)，您可以在產生憑證簽署要求 (CSR) 時獲得最大的彈性。以下命令使用 Keytool 來產生具有別名 `example-key-pair` 的金鑰對適用 CSR。

```
keytool -certreq -alias <key pair label> \
        -file example_csr.csr \
        -keystore example_keystore.store \
        -storetype CLOUDHSM \
        -J-classpath '-J/opt/cloudhsm/java/*' \
        -J-Djava.library.path=/opt/cloudhsm/lib/
```

**注意**  
若要使用 Keytool 的金鑰對，該金鑰對必須再指定的金鑰存放區檔案中有項目。如果您要使用非 Keytool 產生的金鑰對，則必須將金鑰和憑證中繼資料匯入至金鑰存放區。如需匯入金鑰存放區資料的指示，請參閱[使用 AWS CloudHSM Keytool 將中繼憑證和根憑證匯入金鑰存放區](import_cert_using_keytool.md)。

# 使用 keytool 將中繼憑證和根憑證匯入 AWS CloudHSM 金鑰存放區
<a name="import_cert_using_keytool"></a>

若要將 CA 憑證匯入 AWS CloudHSM，您必須在新匯入的憑證上啟用完整憑證鏈的驗證。以下為命令的範例。

```
keytool -import -trustcacerts -alias rootCAcert \
        -file rootCAcert.cert -keystore example_keystore.store \
        -storetype CLOUDHSM \
        -J-classpath '-J/opt/cloudhsm/java/*' \
        -J-Djava.library.path=/opt/cloudhsm/lib/
```

如果您將多個用戶端執行個體連接到 AWS CloudHSM 叢集，在某個用戶端執行個體的金鑰存放區上匯入憑證不會自動讓憑證在其他用戶端執行個體上可用。您必須在每個用戶端執行個體上匯入憑證。

# 使用 keytool 從 AWS CloudHSM 金鑰存放區刪除憑證
<a name="delete_cert_using_keytool"></a>

下列命令顯示如何從 Java keytool 金鑰存放區刪除 AWS CloudHSM 憑證的範例。

```
keytool -delete -alias mydomain -keystore \
        -keystore example_keystore.store \
        -storetype CLOUDHSM \
        -J-classpath '-J/opt/cloudhsm/java/*' \
        -J-Djava.library.path=/opt/cloudhsm/lib/
```

如果您將多個用戶端執行個體連接到 AWS CloudHSM 叢集，刪除某個用戶端執行個體金鑰存放區上的憑證不會自動從其他用戶端執行個體移除憑證。您必須在每個用戶端執行個體上刪除憑證。

# 使用 AWS CloudHSM keytool 將工作憑證匯入金鑰存放區
<a name="import_working_cert_using_keytool"></a>

憑證簽署要求 (CSR) 簽署後，您就可以將其匯入 AWS CloudHSM 金鑰存放區，並與適當的金鑰對建立關聯。以下是命令範例。

```
keytool -importcert -noprompt -alias <key pair label> \
        -file example_certificate.crt \
        -keystore example_keystore.store
        -storetype CLOUDHSM \
        -J-classpath '-J/opt/cloudhsm/java/*' \
        -J-Djava.library.path=/opt/cloudhsm/lib/
```

別名應為金鑰存放區中具有關聯憑證的金鑰對。如果金鑰是非 Keytool 產生，或是在不同的用戶端執行個體上產生，您就必須先將金鑰和憑證中繼資料匯入金鑰存放區。如需匯入憑證中繼資料的指示，請參閱[使用金鑰存放區註冊既有 AWS CloudHSM 金鑰](register-pre-existing-keys-with-keystore.md)中的程式碼範例。

憑證鏈必須是可驗證的。如果您無法驗證憑證，則可能需要將簽署 (憑證授權單位) 憑證匯入金鑰存放區，以便驗證該鏈結。

# AWS CloudHSM 使用 keytool 從 匯出憑證
<a name="export_cert_using_keytool"></a>

下列範例會產生二進位 X.509 格式的憑證。若要從 匯出人類可讀憑證 AWS CloudHSM，請將 `-rfc`新增至 `-exportcert`命令。

```
keytool -exportcert -alias <key pair label> \
        -file example_exported_certificate.crt \
        -keystore example_keystore.store \
        -storetype CLOUDHSM \
        -J-classpath '-J/opt/cloudhsm/java/*' \
        -J-Djava.library.path=/opt/cloudhsm/lib/
```