

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

# AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫
<a name="pkcs11-library"></a>

PKCS \$111 是在硬體安全模組 (HSMs) 上執行加密作業的標準。 AWS CloudHSM 提供與 PKCS \$111 2.40 版相容的 PKCS \$111 程式庫的實作方式。

如需關於啟動載入的資訊，請參閱 [連接至叢集](cluster-connect.md)。如需故障診斷，請參閱 [的 PKCS \$111 程式庫已知問題 AWS CloudHSMPKCS \$111 程序庫的已知問題](ki-pkcs11-sdk.md)。

如需關於使用用戶端 SDK 3 的資訊，請參閱 [使用先前的 SDK 版本來使用 AWS CloudHSM](choose-client-sdk.md)。

**Topics**
+ [安裝 PKCS \$111 程式庫](pkcs11-library-install.md)
+ [驗證為 PKCS \$111 程式庫](pkcs11-pin.md)
+ [金鑰類型](pkcs11-key-types.md)
+ [機制](pkcs11-mechanisms.md)
+ [API 操作](pkcs11-apis.md)
+ [金錀屬性](pkcs11-attributes.md)
+ [程式碼範例](pkcs11-samples.md)
+ [進階組態。](pkcs11-library-configs.md)
+ [憑證儲存](pkcs11-certificate-storage.md)

# 安裝 AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫
<a name="pkcs11-library-install"></a>

本主題提供安裝 AWS CloudHSM 用戶端 SDK 5 版本系列的最新版 PKCS \$111 程式庫的說明。如需關於用戶端 SDK 或 PKCS \$111 程式庫的詳細資訊，請參閱[使用用戶端 SDK](use-hsm.md) 和 [PKCS \$111 程式庫](pkcs11-library.md)。

使用用戶端 SDK 5 時，您無需安裝或執行用戶端常駐程式。

若要使用用戶端 SDK 5 執行單一 HSM 叢集，您必須先將 `disable_key_availability_check` 設定為 `True` 來管理用戶端金鑰持久性。如需詳細資訊，請參閱[金鑰同步處理](manage-key-sync.md)和[用戶端 SDK 5 設定工具](configure-sdk-5.md)。

如需關於用戶端 SDK 5 中 PKCS \$111 程式庫的詳細資訊，請參閱 [PKCS \$111 程式庫](pkcs11-library.md)。

**注意**  
若要使用用戶端 SDK 5 執行單一 HSM 叢集，您必須先將 `disable_key_availability_check` 設定為 `True` 來管理用戶端金鑰持久性。如需詳細資訊，請參閱[金鑰同步處理](manage-key-sync.md)和[用戶端 SDK 5 設定工具](configure-sdk-5.md)。

**若要安裝和設定 PKCS \$111 程式庫**

1. 使用以下命令來下載和安裝 PKCS \$111 程式庫。

------
#### [ Amazon Linux 2023 ]

   在 X86\$164 架構上安裝 Amazon Linux 2023 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-pkcs11-latest.amzn2023.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.amzn2023.x86_64.rpm
   ```

   在 ARM64 架構上安裝 Amazon Linux 2023 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Amzn2023/cloudhsm-pkcs11-latest.amzn2023.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.amzn2023.aarch64.rpm
   ```

------
#### [ Amazon Linux 2 ]

   安裝適用於 Amazon Linux 2 (X86\$164 架構) 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-pkcs11-latest.el7.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el7.x86_64.rpm
   ```

   安裝適用於 Amazon Linux 2 (ARM64 架構) 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-pkcs11-latest.el7.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el7.aarch64.rpm
   ```

------
#### [ RHEL 10 (10.0\$1) ]

   在 X86\$164 架構上安裝 RHEL 10 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL10/cloudhsm-pkcs11-latest.el10.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el10.x86_64.rpm
   ```

   在 ARM64 架構上安裝 RHEL 10 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL10/cloudhsm-pkcs11-latest.el10.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el10.aarch64.rpm
   ```

------
#### [ RHEL 9 (9.2\$1) ]

   在 X86\$164 架構上安裝 RHEL 9 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-pkcs11-latest.el9.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el9.x86_64.rpm
   ```

   在 ARM64 架構上安裝 RHEL 9 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL9/cloudhsm-pkcs11-latest.el9.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el9.aarch64.rpm
   ```

------
#### [ RHEL 8 (8.3\$1) ]

   在 X86\$164 架構上安裝 RHEL 8 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-pkcs11-latest.el8.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el8.x86_64.rpm
   ```

   在 ARM64 架構上安裝 RHEL 8 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-pkcs11-latest.el8.aarch64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-pkcs11-latest.el8.aarch64.rpm
   ```

------
#### [ Ubuntu 24.04 LTS ]

   在 X86\$164 架構上安裝適用於 Ubuntu 24.04 LTS 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-pkcs11_latest_u24.04_amd64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-pkcs11_latest_u24.04_amd64.deb
   ```

   在 ARM64 架構上安裝適用於 Ubuntu 24.04 LTS 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Noble/cloudhsm-pkcs11_latest_u24.04_arm64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-pkcs11_latest_u24.04_arm64.deb
   ```

------
#### [ Ubuntu 22.04 LTS ]

   安裝適用於 Ubuntu 22.04 LTS (X86\$164 架構) 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Jammy/cloudhsm-pkcs11_latest_u22.04_amd64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-pkcs11_latest_u22.04_amd64.deb
   ```

   在 ARM64 架構上安裝適用於 Ubuntu 22.04 LTS 的 PKCS \$111 程式庫：

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Jammy/cloudhsm-pkcs11_latest_u22.04_arm64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-pkcs11_latest_u22.04_arm64.deb
   ```

------
#### [ Windows Server ]

   在 X86\$164 架構上安裝適用於 Windows Server 的 PKCS \$111 程式庫：

   1. 下載[適用於用戶端 SDK 5 的 PKCS \$111 程式庫](https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMPKCS11-latest.msi)。

   1. 以 Windows 管理權限執行 PKCS \$111 程式庫安裝程式 (**AWSCloudHSMPKCS11-latest.msi**)。

------

1. 使用設定工具指定發行憑證的位置。如需說明，請參閱[指定憑證的位置。](cluster-connect.md#specify-cert-location)。

1. 若要連線到您的叢集，請參閱 [引導用戶端 SDK](cluster-connect.md#connect-how-to)。

1. 您可於下列位置找到 PKCS \$111 程式庫檔案：
   + Linux 二進位檔案、組態指令碼和日誌文檔：

     ```
     /opt/cloudhsm
     ```

     Windows 二進位檔案：

     ```
     C:\Program Files\Amazon\CloudHSM
     ```

     Windows組態指令碼和日誌檔案：

     ```
     C:\ProgramData\Amazon\CloudHSM
     ```

# 驗證至 AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫
<a name="pkcs11-pin"></a>

當您使用 PKCS \$111 程式庫時，您的應用程式會在 HSMs 中以特定[加密使用者 (CU)](manage-hsm-users.md) 身分執行 AWS CloudHSM。您的應用程式只能檢視和管理 CU 所擁有和共用的金鑰。您可以使用 HSM 中現有的 CU，或為應用程式建立新的 CU。如需關於管理 CU 的資訊，請參閱[使用 CloudHSM CLI 管理 HSM 使用者](manage-hsm-users-chsm-cli.md)和[使用 CloudHSM 管理公用程式 (CMU) 管理 HSM 使用者](manage-hsm-users-cmu.md)。

若要將 CU 指定給 PKCS \$111 程式庫，請使用 PKCS \$111 [C\$1Login 函數](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc385057915)的 pin 參數。對於 AWS CloudHSM，接腳參數的格式如下：

```
<CU_user_name>:<password>
```

例如，以下命令會將 PKCS \$111 程式庫 pin 設定給使用者名稱為 `CryptoUser` 和密碼為 `CUPassword123!` 的 CU。

```
CryptoUser:CUPassword123!
```

# AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫支援的金鑰類型
<a name="pkcs11-key-types"></a>

 AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫支援下列金鑰類型。


****  

| 金鑰類型 | Description | 
| --- | --- | 
| AES | 產生 128 位元、192 位元和 256 位元的 AES 金鑰。 | 
| Triple DES (3DES, DESede) | 產生 192 位元的三重 DES 金鑰。請參閱下列備註 [1](#key-types-1) 查看即將進行的變更。 | 
| EC | 使用 secp224r1 (P-224)、secp256r1 (P-256)、secp256k1 (Blockchain)、secp384r1 (P-384) 和 secp521r1 (P-521)曲線產生金鑰。 | 
| GENERIC\$1SECRET | 產生 1 到 800 位元組的一般機密。 | 
| RSA | 產生 2048 位元至 4096 位元的 RSA 金鑰，以 256 位元為單位遞增。 | 

【1】 根據 NIST 指引，在 2023 年之後，不允許在 FIPS 模式下使用叢集。對於處於非 FIPS 模式的叢集，在 2023 年之後仍然允許。如需詳細資訊，請參閱 [FIPS 140 合規性：2024 機制棄用](compliance-dep-notif.md#compliance-dep-notif-1)。

# AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫支援的機制
<a name="pkcs11-mechanisms"></a>

PKCS \$111 程式庫與 PKCS \$111 規格的 2.40 版相容。若要使用 PKCS \$111 叫用加密功能，請利用指定機制呼叫函數。下列各節摘要了 AWS CloudHSM 用戶端 SDK 5 支援的函數和機制組合。

PKCS \$111 程式庫支援下列演算法：
+ **加密和解密**：AES-CBC、AES-CTR、AES-ECB、AES-GCM、DES3-CBC、DES3-ECB、RSA-OAEP 和 RSA-PKCS
+ **簽署和驗證**：RSA、HMAC 和 ECDSA；無論是否使用雜湊皆不影響
+ **雜湊/摘要**：SHA1、SHA224、SHA256、SHA384 和 SHA512
+ **金鑰包裝**：AES 金鑰包裝、[1](#mech1) AES-GCM、RSA-AES 和 RSA-OAEP
+ **金鑰衍生** – SP800-108 計數器 KDF 和 ECDH 搭配 KDF （支援的 KDF 演算法為 X9.63 搭配 SHA1, SHA224, SHA256, SHA384, SHA512)

**Topics**
+ [產生金鑰與金鑰對函數](#pkcs11-mech-function-genkey)
+ [簽署和驗證函數](#pkcs11-mech-function-signverify)
+ [簽名恢復和驗證復原函數](#pkcs11-mech-function-sr-vr)
+ [Digest 函數](#pkcs11-mech-function-digest)
+ [加密和解密函數](#pkcs11-mech-function-enc-dec)
+ [衍生金鑰函數](#pkcs11-mech-function-derive-key)
+ [包裝和解包函數](#pkcs11-mech-function-wrap-unwrap)
+ [每個機制的資料大小上限](#pkcs11-mech-max)
+ [機制註釋](#pkcs11-mech-annotations)

## 產生金鑰與金鑰對函數
<a name="pkcs11-mech-function-genkey"></a>

PKCS \$111 程式庫 AWS CloudHSM 的軟體程式庫可讓您使用下列機制來產生金鑰和金鑰對函數。
+ `CKM_RSA_PKCS_KEY_PAIR_GEN`
+ `CKM_RSA_X9_31_KEY_PAIR_GEN`：此機制的功能與 `CKM_RSA_PKCS_KEY_PAIR_GEN` 機制完全相同，但在產生 `p` 和 `q` 時提供更強大的保證。
+ `CKM_EC_KEY_PAIR_GEN`
+ `CKM_GENERIC_SECRET_KEY_GEN`
+ `CKM_AES_KEY_GEN`
+ `CKM_DES3_KEY_GEN`：註腳 [5](#mech5) 所列的即將進行的變更。

## 簽署和驗證函數
<a name="pkcs11-mech-function-signverify"></a>

PKCS \$111 程式庫 AWS CloudHSM 的軟體程式庫可讓您針對 Sign and Verify 函數使用下列機制。使用用戶端 SDK 5，資料會在軟體中進行本機雜湊處理。這意味著 SDK 可以對任何大小的資料進行雜湊處理。

使用用戶端 SDK 5 RSA 和 ECDSA 時，雜湊在本機完成，因此沒有資料限制。使用 HMAC 時，會有資料限制。如需詳細咨詢，請參閱註腳 [2](#mech2)。

**RSA**
+ `CKM_RSA_X_509`
+ `CKM_RSA_PKCS`：僅限單一部分操作。
+ `CKM_RSA_PKCS_PSS`：僅限單一部分操作。
+ `CKM_SHA1_RSA_PKCS`
+ `CKM_SHA224_RSA_PKCS`
+ `CKM_SHA256_RSA_PKCS`
+ `CKM_SHA384_RSA_PKCS`
+ `CKM_SHA512_RSA_PKCS`
+ `CKM_SHA512_RSA_PKCS`
+ `CKM_SHA1_RSA_PKCS_PSS`
+ `CKM_SHA224_RSA_PKCS_PSS`
+ `CKM_SHA256_RSA_PKCS_PSS`
+ `CKM_SHA384_RSA_PKCS_PSS`
+ `CKM_SHA512_RSA_PKCS_PSS`

**ECDSA**
+ `CKM_ECDSA`：僅限單一部分操作。
+ `CKM_ECDSA_SHA1`
+ `CKM_ECDSA_SHA224`
+ `CKM_ECDSA_SHA256`
+ `CKM_ECDSA_SHA384`
+ `CKM_ECDSA_SHA512`

**HMAC**
+ `CKM_SHA_1_HMAC`[2](#mech2)
+ `CKM_SHA224_HMAC`[2](#mech2)
+ `CKM_SHA256_HMAC`[2](#mech2)
+ `CKM_SHA384_HMAC`[2](#mech2)
+ `CKM_SHA512_HMAC`[2](#mech2)

**CMAC**
+ `CKM_AES_CMAC`

## 簽名恢復和驗證復原函數
<a name="pkcs11-mech-function-sr-vr"></a>

用戶端 SDK 5 不支援簽名恢復和驗證復原函數。

## Digest 函數
<a name="pkcs11-mech-function-digest"></a>

適用於 PKCS \$111 程式庫 AWS CloudHSM 的軟體程式庫可讓您針對摘要函數使用下列機制。使用用戶端 SDK 5，資料會在軟體中進行本機雜湊處理。這意味著 SDK 可以對任何大小的資料進行雜湊處理。
+ `CKM_SHA_1`
+ `CKM_SHA224`
+ `CKM_SHA256`
+ `CKM_SHA384`
+ `CKM_SHA512`

## 加密和解密函數
<a name="pkcs11-mech-function-enc-dec"></a>

適用於 PKCS \$111 程式庫 AWS CloudHSM 的軟體程式庫可讓您針對加密和解密函數使用下列機制。
+ `CKM_RSA_X_509`
+ `CKM_RSA_PKCS`：僅限單一部分操作。註腳 [5](#mech5) 所列的即將進行的變更。
+ `CKM_RSA_PKCS_OAEP`：僅限單一部分操作。
+ `CKM_AES_ECB`
+ `CKM_AES_CTR`
+ `CKM_AES_CBC`
+ `CKM_AES_CBC_PAD`
+ `CKM_DES3_CBC`：註腳 [5](#mech5) 所列的即將進行的變更。
+ `CKM_DES3_ECB`：註腳 [5](#mech5) 所列的即將進行的變更。
+ `CKM_DES3_CBC_PAD`：註腳 [5](#mech5) 所列的即將進行的變更。
+  `CKM_AES_GCM` [1](#mech1), [2](#mech2)
+ `CKM_CLOUDHSM_AES_GCM`[3](#mech3)

## 衍生金鑰函數
<a name="pkcs11-mech-function-derive-key"></a>

PKCS \$111 程式庫 AWS CloudHSM 的軟體程式庫支援下列金鑰衍生機制：
+ `CKM_SP800_108_COUNTER_KDF`
+ `CKM_ECDH1_DERIVE` - 支援下列廠商定義 KDF 類型的 ECDH 金鑰衍生[6](#kdf6)：
  + `CKD_CLOUDHSM_X963_SHA1_KDF` - X9.63 KDF 搭配 SHA1[7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA224_KDF` - X9.63 KDF 搭配 SHA224[7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA256_KDF` - X9.63 KDF 搭配 SHA256[7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA384_KDF` - X9.63 KDF 搭配 SHA384[7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA512_KDF` - X9.63 KDF 搭配 SHA512[7](#kdf7)

## 包裝和解包函數
<a name="pkcs11-mech-function-wrap-unwrap"></a>

PKCS \$111 程式庫 AWS CloudHSM 的軟體程式庫可讓您針對包裝和取消包裝函數使用下列機制。

如需有關 AES 金鑰包裝的其他資訊，請參閱[AES 金鑰包裝](manage-aes-key-wrapping.md)。
+ `CKM_RSA_PKCS`：僅限單一部分操作。註腳 [5](#mech5) 所列的即將進行的變更。
+ `CKM_RSA_PKCS_OAEP`[4](#mech4)
+ `CKM_AES_GCM`[1](#mech1), [3](#mech3)
+ `CKM_CLOUDHSM_AES_GCM`[3](#mech3)
+ `CKM_RSA_AES_KEY_WRAP`
+ `CKM_CLOUDHSM_AES_KEY_WRAP_NO_PAD`[3](#mech3)
+ `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD`[3](#mech3)
+ `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`[3](#mech3)

## 每個機制的資料大小上限
<a name="pkcs11-mech-max"></a>

下表列出每個機制設定的資料大小上限：


**資料集大小上限**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-mechanisms.html)

## 機制註釋
<a name="pkcs11-mech-annotations"></a>
+  [1] 當執行 AES-GCM 加密時，HSM 不會接受來自應用程式的初始化向量 (IV) 資料。請務必使用其產生的 IV。系統會將 HSM 所提供的 12 位元組 IV 寫入記憶體參考，該記憶體參考是由您提供的 `CK_GCM_PARAMS` 參數結構 pIV 元素所指向。為了確保使用者不會混淆，在初始化 AES-GCM 加密時，1.1.1 版和更新版本中的 PKCS \$1 11 開發套件會強制將該 pIV 指向歸零的緩衝區。
+  [2] 當使用下列任一機制操作資料時，若資料緩衝區超過資料大小上限，該操作就會導致錯誤。對於這些機制，所有資料處理都必須在 HSM 內進行。如需每個機制的最大資料大小集資訊，請參閱 [每個機制的資料大小上限](#pkcs11-mech-max)。
+  [3] 廠商定義的機制。為了能使用 CloudHSM 廠商定義的機制，編譯期間 PKCS \$111 應用程式必須加入 `/opt/cloudhsm/include/pkcs11/pkcs11t.h`。

  `CKM_CLOUDHSM_AES_GCM`：這個專屬機制是標準 `CKM_AES_GCM` 程式設計更安全的替代方案。這將 HSM 生成的 IV 加入至加密文字的開頭，而不是將它寫回加密初始化期間提供的 `CK_GCM_PARAMS` 結構中。您可以搭配 `C_Encrypt`、`C_WrapKey`、`C_Decrypt` 和 `C_UnwrapKey` 函數搭配使用此機制。使用此機制時，`CK_GCM_PARAMS` 結構中的 pIV 變數必須設定為 `NULL`。與 `C_Decrypt` 和 `C_UnwrapKey` 搭配使用此機制時，IV 應至於取消包裝的加密文字之前。

  `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD`：AES 金鑰包裝與 PKCS \$15 填補。

  `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`：AES 金鑰包裝，零填補。
+ [4] 支援下列 `CK_MECHANISM_TYPE` 和 `CK_RSA_PKCS_MGF_TYPE`，作為 `CKM_RSA_PKCS_OAEP` 的 `CK_RSA_PKCS_OAEP_PARAMS`：
  + `CKM_SHA_1` 使用 `CKG_MGF1_SHA1`
  + `CKM_SHA224` 使用 `CKG_MGF1_SHA224`
  + `CKM_SHA256` 使用 `CKG_MGF1_SHA256`
  + `CKM_SHA384` 使用 `CKM_MGF1_SHA384`
  + `CKM_SHA512` 使用 `CKM_MGF1_SHA512`
+ 【5】 根據 NIST 指引，在 2023 年之後，不允許在 FIPS 模式下使用叢集。對於處於非 FIPS 模式的叢集，在 2023 年之後仍然允許。如需詳細資訊，請參閱 [FIPS 140 合規性：2024 機制棄用](compliance-dep-notif.md#compliance-dep-notif-1)。
+ 【6】 供應商定義的類型。為了使用 CloudHSM 廠商定義的類型，PKCS\$111 應用程式必須在編譯`cloudhsm_pkcs11_vendor_defs.h`期間包含 。這可在`/opt/cloudhsm/include/pkcs11/cloudhsm_pkcs11_vendor_defs.h`適用於 Linux 型平台的 和`C:\Program Files\Amazon\CloudHSM\include\pkcs11\cloudhsm_pkcs11_vendor_defs.h`適用於 Windows 型平台的 中找到
+ 【7】 金鑰衍生函數 (KDFs) 是在 [NIST 特殊出版物 800-56A 修訂版 3](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf) 中指定。

# AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫支援的 API 操作
<a name="pkcs11-apis"></a>

PKCS \$111 程式庫支援 AWS CloudHSM 用戶端 SDK 5 的下列 PKCS \$111 API 操作。
+ `C_CloseAllSessions`
+ `C_CloseSession`
+ `C_CreateObject`
+ `C_Decrypt`
+ `C_DecryptFinal`
+ `C_DecryptInit`
+ `C_DecryptUpdate`
+ `C_DeriveKey`
+ `C_DestroyObject`
+ `C_Digest`
+ `C_DigestFinal`
+ `C_DigestInit`
+ `C_DigestUpdate`
+ `C_Encrypt`
+ `C_EncryptFinal`
+ `C_EncryptInit`
+ `C_EncryptUpdate`
+ `C_Finalize`
+ `C_FindObjects`
+ `C_FindObjectsFinal`
+ `C_FindObjectsInit`
+ `C_GenerateKey`
+ `C_GenerateKeyPair`
+ `C_GenerateRandom`
+ `C_GetAttributeValue`
+ `C_GetFunctionList`
+ `C_GetInfo`
+ `C_GetMechanismInfo`
+ `C_GetMechanismList`
+ `C_GetSessionInfo`
+ `C_GetSlotInfo`
+ `C_GetSlotList`
+ `C_GetTokenInfo`
+ `C_Initialize`
+ `C_Login`
+ `C_Logout`
+ `C_OpenSession`
+ `C_Sign`
+ `C_SignFinal`
+ `C_SignInit`
+ `C_SignUpdate`
+ `C_UnWrapKey`
+ `C_Verify`
+ `C_VerifyFinal`
+ `C_VerifyInit`
+ `C_VerifyUpdate`
+ `C_WrapKey`

# AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫中的金鑰屬性
<a name="pkcs11-attributes"></a>

 AWS CloudHSM 金鑰物件可以是公有、私有或私密金鑰。系統會透過屬性來指定金鑰物件上允許的動作。金鑰物件建立時，即會一併建立屬性。當您使用 PKCS \$111 程式庫時 AWS CloudHSM，我們會依 PKCS \$111 標準指定預設值。

AWS CloudHSM 不支援 PKCS \$111 規格中列出的所有屬性。我們會符合所有支援屬性的規格，並在個別表格中列出這些屬性。

用來建立、修改或複製物件的加密函數 (如 `C_CreateObject`、`C_GenerateKey`、`C_GenerateKeyPair`、`C_UnwrapKey` 和 `C_DeriveKey`) 會採用屬性範本做為其中一個參數。如需關於在建立物件期間傳遞屬性範本的詳細資訊，請參閱[透過 PKCS \$111 程式庫產生金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate) (以此為例)。

下列主題提供有關 AWS CloudHSM 金鑰屬性的詳細資訊。

**Topics**
+ [屬性資料表](pkcs11-attributes-interpreting.md)
+ [修改屬性](modify-attr.md)
+ [解譯錯誤代碼](attr-errors.md)

# AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫屬性資料表
<a name="pkcs11-attributes-interpreting"></a>

的 PKCS \$111 程式庫資料表 AWS CloudHSM 包含因金鑰類型而異的屬性清單。它會指出使用特定密碼編譯函數時，特定金鑰類型是否支援指定的屬性 AWS CloudHSM。

**圖例：**
+ ✔ 表示 CloudHSM 支援特定金鑰類型的屬性。
+ ✖ 表示 CloudHSM 不支援特定金鑰類型的屬性。
+ R 表示特定金鑰類型的屬性值設定為唯讀模式。
+ S 表示屬性較為敏感，因此無法透過 `GetAttributeValue` 讀取。
+ 預設值欄位中的空白儲存格表示屬性沒有獲派指定預設值。

## GenerateKeyPair
<a name="generatekeypair"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## GenerateKey
<a name="generatekey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## CreateObject
<a name="createobject"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## UnwrapKey
<a name="unwrapkey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## DeriveKey
<a name="derivekey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

## GetAttributeValue
<a name="getattributevalue"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

**屬性註釋**
+  [1] 此屬性受韌體部分支援，且需明確設定為僅限預設值。
+  [2] 必要屬性。

# 修改 AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫屬性
<a name="modify-attr"></a>

物件的某些 PKCS \$111 程式庫屬性 AWS CloudHSM 可以在建立物件後修改，而有些則無法修改。若要修改屬性，請使用 CloudHSM CLI 中的[金鑰 set-attribute](cloudhsm_cli-key-set-attribute.md) 命令。您也可以使用 CloudHSM CLI 的[金鑰清單](cloudhsm_cli-key-list.md)命令來衍生屬性清單。

下列清單會顯示物件建立後可修改的屬性：
+ `CKA_LABEL`
+ `CKA_TOKEN`
**注意**  
只有在將工作階段金鑰變更為符記金鑰時，才允許進行修改。使用 CloudHSM CLI 的[金鑰 set-attribute](cloudhsm_cli-key-set-attribute.md) 命令來變更屬性值。
+ `CKA_ENCRYPT`
+ `CKA_DECRYPT`
+ `CKA_SIGN`
+ `CKA_VERIFY`
+ `CKA_WRAP`
+ `CKA_UNWRAP`
+ `CKA_LABEL`
+ `CKA_SENSITIVE`
+ `CKA_DERIVE`
**注意**  
這個屬性支援金鑰衍生。所有公有金鑰的屬性須為 `False`，不能設定為 `True`。如果是私密金鑰和 EC 私有金鑰，則該屬性可設定為 `True` 或 `False`。
+ `CKA_TRUSTED`
**注意**  
唯有加密管理員 (CO) 可將這個屬性設定成 `True` 或 `False`。
+ `CKA_WRAP_WITH_TRUSTED`
**注意**  
將此屬性套用於可匯出的資料金鑰，以表明只能使用標記為 `CKA_TRUSTED` 的金鑰包裝此金鑰。一旦設定 `CKA_WRAP_WITH_TRUSTED` 為 true，屬性就會變成唯讀，而且您無法變更或移除屬性。

# 解譯 AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫錯誤代碼
<a name="attr-errors"></a>

在範本中指定特定金鑰不支援的 PKCS \$111 程式庫屬性會導致錯誤。下表包含違反規格時所產生的錯誤代碼：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/attr-errors.html)

# AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫程式碼範例
<a name="pkcs11-samples"></a>

GitHub 上的程式碼範例示範如何使用 AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫來完成基本任務。

## 先決條件
<a name="pkcs11-samples-prereqs"></a>

執行範例之前，請執行以下步驟來設定您的環境：
+ 安裝並設定適用於用戶端 SDK 5 的 [PKCS \$111 程式庫](pkcs11-library-install.md)。
+ 設定[密碼編譯使用者 (CU)](manage-hsm-users.md)。您的應用程式會使用此 HSM 帳戶在 HSM 上執行程式碼範例。

## 程式碼範例
<a name="pkcs11-samples-code"></a>

適用於 PKCS\$111 AWS CloudHSM 的軟體程式庫程式碼範例可在 [GitHub](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples) 上取得。此儲存庫包括如何使用 PKCS \$111 執行一般作業的範例，包括加密、解密、簽署和驗證。
+ [產生金鑰 (AES、RSA、EC)](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate)
+ [列出金鑰屬性](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/)
+ [使用 AES GCM 加密和解密資料](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/encrypt/aes_gcm.c)
+ [使用 AES\$1CTR 加密和解密資料](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/aes_ctr.c) 
+ [使用 3DES 加密和解密資料](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/des_ecb.c) 
+ [使用 RSA 簽署和驗證資料](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/sign/rsa_sign.c)
+ [使用 HMAC KDF 衍生金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/derivation/hmac_kdf.c)
+ [使用以 PKCS \$15 填補的 AES 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_wrapping.c)
+ [使用不填補的 AES 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_no_padding_wrapping.c)
+ [使用零填補的 AES 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_zero_padding_wrapping.c)
+ [使用 AES-GCM 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/wrapping/aes_gcm_wrapping.c)
+ [使用 RSA 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/rsa_wrapping.c)

# 的 PKCS \$111 程式庫進階組態 AWS CloudHSM
<a name="pkcs11-library-configs"></a>

 AWS CloudHSM PKCS \$111 供應商包含下列進階組態，這不屬於大多數客戶使用的一般組態。這些組態提供額外的功能。
+ [使用 PKCS \$111 連線到多個插槽](pkcs11-library-configs-multi-slot.md)
+ [PKCS \$111 的重試組態](pkcs11-library-configs-retry.md)

# 適用於 的 PKCS \$111 程式庫的多個槽組態 AWS CloudHSM
<a name="pkcs11-library-configs-multi-slot"></a>

用戶端 SDK 5 PKCS \$111 程式庫中的單一插槽代表 AWS CloudHSM中叢集的單一連線。使用用戶端 SDK 5，您可以將 PKCS11 程式庫設定為允許多個插槽，從單一 PKCS \$111 應用程式將使用者連線到多個 CloudHSM 叢集。

使用本主題中的說明，讓您的應用程式使用多插槽功能來連線到多個叢集。

**Topics**
+ [適用於 的 PKCS \$111 程式庫的多槽先決條件 AWS CloudHSM](#pkcs11-multi-slot-prereqs)
+ [針對 的多槽功能設定 PKCS \$111 程式庫 AWS CloudHSM](pkcs11-multi-slot-config-run.md)
+ [為 新增具有多插槽功能的叢集 AWS CloudHSM](pkcs11-multi-slot-add-cluster.md)
+ [移除具有 多插槽功能的叢集 AWS CloudHSM](pkcs11-multi-slot-remove-cluster.md)

## 適用於 的 PKCS \$111 程式庫的多槽先決條件 AWS CloudHSM
<a name="pkcs11-multi-slot-prereqs"></a>

為 PKCS \$111 程式庫設定多個插槽之前 AWS CloudHSM，請完成下列先決條件。
+ 您要連線的兩個或多個 AWS CloudHSM 叢集及其叢集憑證。
+ 具有安全群組的 EC2 執行個體正確設定為連線到上述所有叢集。如需如何設定叢集和用戶端執行個體的詳細資訊，請參閱 [入門 AWS CloudHSM](getting-started.md)。
+ 若要設定多插槽功能，您必須已下載並安裝 PKCS \$111 程式庫。若您尚未完成此動作，請參閱 [安裝 AWS CloudHSM 用戶端 SDK 5 的 PKCS \$111 程式庫](pkcs11-library-install.md) 中的說明。

# 針對 的多槽功能設定 PKCS \$111 程式庫 AWS CloudHSM
<a name="pkcs11-multi-slot-config-run"></a>

若要設定 PKCS \$111 程式庫的多槽功能 AWS CloudHSM，請遵循下列步驟：

1. 使用多插槽功能識別要連線到的叢集。

1. 依照 [為 新增具有多插槽功能的叢集 AWS CloudHSM](pkcs11-multi-slot-add-cluster.md) 中的說明，將這些叢集新增至 PKCS \$111 組態

1. PKCS \$111 應用程式下次執行時，其將具有多插槽功能。

# 為 新增具有多插槽功能的叢集 AWS CloudHSM
<a name="pkcs11-multi-slot-add-cluster"></a>

[使用 PKCS \$111 連線到多個插槽](pkcs11-library-configs-multi-slot.md)時 AWS CloudHSM，請使用 **configure-pkcs11 add-cluster**命令將叢集新增至您的組態。

## 語法
<a name="pkcs11-multi-slot-add-cluster-syntax"></a>

```
configure-pkcs11 add-cluster [OPTIONS]
        --cluster-id <CLUSTER ID> 
        [--region <REGION>]
        [--endpoint <ENDPOINT>]
        [--hsm-ca-cert <HSM CA CERTIFICATE FILE>]
        [--client-cert-hsm-tls-file <CLIENT CERTIFICATE FILE>]
        [--client-key-hsm-tls-file <CLIENT KEY FILE>]
        [-h, --help]
```

## 範例
<a name="pkcs11-multi-slot-add-cluster-examples"></a>

### 使用 `cluster-id` 參數新增叢集
<a name="w2aac25c21c17c31b7c13b7b3b1"></a>

**Example**  
 搭配使用 **configure-pkcs11 add-cluster** 和 `cluster-id` 參數，將叢集 (ID為 `cluster-1234567`) 新增至您的組態。  

```
$ sudo /opt/cloudhsm/bin/configure-pkcs11 add-cluster --cluster-id <cluster-1234567>
```

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" add-cluster --cluster-id <cluster-1234567>
```

**提示**  
如果 **configure-pkcs11 add-cluster** 與 `cluster-id` 參數搭配使用不會導致新增叢集，請參閱下列範例，以取得此命令的更長版本，此命令也需要 `--region` 和 `--endpoint` 參數來識別要新增的叢集。例如，如果叢集區域與設定為 AWS CLI 預設值的區域不同，則應使用 `--region` 參數來使用正確的區域。此外，您可以指定用於呼叫的 AWS CloudHSM API 端點，這對於各種網路設定而言可能是必要的，例如使用不使用預設 DNS 主機名稱的 VPC 介面端點 AWS CloudHSM。

### 使用 `cluster-id`、`endpoint` 和 `region` 參數新增叢集
<a name="w2aac25c21c17c31b7c13b7b3b3"></a>

**Example**  
 搭配使用 **configure-pkcs11 add-cluster** 以及 `cluster-id`、`endpoint` 和 `region` 參數將叢集 (ID為 `cluster-1234567`) 新增至您的組態。  

```
$ sudo /opt/cloudhsm/bin/configure-pkcs11 add-cluster --cluster-id <cluster-1234567> --region <us-east-1> --endpoint <https://cloudhsmv2.us-east-1.amazonaws.com>
```

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" add-cluster --cluster-id <cluster-1234567>--region <us-east-1> --endpoint <https://cloudhsmv2.us-east-1.amazonaws.com>
```

如需 `--cluster-id`、`--region` 和 `--endpoint` 參數的詳細資訊，請參閱 [AWS CloudHSM 用戶端 SDK 5 組態參數](configure-tool-params5.md)。

## Parameters
<a name="pkcs11-multi-slot-add-cluster-parameters"></a>

**--cluster-id *<Cluster ID>***  
 進行 `DescribeClusters` 呼叫以尋找叢集中與叢集 ID 關聯的所有 HSM 彈性網路介面 (ENI) IP 地址。系統會將 ENI IP 地址新增至 AWS CloudHSM 組態檔案。  
如果您在無法存取公有網際網路的 VPC 中使用來自 EC2 執行個體的 `--cluster-id` 參數，則必須建立要連線的介面 VPC 端點 AWS CloudHSM。如需 VPC 端點的詳細資訊，請參閱 [AWS CloudHSM 和 VPC 端點](cloudhsm-vpc-endpoint.md)。
必要：是

**--endpoint *<Endpoint>***  
指定用於進行`DescribeClusters`呼叫的 AWS CloudHSM API 端點。您必須結合 `--cluster-id` 設定此選項。  
必要：否

**--hsm-ca-cert *<HsmCA Certificate Filepath>***  
指定 HSM CA 憑證的檔案路徑。  
必要：否

**--region *<Region>***  
指您叢集的區域。您必須結合 `--cluster-id` 設定此選項。  
如果您未提供 `--region` 參數，系統會嘗試讀取 `AWS_DEFAULT_REGION` 或 `AWS_REGION` 環境變數來選擇區域。如果未設定這些變數，則除非您在 `AWS_CONFIG_FILE` 環境變數中指定了不同的檔案，否則系統會檢查 AWS config 檔案中 (通常是 `~/.aws/config`) 與您的設定檔相關聯的區域。如果未設定上述任何變數，系統會預設為 `us-east-1` 區域。  
必要：否

**--client-cert-hsm-tls-file *<client certificate hsm tls 路徑>***  
 用於 TLS 用戶端-HSM 交互身分驗證的用戶端憑證路徑。  
 只有在您已使用 CloudHSM CLI 在 HSM 上註冊至少一個信任錨點時，才使用此選項。您必須結合 `--client-key-hsm-tls-file` 設定此選項。  
必要：否

**--client-key-hsm-tls-file *<client key hsm tls 路徑>***  
 用於 TLS 用戶端-HSM 交互身分驗證的用戶端金鑰路徑。  
 只有在您已使用 CloudHSM CLI 在 HSM 上註冊至少一個信任錨點時，才使用此選項。您必須結合 `--client-cert-hsm-tls-file` 設定此選項。  
必要：否

# 移除具有 多插槽功能的叢集 AWS CloudHSM
<a name="pkcs11-multi-slot-remove-cluster"></a>

[使用 PKCS \$111 連線到多個插槽](pkcs11-library-configs-multi-slot.md)時，請使用 **configure-pkcs11 remove-cluster** 命令從可用的 PKCS \$111 插槽中移除叢集。

## 語法
<a name="pkcs11-multi-slot-remove-cluster-syntax"></a>

```
configure-pkcs11 remove-cluster [OPTIONS]
        --cluster-id <CLUSTER ID>
        [-h, --help]
```

## 範例
<a name="pkcs11-multi-slot-remove-cluster-examples"></a>

### 使用 `cluster-id` 參數移除叢集
<a name="w2aac25c21c17c31b7c15b7b3b1"></a>

**Example**  
 搭配使用 **configure-pkcs11 remove-cluster** 和 `cluster-id` 參數，從您的組態中移除叢集 (ID 為 `cluster-1234567`)。  

```
$ sudo /opt/cloudhsm/bin/configure-pkcs11 remove-cluster --cluster-id <cluster-1234567>
```

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" remove-cluster --cluster-id <cluster-1234567>
```

如需 `--cluster-id` 參數的詳細資訊，請參閱 [AWS CloudHSM 用戶端 SDK 5 組態參數](configure-tool-params5.md)。

## 參數
<a name="pkcs11-multi-slot-remove-cluster-parameters"></a>

**--cluster-id *<Cluster ID>***  
 需從組態中移除的叢集的 ID  
必要：是

# 的 PKCS \$111 程式庫重試命令 AWS CloudHSM
<a name="pkcs11-library-configs-retry"></a>

AWS CloudHSM 用戶端 SDK 5.8.0 和更新版本具有內建的自動重試策略，將從用戶端重試 HSM 限流操作。當 HSM 因過於忙於執行先前操作而無法接受更多要求而限制操作時，用戶端 SDK 會嘗試重試限流操作 (最多 3 次)，同時以指数形式回退。此自動重試策略可以設定為兩種模式中的其中一種：**關閉**模式和**標準**模式。
+ **關閉**：用戶端 SDK 將不會針對 HSM 的任何限流操作執行任何重試政策。
+ **標準**：這是用戶端 SDK 5.8.0 及更新版本的預設模式。在此模式下，用戶端 SDK 會以指數回退形式自動重試限流操作。

如需詳細資訊，請參閱[HSM 調節](troubleshoot-hsm-throttling.md)。

## 將重試命令設定為關閉模式
<a name="w2aac25c21c17c31b9b9"></a>

------
#### [ Linux ]

**將 Linux 上用戶端 SDK 5 重試命令設定為 **off****
+ 您可以使用下列命令將重試組態設定為 **off** 模式：

  ```
  $ sudo /opt/cloudhsm/bin/configure-pkcs11 --default-retry-mode off
  ```

------
#### [ Windows ]

**將 Windows 上用戶端 SDK 5 重試命令設定為 **off****
+ 您可以使用下列命令將重試組態設定為 **off** 模式：

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" --default-retry-mode off
  ```

------

# 具有 PKCS \$111 程式庫的憑證儲存
<a name="pkcs11-certificate-storage"></a>

 AWS CloudHSM PKCS \$111 程式庫支援將公有金鑰憑證儲存為 hsm2m.medium 叢集上的「公有物件」（如 PKCS \$111 2.40 中所定義）。此功能允許公有和私有 PKCS \$111 工作階段建立、擷取、修改和刪除公有金鑰憑證。

 若要搭配 PKCS \$111 程式庫使用憑證儲存，您需要在用戶端組態中啟用它。啟用後，您可以從 PKCS \$111 應用程式管理憑證物件。同時套用到憑證和金鑰物件的操作，例如 [C\$1FindObjects](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc323205461)，將會傳回金鑰和憑證儲存的結果。

**Topics**
+ [啟用憑證儲存](pkcs11-certificate-storage-configuration.md)
+ [憑證儲存 API](pkcs11-certificate-storage-api.md)
+ [憑證屬性](pkcs11-certificate-storage-attributes.md)
+ [憑證儲存體稽核日誌](pkcs11-certificate-storage-audit-logs.md)

# 啟用憑證儲存
<a name="pkcs11-certificate-storage-configuration"></a>

 您可以使用 PKCS \$111 程式庫組態工具，在 hsm2m.medium 叢集上啟用憑證儲存。此功能適用於 SDK 5.13 版和更新版本。如需支援憑證物件類型的操作清單，請參閱[憑證儲存 API 操作](pkcs11-certificate-storage-api.md)。

 若要啟用憑證儲存，請依照下列步驟操作您的作業系統：

------
#### [ Linux ]
+ 

****啟用憑證儲存****  
執行以下命令：

  ```
  $ sudo /opt/cloudhsm/bin/configure-pkcs11 --enable-certificate-storage
  ```

------
#### [ Windows ]
+ 

****啟用憑證儲存****  
開啟命令提示字元並執行下列命令：

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" --enable-certificate-storage
  ```

------

# 憑證儲存 API 操作
<a name="pkcs11-certificate-storage-api"></a>

 下列 PKCS \$111 操作支援憑證物件類型 (`CKO_CERTIFICATE`)：

## 一般憑證操作
<a name="general-certificate-operations"></a>

**`C_CreateObject`**  
建立新的憑證物件。

**`C_DestroyObject`**  
刪除現有的憑證物件。

**`C_GetAttributeValue`**  
取得憑證物件的一或多個屬性的值。

**`C_SetAttributeValue`**  
更新憑證物件的一或多個屬性的值。

## 憑證物件搜尋操作
<a name="certificate-object-search-operations"></a>

**`C_FindObjectsInit`**  
開始搜尋憑證物件。

**`C_FindObjects`**  
繼續搜尋憑證物件。

**`C_FindObjectsFinal`**  
結束憑證物件的搜尋。

# 憑證儲存屬性
<a name="pkcs11-certificate-storage-attributes"></a>

 下表列出支援的憑證物件屬性及其值：


| 屬性 | 預設值 | Description | 
| --- | --- | --- | 
| `CKA_CLASS` | 必要 | 必須為 `CKO_CERTIFICATE`。 | 
| `CKA_TOKEN` | True |  必須為 `True`。 | 
| `CKA_MODIFIABLE` | True | 必須為 `True`。 | 
| `CKA_PRIVATE` | False | 必須為 `False`。 | 
| `CKA_LABEL` | 空白 | 限制 127 個字元。 | 
| `CKA_COPYABLE` | False | 必須為 `False`。 | 
| `CKA_DESTROYABLE` | True | 必須為 `True`。 | 
| `CKA_CERTIFICATE_TYPE` | 必要 | 必須為 `CKC_X_509`。 | 
| `CKA_TRUSTED` | False | 必須為 `False`。 | 
| `CKA_CERTIFICATE_CATEGORY` | `CK_CERTIFICATE_CATEGORY_UNSPECIFIED` | 必須為 `CK_CERTIFICATE_CATEGORY_UNSPECIFIED`。 | 
| `CKA_CHECK_VALUE` | 衍生自 `CKA_VALUE` | 根據 自動設定`CKA_VALUE`。 | 
| `CKA_START_DATE` | 空白 | 憑證 'not before' date。 | 
| `CKA_END_DATE` | 空白 | 憑證 'not after' date。 | 
| `CKA_PUBLIC_KEY_INFO` | 空白 | 大小上限為 16 KB。 | 
| `CKA_SUBJECT` | 必要 | 憑證主體。 | 
| `CKA_ID` | 空白 | 大小上限為 128 個位元組。不強制執行唯一性。 | 
| `CKA_ISSUER` | 空白 | 憑證發行者。 | 
| `CKA_SERIAL_NUMBER` | 空白 | 憑證序號。 | 
| `CKA_VALUE` | 必要 | 大小上限為 32 KB。 | 

# 憑證儲存體稽核日誌
<a name="pkcs11-certificate-storage-audit-logs"></a>

 AWS CloudHSM 會寫入憑證儲存操作的稽核日誌，以將資料修改為叢集 Amazon CloudWatch CloudWatch Events 日誌串流。此日誌串流會針對叢集命名，而不是針對叢集內的特定 HSM。

 如需有關在 CloudWatch 中存取稽核日誌的資訊，請參閱 [使用 Amazon CloudWatch Logs 和 AWS CloudHSM 稽核日誌](get-hsm-audit-logs-using-cloudwatch.md)。

## 日誌項目欄位
<a name="pkcs11-certificate-storage-audit-logs-fields"></a>

`object_handle`  
憑證物件的唯一識別符。

`op_code`  
執行或嘗試的操作。可能的值如下：  
+ `CreateObject`
+ `DestroyObject`
+ `SetAttributeValues`

`response`  
`OK` 如果操作成功，或下列其中一個錯誤類型：  
+ `DuplicateAttribute`
+ `InvalidAttributeValue`
+ `ObjectNotFound`
+ `MaxObjectsReached`
+ `InternalFailure`

`attributes`  
已修改屬性，如果有的話。

`timestamp`  
操作發生的時間，以 Unix epoch 後的毫秒為單位。

## 稽核日誌範例
<a name="pkcs11-certificate-storage-audit-logs-examples"></a>

### CreateObject 範例
<a name="pkcs11-certificate-storage-audit-logs-examples-create"></a>

```
{
    "object_handle": 463180677312929947,
    "op_code": "CreateObject",
    "response": "OK",
    "attributes": null,
    "timestamp": 1725482483671
}
```

### DestroyObject 範例
<a name="pkcs11-certificate-storage-audit-logs-examples-delete"></a>

```
{
    "object_handle": 463180677312929947,
    "op_code": "DestroyObject",
    "response": "OK",
    "attributes": null,
    "timestamp": 1725482484559
}
```

### SetAttributeValues 範例
<a name="pkcs11-certificate-storage-audit-logs-examples-set"></a>

```
{
    "object_handle": 463180678453346687,
    "op_code": "SetAttributeValues",
    "response": "OK",
    "attributes": [
        "Label"
    ],
    "timestamp": 1725482488004
}
```

### 不成功的 CreateObject 範例
<a name="pkcs11-certificate-storage-audit-logs-examples-error"></a>

```
{
    "object_handle": null,
    "op_code": "CreateObject",
    "response": "MaxObjectsReached",
    "attributes": null,
    "timestamp": 1726084937125
}
```