

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Operasi pembongkaran dengan Klien AWS CloudHSM SDKs
<a name="use-hsm"></a>

Gunakan SDK Klien untuk melepaskan operasi kriptografi dari platform atau aplikasi berbasis bahasa ke modul keamanan perangkat keras (). HSMs 

AWS CloudHSM menawarkan dua versi utama, dan Client SDK 5 adalah yang terbaru. Ini menawarkan berbagai keunggulan dibandingkan Client SDK 3 (seri sebelumnya). Untuk informasi selengkapnya, lihat [Manfaat SDK Klien 5](client-sdk-5-benefits.md). Untuk informasi tentang dukungan platform, lihat[AWS CloudHSM Platform yang didukung SDK Klien 5](client-supported-platforms.md). 

Topik berikut menjelaskan cara bekerja dengan AWS CloudHSM Klien SDKs.

AWS CloudHSM mendukung komponen-komponen berikut:

**[Pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 5](pkcs11-library.md)**  
 PKCS \$111 adalah standar untuk melakukan operasi kriptografi pada modul keamanan perangkat keras (). HSMs AWS CloudHSM menawarkan implementasi pustaka PKCS \$111 yang sesuai dengan PKCS \$111 versi 2.40.

**[Mesin AWS CloudHSM Dinamis OpenSSL untuk SDK Klien 5](openssl-library.md)**  
 AWS CloudHSM OpenSSL Dynamic Engine memungkinkan Anda untuk membongkar operasi kriptografi ke cluster CloudHSM Anda melalui OpenSSL API.

**[Penyedia AWS CloudHSM OpenSSL untuk SDK Klien 5](openssl-provider-library.md)**  
Penyedia Mesin Dinamis OpenSSL memungkinkan Anda untuk membongkar operasi kriptografi ke klaster CloudHSM Anda melalui OpenSSL Provider API. AWS CloudHSM 

**[Penyedia JCE untuk AWS CloudHSM Klien SDK 5](java-library.md)**  
Penyedia AWS CloudHSM JCE sesuai dengan Java Cryptographic Architecture (JCA). Penyedia memungkinkan Anda untuk melakukan operasi kriptografi pada HSM.

**[Penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM Klien SDK 5](ksp-library.md)**  
 AWS CloudHSM Klien untuk Windows termasuk penyedia CNG dan KSP.

**Topics**
+ [Periksa versi SDK AWS CloudHSM Klien Anda](check-client_version.md)
+ [Bandingkan AWS CloudHSM dukungan komponen SDK Klien](sdk3-compare.md)
+ [Migrasi dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5](client-sdk-migration.md)
+ [Menggunakan Client SDK 5 untuk bekerja dengan AWS CloudHSM](client-sdk5.md)
+ [Menggunakan versi SDK sebelumnya untuk bekerja dengan AWS CloudHSM](choose-client-sdk.md)

# Periksa versi SDK AWS CloudHSM Klien Anda
<a name="check-client_version"></a>

Gunakan perintah berikut untuk memverifikasi versi SDK Klien yang Anda gunakan. AWS CloudHSM

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

Gunakan perintah berikut ini.

```
rpm -qa | grep ^cloudhsm
```

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

Gunakan perintah berikut ini.

```
rpm -qa | grep ^cloudhsm
```

------
#### [ CentOS 6 ]

Gunakan perintah berikut ini.

```
rpm -qa | grep ^cloudhsm
```

------
#### [ CentOS 7 ]

Gunakan perintah berikut ini.

```
rpm -qa | grep ^cloudhsm
```

------
#### [ CentOS 8 ]

Gunakan perintah berikut ini.

```
rpm -qa | grep ^cloudhsm
```

------
#### [ RHEL 6 ]

Gunakan perintah berikut ini.

```
rpm -qa | grep ^cloudhsm
```

------
#### [ RHEL 7 ]

Gunakan perintah berikut ini.

```
rpm -qa | grep ^cloudhsm
```

------
#### [ RHEL 8 ]

Gunakan perintah berikut ini.

```
rpm -qa | grep ^cloudhsm
```

------
#### [ Ubuntu 16.04 LTS ]

Gunakan perintah berikut ini.

```
apt list --installed | grep ^cloudhsm
```

------
#### [ Ubuntu 18.04 LTS ]

Gunakan perintah berikut ini.

```
apt list --installed | grep ^cloudhsm
```

------
#### [ Ubuntu 20.04 LTS ]

Gunakan perintah berikut ini.

```
apt list --installed | grep ^cloudhsm
```

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

Gunakan perintah berikut ini.

```
wmic product get name,version
```

------

# Bandingkan AWS CloudHSM dukungan komponen SDK Klien
<a name="sdk3-compare"></a>

Selain alat baris perintah, Client SDK 3 berisi komponen yang memungkinkan operasi kriptografi off-loading ke HSM dari berbagai platform atau aplikasi berbasis bahasa. Klien SDK 5 memiliki paritas dengan Klien SDK 3, kecuali belum mendukung penyedia CNG dan KSP. Tabel berikut membandingkan ketersediaan komponen di SDK Klien 3 dan SDK Klien 5.


| Komponen | SDK Klien 5 | SDK Klien 3 | 
| --- | --- | --- | 
| Pustaka PKCS \$111 |  Ya  |  Ya  | 
| Penyedia JCE | Ya | Ya | 
| OpenSSL Dynamic Engine | Ya |  Ya  | 
| Penyedia Penyimpanan Kunci (KSP) | Ya | Ya | 
| Utilitas Manajemen CloudHSM (CMU) [1](#sdk-compare-note-1) | Ya | Ya | 
| Utilitas Manajemen Kunci (KMU) [1](#sdk-compare-note-1) | Ya | Ya | 
| Alat konfigurasi | Ya | Ya | 

[1] Komponen CMU dan KMU disertakan dalam CloudHSM CLI dengan Client SDK 5.

Bagian berikut menjelaskan komponen.

## Pustaka PKCS \$111
<a name="sdk3-support-pkcs11"></a>

 PKCS \$111 adalah standar untuk melakukan operasi kriptografi pada modul keamanan perangkat keras (). HSMs AWS CloudHSM menawarkan implementasi pustaka PKCS \$111 yang sesuai dengan PKCS \$111 versi 2.40.
+ Untuk Client SDK 3, pustaka PKCS \$111 adalah komponen Linux saja yang cocok dengan dukungan basis Linux. Untuk informasi selengkapnya, lihat [Dukungan Linux untuk AWS CloudHSM Client SDK 3](sdk3-linux.md).
+ Untuk Client SDK 5, pustaka PKCS \$111 adalah komponen lintas platform yang cocok dengan dukungan dasar Linux dan Windows Client SDK 5. Untuk informasi selengkapnya, lihat [Dukungan Linux untuk AWS CloudHSM Client SDK 5](sdk8-linux.md) dan [Dukungan Windows untuk AWS CloudHSM Klien SDK 5](sdk8-windows.md).

## Utilitas Manajemen CloudHSM (CMU)
<a name="sdk3-support-cmu"></a>

Alat baris perintah CloudHSM Management Utility (CMU) membantu petugas kripto mengelola pengguna di. HSMs Ini termasuk alat yang membuat, menghapus, dan mendaftar pengguna serta mengubah kata sandi pengguna. Untuk informasi selengkapnya, lihat [AWS CloudHSM Utilitas Manajemen (CMU)](cloudhsm_mgmt_util.md).

## Utilitas Manajemen Kunci (KMU)
<a name="sdk3-support-kmu"></a>

Key Management Utility (KMU) adalah alat baris perintah yang membantu pengguna kripto (CU) mengelola kunci pada modul keamanan perangkat keras (HSM). Untuk informasi selengkapnya, lihat [AWS CloudHSM Utilitas Manajemen Kunci (KMU)](key_mgmt_util.md).

## Penyedia JCE
<a name="sdk3-support-jce"></a>

Penyedia AWS CloudHSM JCE sesuai dengan Java Cryptographic Architecture (JCA). Penyedia memungkinkan Anda untuk melakukan operasi kriptografi pada HSM.

Penyedia JCE adalah satu-satunya komponen Linux yang cocok dengan dukungan dasar Linux. Untuk informasi selengkapnya, lihat [Dukungan Linux untuk AWS CloudHSM Client SDK 3](sdk3-linux.md).
+ Untuk Klien SDK 3 membutuhkan OpenJDK 1.8 

## OpenSSL Dynamic Engine
<a name="sdk3-support-openssl"></a><a name="openssl-collapse"></a>

 AWS CloudHSM OpenSSL Dynamic Engine memungkinkan Anda untuk membongkar operasi kriptografi ke cluster CloudHSM Anda melalui OpenSSL API.
+ Untuk Client SDK 3, OpenSSL Dynamic Engine adalah komponen Linux saja yang *tidak* cocok dengan dukungan basis Linux. Lihat pengecualian di bawah ini. 
  +  Membutuhkan OpenSSL 1.0.2[f\$1]

  **Platform yang tidak didukung:**
  + CentOS 8
  + Red Hat Enterprise Linux (RHEL) 8
  + Ubuntu 18.04 LTS

  Platform ini dikirim dengan versi OpenSSL yang tidak kompatibel dengan OpenSSL Dynamic Engine untuk Klien SDK 3. AWS CloudHSM mendukung platform ini dengan OpenSSL Dynamic Engine untuk Klien SDK 5.
+ Untuk Client SDK 5, OpenSSL Dynamic Engine adalah komponen Linux saja yang membutuhkan OpenSSL 1.0.2, 1.1.1, atau 3.x.

## Penyedia penyimpanan kunci (KSP)
<a name="sdk3-support-cng-ksp"></a>

Key Storage Provider (KSP) adalah API kriptografi khusus untuk sistem operasi Microsoft Windows.

Untuk Client SDK 3, penyedia CNG dan KSP adalah komponen khusus Windows yang cocok dengan dukungan dasar Windows. Untuk informasi selengkapnya, lihat [Dukungan Windows untuk AWS CloudHSM Client SDK 3](sdk3-windows.md).

Untuk Client SDK 5, Key Storage Provider (KSP) adalah komponen khusus Windows yang cocok dengan dukungan dasar Windows. Untuk informasi selengkapnya, lihat [Dukungan Windows untuk AWS CloudHSM Klien SDK 5](sdk8-windows.md).

# Migrasi dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5
<a name="client-sdk-migration"></a>

Pada tahun AWS CloudHSM, aplikasi pelanggan melakukan operasi kriptografi menggunakan AWS CloudHSM Client Software Development Kit (SDK). Client SDK 5 adalah SDK utama yang terus memiliki fitur baru dan dukungan platform yang ditambahkan ke dalamnya.

Client SDK 3 mencakup dua alat baris perintah terpisah: CMU untuk mengelola pengguna dan KMU untuk mengelola kunci dan melakukan operasi dengan kunci. Klien SDK 5 mengkonsolidasikan fungsi CMU dan KMU (alat yang ditawarkan dengan Client SDK 3) ke dalam satu alat, yaitu. [AWS CloudHSM Antarmuka Baris Perintah (CLI)](cloudhsm_cli.md) Operasi manajemen pengguna dapat ditemukan di bawah subperintah [Kategori pengguna di CloudHSM CLI](cloudhsm_cli-user.md) dan[Kategori kuorum di CloudHSM CLI](cloudhsm_cli-qm.md). Operasi manajemen kunci dapat ditemukan di bawah [subperintah kunci](cloudhsm_cli-key.md), dan operasi kriptografi dapat ditemukan di bawah subperintah [crypto](cloudhsm_cli-crypto.md). Lihat [Referensi untuk perintah CloudHSM CLI](cloudhsm_cli-reference.md) daftar lengkap perintah.

Untuk manfaat migrasi, lihat[Manfaat SDK AWS CloudHSM Klien 5](client-sdk-5-benefits.md).

Lihat topik berikut untuk petunjuk terperinci tentang migrasi dari SDK Klien 3 ke SDK Klien 5. Versi terbaru AWS CloudHSM Client SDK adalah 5.16.
+ [Migrasi pustaka AWS CloudHSM PKCS \$111 Anda dari Client SDK 3 ke Client SDK 5](pkcs11-migrate-to-sdk-5.md)
+ [Migrasikan OpenSSL Dynamic Engine Anda AWS CloudHSM dari Client SDK 3 ke Client SDK 5](openssl-migrate-to-sdk-5.md)
+ [Migrasikan Penyedia Penyimpanan Kunci (KSP) Anda dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5](ksp-migrate-to-sdk-5.md)
+ [Migrasikan penyedia JCE Anda dari AWS CloudHSM Client SDK 3 ke Client SDK 5](java-lib-migrate_to_sdk5.md)

Untuk fungsionalitas atau kasus penggunaan yang tidak didukung oleh CloudHSM CLI, hubungi. [AWS Dukungan](https://support.console.aws.amazon.com/support/home#/)

# Migrasi pustaka AWS CloudHSM PKCS \$111 Anda dari Client SDK 3 ke Client SDK 5
<a name="pkcs11-migrate-to-sdk-5"></a>

Gunakan topik ini untuk memigrasikan [pustaka AWS CloudHSM PKCS \$111](pkcs11-library.md) Anda dari SDK Klien 3 ke SDK Klien 5. Untuk manfaat migrasi, lihat[Manfaat SDK AWS CloudHSM Klien 5](client-sdk-5-benefits.md).

Pada tahun AWS CloudHSM, aplikasi pelanggan melakukan operasi kriptografi menggunakan AWS CloudHSM Client Software Development Kit (SDK). Client SDK 5 adalah SDK utama yang terus memiliki fitur baru dan dukungan platform yang ditambahkan ke dalamnya.

Untuk meninjau petunjuk migrasi untuk semua penyedia, lihat[Migrasi dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5](client-sdk-migration.md).

## Bersiaplah dengan mengatasi perubahan yang melanggar
<a name="w2aac25c19c15b9"></a>

Tinjau perubahan yang melanggar ini dan perbarui aplikasi Anda di lingkungan pengembangan yang sesuai.

### Mekanisme pembungkus telah berubah
<a name="w2aac25c19c15b9b5"></a>


****  

| Mekanisme SDK 3 klien | Mekanisme SDK 5 Klien Setara | 
| --- | --- | 
| `CKM_AES_KEY_WRAP` | `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD` | 
| `CKM_AES_KEY_WRAP_PAD` | `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD` | 
| `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD` | `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD` | 
| `CKM_CLOUDHSM_AES_KEY_WRAP_NO_PAD` | `CKM_CLOUDHSM_AES_KEY_WRAP_NO_PAD` | 
| `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD` | `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD` | 

### ECDH
<a name="w2aac25c19c15b9b7"></a>

Di Client SDK 3, Anda dapat menggunakan ECDH dan menentukan KDF. Fungsionalitas ini saat ini tidak tersedia di Client SDK 5. Jika aplikasi Anda membutuhkan fungsi ini, silakan hubungi [dukungan](https://support.console.aws.amazon.com/support/home#/).

### Pegangan kunci sekarang khusus untuk sesi
<a name="w2aac25c19c15b9b9"></a>

Untuk berhasil menggunakan handel kunci di SDK Klien 5, Anda harus mendapatkan handel kunci setiap kali Anda menjalankan aplikasi. Jika Anda memiliki aplikasi yang ada yang akan menggunakan pegangan kunci yang sama di sesi yang berbeda, Anda harus memodifikasi kode Anda untuk mendapatkan pegangan kunci setiap kali Anda menjalankan aplikasi. Untuk informasi tentang mengambil pegangan kunci, lihat contoh [AWS CloudHSM PKCS \$111 ini](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/find_objects/find_objects.c). Perubahan ini sesuai dengan [spesifikasi PKCS \$111 2.40](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc416959689).

## Migrasi ke SDK Klien 5
<a name="w2aac25c19c15c11"></a>

Ikuti petunjuk di bagian ini untuk bermigrasi dari Client SDK 3 ke Client SDK 5.

**catatan**  
Amazon Linux, Ubuntu 16.04, Ubuntu 18.04, CentOS 6, CentOS 8, dan RHEL 6 saat ini tidak didukung dengan Client SDK 5. Jika saat ini Anda menggunakan salah satu platform ini dengan Client SDK 3, Anda harus memilih platform yang berbeda saat bermigrasi ke Client SDK 5.

1. Copot pemasangan pustaka PKCS \$111 untuk Client SDK 3.

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

   ```
   $ sudo yum remove cloudhsm-client-pkcs11
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo yum remove cloudhsm-client-pkcs11
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo yum remove cloudhsm-client-pkcs11
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo yum remove cloudhsm-client-pkcs11
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client-pkcs11
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client-pkcs11
   ```

------

1. Hentikan Daemon Klien untuk SDK Klien 3.

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

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo systemctl stop cloudhsm-client
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo systemctl stop cloudhsm-client
   ```

------

1. Copot pemasangan Daemon Klien untuk SDK Klien 3.

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

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client
   ```

------
**catatan**  
Konfigurasi khusus perlu diaktifkan lagi.

1. Instal pustaka PKCS \$111 Client SDK dengan mengikuti langkah-langkahnya. [Instal pustaka PKCS \$111 untuk AWS CloudHSM Client SDK 5](pkcs11-library-install.md)

1. Client SDK 5 memperkenalkan format file konfigurasi baru dan alat bootstrap baris perintah. Untuk mem-bootstrap pustaka Client SDK 5 PKCS \$111 Anda, ikuti petunjuk yang tercantum dalam panduan pengguna di bawah. [Bootstrap Klien SDK](cluster-connect.md#connect-how-to)

1. Di lingkungan pengembangan Anda, uji aplikasi Anda. Lakukan pembaruan pada kode yang ada untuk menyelesaikan perubahan yang melanggar sebelum migrasi terakhir Anda. 

## Topik terkait
<a name="pkcs11-migrate-to-sdk-5-seealso"></a>
+ [Praktik terbaik untuk AWS CloudHSM](best-practices.md)

# Migrasikan OpenSSL Dynamic Engine Anda AWS CloudHSM dari Client SDK 3 ke Client SDK 5
<a name="openssl-migrate-to-sdk-5"></a>

Gunakan topik ini untuk memigrasikan [OpenSSL Dynamic](openssl-library.md) Engine Anda AWS CloudHSM dari Client SDK 3 ke Client SDK 5. Untuk manfaat migrasi, lihat[Manfaat SDK AWS CloudHSM Klien 5](client-sdk-5-benefits.md).

Pada tahun AWS CloudHSM, aplikasi pelanggan melakukan operasi kriptografi menggunakan AWS CloudHSM Client Software Development Kit (SDK). Client SDK 5 adalah SDK utama yang terus memiliki fitur baru dan dukungan platform yang ditambahkan ke dalamnya.

**catatan**  
Pembuatan angka acak saat ini tidak didukung di Client SDK 5 dengan OpenSSL Dynamic Engine.

Untuk meninjau petunjuk migrasi untuk semua penyedia, lihat[Migrasi dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5](client-sdk-migration.md).

## Migrasi ke SDK Klien 5
<a name="w2aac25c19c17c11"></a>

Ikuti petunjuk di bagian ini untuk bermigrasi dari Client SDK 3 ke Client SDK 5.

**catatan**  
Amazon Linux, Ubuntu 16.04, Ubuntu 18.04, CentOS 6, CentOS 8, dan RHEL 6 saat ini tidak didukung dengan Client SDK 5. Jika saat ini Anda menggunakan salah satu platform ini dengan Client SDK 3, Anda harus memilih platform yang berbeda saat bermigrasi ke Client SDK 5.

1. Copot pemasangan OpenSSL Dynamic Engine untuk Client SDK 3.

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

   ```
   $ sudo yum remove cloudhsm-client-dyn
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo yum remove cloudhsm-client-dyn
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo yum remove cloudhsm-client-dyn
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo yum remove cloudhsm-client-dyn
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client-dyn
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client-dyn
   ```

------

1. Hentikan Daemon Klien untuk SDK Klien 3.

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

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo systemctl stop cloudhsm-client
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo systemctl stop cloudhsm-client
   ```

------

1. Copot pemasangan Daemon Klien untuk SDK Klien 3.

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

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client
   ```

------
**catatan**  
Konfigurasi khusus perlu diaktifkan lagi.

1. Instal Client SDK OpenSSL Dynamic Engine dengan mengikuti langkah-langkahnya. [Instal OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 5](openssl5-install.md)

1. Client SDK 5 memperkenalkan format file konfigurasi baru dan alat bootstrap baris perintah. Untuk bootstrap Client SDK 5 OpenSSL Dynamic Engine Anda, ikuti petunjuk yang tercantum dalam panduan pengguna di bawah. [Bootstrap Klien SDK](cluster-connect.md#connect-how-to)

1. Di lingkungan pengembangan Anda, uji aplikasi Anda. Lakukan pembaruan pada kode yang ada untuk menyelesaikan perubahan yang melanggar sebelum migrasi terakhir Anda. 

## Topik terkait
<a name="openssl-migrate-to-sdk-5-seealso"></a>
+ [Praktik terbaik untuk AWS CloudHSM](best-practices.md)

# Migrasikan Penyedia Penyimpanan Kunci (KSP) Anda dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5
<a name="ksp-migrate-to-sdk-5"></a>

Topik ini menjelaskan cara memigrasikan [Penyedia Penyimpanan Kunci (KSP)](ksp-library.md) Anda dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5. Versi terbaru AWS CloudHSM Client SDK adalah 5.16. Untuk informasi tentang manfaat migrasi, lihat[Manfaat SDK AWS CloudHSM Klien 5](client-sdk-5-benefits.md).

Di AWS CloudHSM, Anda menggunakan AWS CloudHSM Client Software Development Kit (SDK) untuk melakukan operasi kriptografi. Client SDK 5 adalah SDK utama yang menerima fitur baru dan pembaruan dukungan platform.

Untuk petunjuk migrasi untuk semua penyedia, lihat[Migrasi dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5](client-sdk-migration.md).

## Migrasi ke SDK Klien 5
<a name="ksp-migrate-steps"></a>

1. Hentikan Daemon Klien untuk SDK Klien 3.

   ```
   PS C:\> Stop-Service "AWS CloudHSM Client"
   ```

1. Instal Client SDK 5 Key Storage Provider (KSP) pada instance Windows Server Anda. Untuk petunjuk, lihat [Instal penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM Client SDK 5](ksp-library-install.md).

1. Konfigurasikan Client SDK 5 Key Storage Provider (KSP) Anda menggunakan format file konfigurasi baru dan alat bootstrap baris perintah. Untuk petunjuk, lihat [Bootstrap Klien SDK](cluster-connect.md#connect-how-to).

1. Penyedia Penyimpanan Kunci (KSP) untuk AWS CloudHSM Klien SDK 5 menyertakan mode SDK3 kompatibilitas untuk mendukung file referensi utama yang dihasilkan di. SDK3 Untuk informasi selengkapnya, lihat [SDK3 mode kompatibilitas untuk Penyedia Penyimpanan Kunci (KSP) untuk AWS CloudHSM](ksp-library-configs-sdk3-compatibility-mode.md).
**catatan**  
Anda harus mengaktifkan mode SDK3 kompatibilitas saat menggunakan Client SDK 3 yang dihasilkan file referensi kunci dengan Client SDK 5.

## Migrasi ke instance Windows Server baru
<a name="ksp-migrate-new-windows"></a>

1. Selesaikan semua langkah di [Migrate to Client SDK 5](#ksp-migrate-steps) pada instance Windows Server baru Anda.

1. 

**Periksa file referensi kunci yang ada**  
Pada instance Windows Server asli Anda, periksa file referensi kunci di`C:\Users\Default\AppData\Roaming\Microsoft\Crypto\CaviumKSP\GlobalPartition`.
   + Jika file referensi kunci ada, salin semua konten di bawah `C:\Users\Default\AppData\Roaming\Microsoft\Crypto\CaviumKSP` termasuk `GlobalPartition` ke jalur direktori yang sama pada instance Windows Server baru Anda. Buat direktori jika tidak ada.
   + Jika file referensi kunci tidak ada, gunakan `cloudhsm-cli key generate-file --encoding ksp-key-reference` pada instance Windows Server baru Anda untuk membuatnya. Untuk petunjuk, lihat [Menghasilkan referensi kunci KSP (Windows)](cloudhsm_cli-key-generate-file.md#key-generate-ksp-key-reference).

1. 

**Verifikasi sertifikat root**  
Periksa sertifikat root Anda di otoritas sertifikasi root tepercaya:

   ```
   PS C:\Users\Administrator\Desktop> certutil -store Root
   
   Root "Trusted Root Certification Authorities"
   ================ Certificate 0 ================
   Serial Number: certificate-serial-number
   Issuer: CN=MYRootCA
    NotBefore: 2/5/2020 1:38 PM
    NotAfter: 2/5/2021 1:48 PM
    Issuer: CN=MYRootCA
   Signature matches Public Key
   Root Certificate: Subject matches Issuer
   Cert Hash(sha1): cert-hash
   No key provider information
   Cannot find the certificate and private key for decryption.
   CertUtil: -store command completed successfully.
   ```
**catatan**  
Perhatikan nomor seri sertifikat untuk digunakan pada langkah berikutnya.

1. 

**Ekspor sertifikat root**  
Ekspor sertifikat root ke file:

   ```
   certutil -store Root certificate-serial-number root-certificate-name.cer
   ```

1. 

**Verifikasi sertifikat HSM-backend**  
Periksa sertifikat HSM-backend Anda di toko sertifikat Pribadi:

   ```
   PS C:\Users\Administrator\Desktop> certutil -store My
   
   my "Personal"
   ================ Certificate 0 ================
   Serial Number: certificate-serial-number
   Issuer: CN=MYRootCA
    NotBefore: 2/5/2020 1:38 PM
    NotAfter: 2/5/2021 1:48 PM
   Subject: CN=www.mydomain.com, OU=Certificate Management, O=Information Technology, L=Houston, S=Texas, C=US
   Non-root Certificate
   Cert Hash(sha1): cert-hash
     Key Container = key-container-name
     Provider = Cavium Key Storage Provider
   Private key is NOT exportable
   Encryption test passed
   CertUtil: -store command completed successfully.
   ```
**catatan**  
Perhatikan nomor seri sertifikat untuk digunakan pada langkah berikutnya.

1. 

**Ekspor sertifikat HSM-backend**  
Ekspor sertifikat HSM-backend ke file:

   ```
   certutil -store My certificate-serial-number signed-certificate-name.cer
   ```

1. 

**Impor sertifikat root**  
Pada instance Windows baru Anda:

   1. Salin file CA root ke instance Windows baru Anda

   1. Impor sertifikat:

      ```
      certutil -addstore Root root-certificate-name.cer
      ```

1. 

**Verifikasi instalasi sertifikat root**  
Konfirmasikan sertifikat root diinstal dengan benar:

   ```
   PS C:\Users\Administrator\Desktop> certutil -store Root
   
   Root "Trusted Root Certification Authorities"
   ================ Certificate 0 ================
   Serial Number: certificate-serial-number
   Issuer: CN=MYRootCA
    NotBefore: 2/5/2020 1:38 PM
    NotAfter: 2/5/2021 1:48 PM
    Issuer: CN=MYRootCA
   Signature matches Public Key
   Root Certificate: Subject matches Issuer
   Cert Hash(sha1): cert-hash
   No key provider information
   Cannot find the certificate and private key for decryption.
   CertUtil: -store command completed successfully.
   ```

1. 

**Impor sertifikat HSM-backend**  
Pada instance Windows baru Anda:

   1. Salin sertifikat HSM-backend ke instance Windows baru Anda

   1. Impor sertifikat:

      ```
      certutil -addstore My signed-certificate-name.cer
      ```

1. 

**Verifikasi instalasi sertifikat HSM-backend**  
Konfirmasikan sertifikat HSM-backend diinstal dengan benar:

   ```
   PS C:\Users\Administrator\Desktop> certutil -store My
   
   my "Personal"
   ================ Certificate 0 ================
   Serial Number: certificate-serial-number
   Issuer: CN=MYRootCA
    NotBefore: 2/5/2020 1:38 PM
    NotAfter: 2/5/2021 1:48 PM
   Subject: CN=www.mydomain.com, OU=Certificate Management, O=Information Technology, L=Houston, S=Texas, C=US
   Non-root Certificate
   Cert Hash(sha1): cert-hash
   No key provider information
   Cannot find the certificate and private key for decryption.
   CertUtil: -store command completed successfully.
   ```
**catatan**  
Perhatikan nomor seri sertifikat untuk digunakan pada langkah selanjutnya.

1. 

**Buat file referensi kunci (opsional)**  
Selesaikan langkah ini hanya jika Anda perlu membuat file referensi kunci baru. Jika tidak, lanjutkan ke langkah berikutnya.
**catatan**  
Fitur ini hanya ada di SDK versi 5.16.0 dan yang lebih baru.

   1. Instal [OpenSSL](https://slproweb.com/products/Win32OpenSSL.html) dan ekstrak modulus:

      ```
      openssl x509 -in signed-certificate-name.cer -modulus -noout
      ```
**catatan**  
Perintah OpenSSL menampilkan modulus dalam format:. `Modulus=modulus-value` Perhatikan *modulus-value* untuk digunakan dalam perintah berikutnya.

   1. Buat file referensi kunci dengan CloudHSM CLI, lihat: [Menghasilkan referensi kunci KSP (Windows)](cloudhsm_cli-key-generate-file.md#key-generate-ksp-key-reference)

      ```
      & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" key generate-file --encoding ksp-key-reference --filter attr.class=private-key attr.modulus=0xmodulus-value
      ```
**catatan**  
Argumen perintah *modulus-value* in CloudHSM CLI harus `0x` diawali dengan untuk menunjukkan format heksadesimal.  
File referensi utama dibuat di`C:\Users\Default\AppData\Roaming\Microsoft\Crypto\CaviumKSP\GlobalPartition`.

1. 

**Buat konfigurasi perbaikan**  
Buat file bernama `repair.txt` dengan konten berikut:

   ```
   [Properties]
   11 = "" ; Add friendly name property
   2 = "{text}" ; Add Key Provider Information property
   _continue_="Container=key-container-name&"
   _continue_="Provider=Cavium Key Storage Provider&"
   _continue_="Flags=0&"
   _continue_="KeySpec=2"
   ```
**catatan**  
Ganti *key-container-name* dengan nama file referensi kunci dari. `C:\Users\Default\AppData\Roaming\Microsoft\Crypto\CaviumKSP\GlobalPartition`

1. 

**Toko sertifikat perbaikan**  
Jalankan perintah perbaikan:

   ```
   certutil -repairstore My certificate-serial-number repair.txt
   ```
**catatan**  
Nomor seri sertifikat diperoleh dari langkah-langkah sebelumnya saat memverifikasi instalasi sertifikat HSM-backend.

1. 

**Verifikasi asosiasi sertifikat**  
Konfirmasikan sertifikat terkait dengan benar:

   ```
   PS C:\Users\Administrator\Desktop> certutil -store My
   
   my "Personal"
   ================ Certificate 0 ================
   Serial Number: certificate-serial-number
   Issuer: CN=MYRootCA
    NotBefore: 2/5/2020 1:38 PM
    NotAfter: 2/5/2021 1:48 PM
   Subject: CN=www.mydomain.com, OU=Certificate Management, O=Information Technology, L=Houston, S=Texas, C=US
   Non-root Certificate
   Cert Hash(sha1): cert-hash
     Key Container = key-container-name
     Provider = Cavium Key Storage Provider
   Private key is NOT exportable
   ERROR: Could not verify certificate public key against private key
   CertUtil: -store command completed successfully.
   ```

   Verifikasi output menunjukkan:
   + Nama kontainer kunci yang benar
   + Penyedia Penyimpanan Kunci Cavium
   + `ERROR: Could not verify certificate public key against private key`Ini adalah masalah yang diketahui, lihat [Masalah: Verifikasi penyimpanan sertifikat gagal](ki-ksp-sdk.md#ki-ksp-1)

1. 

**Uji aplikasi Anda**  
Sebelum menyelesaikan migrasi:

   1. Uji aplikasi Anda di lingkungan pengembangan Anda

   1. Perbarui kode Anda untuk menyelesaikan setiap perubahan yang melanggar

   1. Untuk panduan khusus aplikasi, lihat [Mengintegrasikan aplikasi pihak ketiga dengan AWS CloudHSM](third-party-applications.md)

## Verifikasi migrasi
<a name="ksp-migrate-verification"></a>

Setelah menyelesaikan langkah-langkah migrasi, verifikasi bahwa:
+ Sertifikat Anda dipasang dengan benar di toko sertifikat yang benar
+ File referensi utama hadir di lokasi yang benar
+ Aplikasi Anda dapat melakukan operasi kriptografi menggunakan sertifikat yang dimigrasi

## Pemecahan masalah
<a name="ksp-migrate-troubleshooting"></a>

Jika Anda mengalami masalah selama migrasi, verifikasi:
+ Semua sertifikat diekspor dengan benar dari sistem sumber
+ Nomor seri sertifikat cocok antar sistem
+ Nama kontainer kunci dalam file repair.txt cocok dengan file referensi kunci Anda
+ SDK3 mode kompatibilitas diaktifkan jika menggunakan file referensi kunci SDK3 yang dihasilkan

## Topik terkait
<a name="ksp-migrate-to-sdk-5-seealso"></a>
+ [Praktik terbaik untuk AWS CloudHSM](best-practices.md)

# Migrasikan penyedia JCE Anda dari AWS CloudHSM Client SDK 3 ke Client SDK 5
<a name="java-lib-migrate_to_sdk5"></a>

Gunakan topik ini untuk memigrasikan [penyedia JCE](java-library.md) Anda dari AWS CloudHSM Client SDK 3 ke Client SDK 5. Untuk manfaat migrasi, lihat[Manfaat SDK AWS CloudHSM Klien 5](client-sdk-5-benefits.md).

Pada tahun AWS CloudHSM, aplikasi pelanggan melakukan operasi kriptografi menggunakan AWS CloudHSM Client Software Development Kit (SDK). Client SDK 5 adalah SDK utama yang terus memiliki fitur baru dan dukungan platform yang ditambahkan ke dalamnya.

Penyedia Client SDK 3 JCE menggunakan kelas khusus dan APIs itu bukan bagian dari spesifikasi JCE standar. Client SDK 5 untuk penyedia JCE adalah keluhan dengan spesifikasi JCE dan tidak kompatibel dengan Client SDK 3 di area tertentu. Aplikasi pelanggan mungkin memerlukan perubahan sebagai bagian dari migrasi ke SDK Klien 5. Bagian ini menguraikan perubahan yang diperlukan untuk migrasi yang berhasil.

Untuk meninjau petunjuk migrasi untuk semua penyedia, lihat[Migrasi dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5](client-sdk-migration.md).

**Topics**
+ [Bersiaplah dengan mengatasi perubahan yang melanggar](#jce-migration-preparation-sdk5)
+ [Migrasi ke SDK Klien 5](#w2aac25c19c21c15)
+ [Topik terkait](#java-lib-migrate_to_sdk5-seealso)

## Bersiaplah dengan mengatasi perubahan yang melanggar
<a name="jce-migration-preparation-sdk5"></a>

Tinjau perubahan yang melanggar ini dan perbarui aplikasi Anda di lingkungan pengembangan yang sesuai.

### Kelas dan nama Provider telah berubah
<a name="w2aac25c19c21c13b5"></a>


****  

| Apa yang telah berubah | Apa itu di Client SDK 3 | Apa itu di Client SDK 5 | Contoh | 
| --- | --- | --- | --- | 
| Kelas dan nama penyedia | Kelas penyedia JCE di Client SDK 3 dipanggil `CaviumProvider` dan memiliki nama Provider. `Cavium` | Di Client SDK 5, kelas Provider dipanggil `CloudHsmProvider` dan memiliki nama `CloudHSM` Provider. | Contoh cara menginisialisasi `CloudHsmProvider` objek tersedia di [repositori AWS CloudHSM GitHub sampel](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AESGCMEncryptDecryptRunner.java#L43-L50). | 

### Login eksplisit telah berubah, implisit belum
<a name="w2aac25c19c21c13b7"></a>


****  

| Apa yang telah berubah | Apa itu di Client SDK 3 | Apa itu di Client SDK 5 | Contoh | 
| --- | --- | --- | --- | 
| Login eksplisit | Klien SDK 3 menggunakan `LoginManager` kelas untuk login eksplisit. [1](#explicit_login_sdk3_note) | Di Client SDK 5, `CloudHSM` penyedia mengimplementasikan `AuthProvider` untuk login eksplisit. `AuthProvider`adalah kelas Java standar dan mengikuti cara idiomatik Java untuk masuk ke Provider. Dengan manajemen status login yang ditingkatkan di Client SDK 5, aplikasi tidak perlu lagi memantau dan melakukan login selama [2](#explicit_login_sdk5_note)rekoneksi. | Untuk contoh tentang cara menggunakan login eksplisit dengan Client SDK 5, lihat LoginRunner contoh di repositori sampel [AWS GitHub CloudHSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java#L109C5-L141). | 
| Login implisit | Tidak ada perubahan yang diperlukan untuk login implisit. File properti yang sama dan semua variabel lingkungan akan terus berfungsi untuk login implisit saat bermigrasi dari Client SDK 3 ke Client SDK 5. | Untuk contoh tentang cara menggunakan login implisit dengan Client SDK 5, lihat [LoginRunner sampel di repositori](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java#L143-L202) AWS CloudHSM GitHub sampel. | 
+ [1] Cuplikan kode SDK 3 klien:

  ```
  LoginManager lm = LoginManager.getInstance();
                         
  lm.login(partition, user, pass);
  ```
+ [2] Cuplikan kode SDK 5 klien:

  ```
  // Construct or get the existing provider object 
  AuthProvider provider = new CloudHsmProvider();
                         
  // Call login method on the CloudHsmProvider object
  // Here loginHandler is a CallbackHandler
  provider.login(null, loginHandler);
  ```

  Untuk contoh tentang cara menggunakan login eksplisit dengan Client SDK 5, lihat [LoginRunner sampel di repositori](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java#L109C5-L141) AWS CloudHSM GitHub sampel.

### Generasi kunci telah berubah
<a name="w2aac25c19c21c13b9"></a>


****  

| Apa yang telah berubah | Apa itu di Client SDK 3 | Apa itu di Client SDK 5 | Contoh | 
| --- | --- | --- | --- | 
| Pembuatan kunci | Di Client SDK 3, `Cavium[Key-type]AlgorithmParameterSpec` digunakan untuk menentukan parameter pembuatan kunci. Untuk cuplikan kode, lihat catatan kaki. [1](#key_generation_sdk3_note) | Di Client SDK 5, `KeyAttributesMap` digunakan untuk menentukan atribut pembuatan kunci. Untuk cuplikan kode, lihat catatan kaki. [2](#key_generation_sdk5_note) | Untuk contoh tentang cara menggunakan `KeyAttributesMap` untuk menghasilkan kunci simetris, lihat [SymmetricKeys sampel di repositori sampel](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/SymmetricKeys.java) AWS CloudHSM GitHub . | 
| Generasi pasangan kunci | Di Client SDK 3, `Cavium[Key-type]AlgorithmparameterSpec` digunakan untuk menentukan parameter pembuatan key pair. Untuk cuplikan kode, lihat catatan kaki. [3](#key_pair_generation_sdk3_note) | Di Client SDK 5, `KeyPairAttributesMap` digunakan untuk menentukan parameter ini. Untuk cuplikan kode, lihat catatan kaki. [4](#key_pair_generation_sdk5_note) | Untuk contoh tentang cara menggunakan `KeyAttributesMap` untuk menghasilkan kunci asimetris, lihat [AsymmetricKeys sampel](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AsymmetricKeys.java) di repositori AWS CloudHSM GitHub sampel. | 
+ [1] Cuplikan kode pembuatan kunci SDK 3 klien:

  ```
  KeyGenerator keyGen = KeyGenerator.getInstance("AES", "Cavium");
  CaviumAESKeyGenParameterSpec aesSpec = new CaviumAESKeyGenParameterSpec(
  keySizeInBits,
  keyLabel,
  isExtractable,
  isPersistent);
  keyGen.init(aesSpec);
  SecretKey aesKey = keyGen.generateKey();
  ```
+ [2] Cuplikan kode pembuatan kunci SDK 5 klien:

  ```
  KeyGenerator keyGen = KeyGenerator.getInstance("AES",
  CloudHsmProvider.PROVIDER_NAME);
                      
  final KeyAttributesMap aesSpec = new KeyAttributesMap();
  aesSpec.put(KeyAttribute.LABEL, keyLabel);
  aesSpec.put(KeyAttribute.SIZE, keySizeInBits);
  aesSpec.put(KeyAttribute.EXTRACTABLE, isExtractable);
  aesSpec.put(KeyAttribute.TOKEN, isPersistent);
                      
  keyGen.init(aesSpec);
  SecretKey aesKey = keyGen.generateKey();
  ```
+ [3] Cuplikan kode pembuatan key pair SDK 3 klien::

  ```
  KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("rsa", "Cavium");
  CaviumRSAKeyGenParameterSpec spec = new CaviumRSAKeyGenParameterSpec(
  keySizeInBits,
  new BigInteger("65537"),
  label + ":public",
  label + ":private",
  isExtractable,
  isPersistent);
                      
  keyPairGen.initialize(spec);
                      
  keyPairGen.generateKeyPair();
  ```
+ [4] Cuplikan kode pembuatan key pair SDK 5 klien:

  ```
  KeyPairGenerator keyPairGen =
  KeyPairGenerator.getInstance("RSA", providerName);
                      
  // Set attributes for RSA public key
  final KeyAttributesMap publicKeyAttrsMap = new KeyAttributesMap();
  publicKeyAttrsMap.putAll(additionalPublicKeyAttributes);
  publicKeyAttrsMap.put(KeyAttribute.LABEL, label + ":Public");
  publicKeyAttrsMap.put(KeyAttribute.MODULUS_BITS, keySizeInBits);
  publicKeyAttrsMap.put(KeyAttribute.PUBLIC_EXPONENT,
  new BigInteger("65537").toByteArray());
                      
  // Set attributes for RSA private key
  final KeyAttributesMap privateKeyAttrsMap = new KeyAttributesMap();
  privateKeyAttrsMap.putAll(additionalPrivateKeyAttributes);
  privateKeyAttrsMap.put(KeyAttribute.LABEL, label + ":Private");
                      
  // Create KeyPairAttributesMap and use that to initialize the 
  // keyPair generator
  KeyPairAttributesMap keyPairSpec =
  new KeyPairAttributesMapBuilder()
  .withPublic(publicKeyAttrsMap)
  .withPrivate(privateKeyAttrsMap)
  .build();
                      
  keyPairGen.initialize(keyPairSpec);
  keyPairGen.generateKeyPair();
  ```

### Menemukan, menghapus, dan mereferensikan kunci telah berubah
<a name="w2aac25c19c21c13c11"></a>

Menemukan kunci yang sudah dihasilkan dengan AWS CloudHSM memerlukan penggunaan. KeyStore Klien SDK 3 memiliki dua KeyStore jenis: `Cavium` dan`CloudHSM`. Klien SDK 5 hanya memiliki satu KeyStore jenis:`CloudHSM`. 

Pindah dari `Cavium` KeyStore ke `CloudHSM` KeyStore membutuhkan perubahan KeyStore tipe. Selain itu, Client SDK 3 menggunakan pegangan kunci untuk referensi kunci, sedangkan Client SDK 5 menggunakan label kunci. Perubahan perilaku yang dihasilkan tercantum di bawah ini.


| Apa yang telah berubah | Apa itu di Client SDK 3 | Apa itu di Client SDK 5 | Contoh | 
| --- | --- | --- | --- | 
| Referensi utama | Dengan Client SDK 3, aplikasi menggunakan label kunci atau pegangan kunci untuk referensi kunci di HSM. Mereka menggunakan label dengan KeyStore untuk menemukan kunci, atau mereka menggunakan pegangan dan membuat `CaviumKey` objek. | Di Client SDK 5, aplikasi dapat menggunakan tombol [AWS CloudHSM KeyStore Kelas Java untuk Client SDK 5](alternative-keystore_5.md) untuk menemukan kunci berdasarkan label. Untuk menemukan kunci dengan pegangan, gunakan AWS CloudHSM `KeyStoreWithAttributes` dengan AWS CloudHSM `KeyReferenceSpec`. |  | 
| Menemukan beberapa entri | Saat mencari kunci menggunakan`getEntry`,`getKey`, atau `getCertificate` dalam skenario di mana beberapa item dengan kriteria yang sama ada di `Cavium` KeyStore, hanya entri pertama yang ditemukan yang akan dikembalikan. | Dengan AWS CloudHSM `KeyStore` dan`KeyStoreWithAttributes`, skenario yang sama ini akan menghasilkan pengecualian yang dilemparkan. Untuk memperbaiki masalah ini, disarankan untuk mengatur label unik untuk kunci menggunakan [Mengatur atribut kunci dengan CloudHSM CLI](cloudhsm_cli-key-set-attribute.md) perintah di CloudHSM CLI. Atau gunakan `KeyStoreWithAttributes#getKeys` untuk mengembalikan semua kunci yang sesuai dengan kriteria. |  | 
| Temukan semua kunci | Dimungkinkan di Client SDK 3 untuk menemukan semua kunci di HSM menggunakan. `Util.findAllKeys()` | Client SDK 5 membuat pencarian kunci lebih sederhana dan lebih efisien dengan menggunakan `KeyStoreWithAttributes` kelas. Jika memungkinkan, cache kunci Anda untuk meminimalkan latensi. Untuk informasi selengkapnya, lihat [Mengelola kunci secara efektif dalam aplikasi Anda](bp-application-integration.md#bp-manage-application). Bila Anda perlu mengambil semua kunci dari HSM, gunakan `KeyStoreWithAttributes#getKeys` dengan kosong. `KeyAttributesMap`  | Contoh yang menggunakan `KeyStoreWithAttributes` kelas untuk menemukan kunci tersedia di [repositori AWS CloudHSM GitHub sampel](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java#L205-L223) dan cuplikan kode ditampilkan di. [1](#using_keystore_att_note) | 
| Penghapusan kunci | Klien SDK 3 digunakan `Util.deleteKey()` untuk menghapus kunci.  | `Key`Objek di Client SDK 5 mengimplementasikan `Destroyable` antarmuka yang memungkinkan kunci dihapus menggunakan `destroy()` metode antarmuka ini. | Kode contoh yang menunjukkan fungsionalitas tombol hapus dapat ditemukan di repositori sampel [ GitHub CloudHSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java#L229-L234). Cuplikan sampel untuk setiap SDK ditampilkan di. [2](#delete_key_note) | 
+ [1] cuplikan ditunjukkan di bawah ini:

  ```
  KeyAttributesMap findSpec = new KeyAttributesMap();
  findSpec.put(KeyAttribute.LABEL, label);
  findSpec.put(KeyAttribute.KEY_TYPE, keyType);
  KeyStoreWithAttributes keyStore = KeyStoreWithAttributes.getInstance("CloudHSM");
                      
  keyStore.load(null, null);
  keyStore.getKey(findSpec);
  ```
+ [2] Menghapus kunci di Client SDK 3:

  ```
  Util.deleteKey(key);
  ```

  Menghapus kunci di Client SDK 5:

  ```
  ((Destroyable) key).destroy();
  ```

### Operasi membuka cipher telah berubah, operasi cipher lainnya belum
<a name="w2aac25c19c21c13c13"></a>

**catatan**  
Tidak ada perubahan yang diperlukan untuk operasi Cipher. encrypt/decrypt/wrap

Operasi buka bungkus memerlukan `CaviumUnwrapParameterSpec` kelas Client SDK 3 untuk diganti dengan salah satu kelas berikut khusus untuk operasi kriptografi yang terdaftar.
+ `GCMUnwrapKeySpec`untuk `AES/GCM/NoPadding` membuka bungkusnya
+ `IvUnwrapKeySpec`untuk `AESWrap unwrap` dan `AES/CBC/NoPadding unwrap`
+ `OAEPUnwrapKeySpec`untuk `RSA OAEP unwrap`

Contoh cuplikan untuk: `OAEPUnwrapkeySpec`

```
OAEPParameterSpec oaepParameterSpec =
new OAEPParameterSpec(
        "SHA-256",
        "MGF1",
        MGF1ParameterSpec.SHA256,
        PSpecified.DEFAULT);

KeyAttributesMap keyAttributesMap =
        new KeyAttributesMap(KeyAttributePermissiveProfile.KEY_CREATION);
keyAttributesMap.put(KeyAttribute.TOKEN, true);
keyAttributesMap.put(KeyAttribute.EXTRACTABLE, false);

OAEPUnwrapKeySpec spec = new OAEPUnwrapKeySpec(oaepParameterSpec,
        keyAttributesMap);

Cipher hsmCipher =
        Cipher.getInstance(
                "RSA/ECB/OAEPPadding",
                CloudHsmProvider.PROVIDER_NAME);
hsmCipher.init(Cipher.UNWRAP_MODE, key, spec);
```

### Operasi tanda tangan tidak berubah
<a name="w2aac25c19c21c13c15"></a>

Tidak ada perubahan yang diperlukan untuk operasi Tanda Tangan. 

## Migrasi ke SDK Klien 5
<a name="w2aac25c19c21c15"></a>

Ikuti petunjuk di bagian ini untuk bermigrasi dari Client SDK 3 ke Client SDK 5.

**catatan**  
Amazon Linux, Ubuntu 16.04, Ubuntu 18.04 CentOS 6, CentOS 8, dan RHEL 6 saat ini tidak didukung dengan Client SDK 5. Jika saat ini Anda menggunakan salah satu platform ini dengan Client SDK 3, Anda harus memilih platform yang berbeda saat bermigrasi ke Client SDK 5.

1. Copot pemasangan penyedia JCE untuk Client SDK 3.

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

   ```
   $ sudo yum remove cloudhsm-client-jce
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo yum remove cloudhsm-client-jce
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo yum remove cloudhsm-client-jce
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo yum remove cloudhsm-client-jce
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client-jce
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client-jce
   ```

------

1. Hentikan Daemon Klien untuk SDK Klien 3.

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

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo service cloudhsm-client stop
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo systemctl stop cloudhsm-client
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo systemctl stop cloudhsm-client
   ```

------

1. Copot pemasangan Daemon Klien untuk SDK Klien 3.

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

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ CentOS 7 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ RHEL 7 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ RHEL 8 ]

   ```
   $ sudo yum remove cloudhsm-client
   ```

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client
   ```

------
#### [ Ubuntu 18.04 LTS ]

   ```
   $ sudo apt remove cloudhsm-client
   ```

------
**catatan**  
Konfigurasi khusus perlu diaktifkan lagi.

1. Instal penyedia Client SDK JCE dengan mengikuti langkah-langkahnya. [Instal penyedia JCE untuk AWS CloudHSM Client SDK 5](java-library-install_5.md)

1. Client SDK 5 memperkenalkan format file konfigurasi baru dan alat bootstrap baris perintah. Untuk mem-bootstrap penyedia Client SDK 5 JCE Anda, ikuti petunjuk yang tercantum dalam panduan pengguna di bawah. [Bootstrap Klien SDK](cluster-connect.md#connect-how-to)

1. Di lingkungan pengembangan Anda, uji aplikasi Anda. Lakukan pembaruan pada kode yang ada untuk menyelesaikan perubahan yang melanggar sebelum migrasi terakhir Anda. 

## Topik terkait
<a name="java-lib-migrate_to_sdk5-seealso"></a>
+ [Praktik terbaik untuk AWS CloudHSM](best-practices.md)

# Menggunakan Client SDK 5 untuk bekerja dengan AWS CloudHSM
<a name="client-sdk5"></a>

 AWS CloudHSM mencakup dua versi SDK Klien utama: 
+ SDK Klien 5: Ini adalah SDK Klien terbaru dan default kami. Untuk informasi tentang manfaat dan keuntungan yang diberikannya, lihat[Manfaat SDK AWS CloudHSM Klien 5](client-sdk-5-benefits.md).
+ SDK Klien 3: Ini adalah SDK Klien kami yang lebih lama. Ini mencakup satu set lengkap komponen untuk platform dan aplikasi berbasis bahasa kompatibilitas dan alat manajemen.

Untuk petunjuk tentang migrasi dari SDK Klien 3 ke SDK Klien 5, lihat. [Migrasi dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5](client-sdk-migration.md)

Topik ini menjelaskan SDK Klien 5. Untuk memeriksa versi SDK Klien yang Anda gunakan, lihat 

**Topics**
+ [Manfaat SDK AWS CloudHSM Klien 5](client-sdk-5-benefits.md)
+ [AWS CloudHSM Platform yang didukung SDK Klien 5](client-supported-platforms.md)
+ [Pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 5](pkcs11-library.md)
+ [Mesin AWS CloudHSM Dinamis OpenSSL untuk SDK Klien 5](openssl-library.md)
+ [Penyedia AWS CloudHSM OpenSSL untuk SDK Klien 5](openssl-provider-library.md)
+ [Penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM Klien SDK 5](ksp-library.md)
+ [Penyedia JCE untuk AWS CloudHSM Klien SDK 5](java-library.md)

# Manfaat SDK AWS CloudHSM Klien 5
<a name="client-sdk-5-benefits"></a>

Dibandingkan dengan AWS CloudHSM Client SDK 3, Client SDK 5 lebih mudah dikelola, menawarkan konfigurasi yang unggul, dan peningkatan keandalan. Client SDK 5 juga memberikan beberapa keuntungan utama tambahan untuk Client SDK 3. 

**Dirancang untuk arsitektur tanpa server**  
Klien SDK 5 tidak memerlukan daemon klien, jadi Anda tidak perlu lagi mengelola layanan latar belakang. Ini membantu pengguna dalam beberapa cara penting:   
+ Menyederhanakan proses startup aplikasi. Yang perlu Anda lakukan untuk memulai dengan CloudHSM adalah mengkonfigurasi SDK sebelum menjalankan aplikasi Anda.
+ Anda tidak memerlukan proses yang terus berjalan, yang membuat integrasi dengan komponen tanpa server seperti Lambda dan Elastic Container Service (ECS) lebih mudah.

**Integrasi pihak ketiga yang lebih baik dan portabilitas yang lebih mudah**  
Klien SDK 5 mengikuti spesifikasi JCE dengan cermat dan memberikan portabilitas yang lebih mudah antara penyedia JCE yang berbeda dan integrasi pihak ketiga yang lebih baik

**Peningkatan pengalaman pengguna dan konfigurasi**  
Client SDK 5 meningkatkan keterbacaan pesan log dan memberikan pengecualian yang lebih jelas dan mekanisme penanganan kesalahan, yang semuanya membuat triaging swalayan jauh lebih mudah bagi pengguna. SDK 5 juga menawarkan berbagai konfigurasi, yang tercantum di halaman [Configure Tool](https://docs.aws.amazon.com/cloudhsm/latest/userguide/configure-sdk-5.html). 

**Dukungan platform yang lebih luas**  
Klien SDK 5 menawarkan lebih banyak dukungan untuk platform operasi modern. [Ini termasuk dukungan untuk teknologi ARM dan dukungan yang lebih besar untuk [JCE](https://docs.aws.amazon.com/cloudhsm/latest/userguide/java-library_5.html), [PKCS \$111](https://docs.aws.amazon.com/cloudhsm/latest/userguide/pkcs11-library.html), dan OpenSSL.](https://docs.aws.amazon.com/cloudhsm/latest/userguide/openssl-library.html) Untuk informasi selengkapnya, lihat [Platform yang didukung](client-supported-platforms.md). 

**IPv6 dukungan koneksi**  
Client SDK 5.14\$1 mendukung koneksi ke dual-stack menggunakan. HSMs IPv6 

**Fitur dan mekanisme tambahan**  
SDK Klien 5 mencakup fitur dan mekanisme tambahan yang tidak tersedia di SDK Klien 3, dan SDK Klien 5 akan terus menambahkan lebih banyak mekanisme di masa mendatang. 

# AWS CloudHSM Platform yang didukung SDK Klien 5
<a name="client-supported-platforms"></a>

Dukungan dasar berbeda untuk setiap versi SDK AWS CloudHSM Klien. Dukungan platform untuk komponen dalam SDK biasanya cocok dengan dukungan dasar, tetapi tidak selalu. Untuk menentukan dukungan platform untuk komponen tertentu, pertama-tama pastikan platform yang Anda inginkan muncul di bagian dasar SDK, lalu periksa pengecualian atau informasi terkait lainnya di bagian komponen.

AWS CloudHSM hanya mendukung sistem operasi 64-bit.

Dukungan platform berubah dari waktu ke waktu. Versi CloudHSM Client SDK sebelumnya mungkin tidak mendukung semua sistem operasi yang tercantum di sini. Gunakan catatan rilis untuk menentukan dukungan sistem operasi untuk versi CloudHSM Client SDK sebelumnya. Untuk informasi selengkapnya, lihat [Unduh untuk AWS CloudHSM Client SDK](client-history.md).

Untuk platform yang didukung untuk SDK Klien sebelumnya, lihat [AWS CloudHSM Platform yang didukung SDK Klien 3](sdk3-support.md)

Klien SDK 5 tidak memerlukan daemon klien.

**Topics**
+ [Dukungan Linux untuk Client SDK 5](sdk8-linux.md)
+ [Dukungan Windows untuk Klien SDK 5](sdk8-windows.md)
+ [Dukungan tanpa server untuk Klien SDK 5](sdk8-serverless.md)
+ [Kompatibilitas HSM untuk Klien SDK 5](sdk5-hsm-types.md)

# Dukungan Linux untuk AWS CloudHSM Client SDK 5
<a name="sdk8-linux"></a>

 AWS CloudHSM Client SDK 5 mendukung sistem operasi dan platform Linux berikut. 


| Platform yang didukung | X86\$164 Arsitektur | Arsitektur ARM | 
| --- | --- | --- | 
| Amazon Linux 2 | Ya | Ya | 
| Amazon Linux 2023 | Ya | Ya | 
| Perusahaan Topi Merah Linux 8 (8.3\$1) | Ya | Ya | 
| Perusahaan Topi Merah Linux 9 (9.2\$1) | Ya | Ya | 
| Perusahaan Topi Merah Linux 10 (10.0\$1) | Ya | Ya | 
| Ubuntu 22.04 LTS | Ya | Ya | 
| Ubuntu 24.04 LTS | Ya | Ya | 
+ SDK 5.16 adalah rilis terakhir yang memberikan dukungan platform Ubuntu 20.04 LTS. Untuk informasi lebih lanjut, lihat situs [web Ubuntu](https://ubuntu.com/blog/ubuntu-20-04-lts-end-of-life-standard-support-is-coming-to-an-end-heres-how-to-prepare).
+ SDK 5.12 adalah rilis terakhir yang memberikan dukungan platform CentOS 7 (7.8\$1). Untuk informasi lebih lanjut, lihat situs web [CentOS](https://blog.centos.org/2023/04/end-dates-are-coming-for-centos-stream-8-and-centos-linux-7/).
+ SDK 5.12 adalah rilis terakhir yang memberikan dukungan platform Red Hat Enterprise Linux 7 (7.8\$1). Untuk informasi lebih lanjut, lihat situs [web Red Hat](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux/rhel-7-end-of-maintenance).
+ SDK 5.4.2 adalah rilis terakhir yang memberikan dukungan platform CentOS 8. Untuk informasi lebih lanjut, lihat situs web [CentOS](https://www.centos.org/centos-linux-eol/).

# Dukungan Windows untuk AWS CloudHSM Klien SDK 5
<a name="sdk8-windows"></a>

AWS CloudHSM Client SDK 5 mendukung versi Windows Server berikut.
+ Microsoft Windows Server 2016
+ Microsoft Windows Server 2019
+ Server Microsoft Windows 2022
+ Microsoft Windows Server 2025

# Dukungan tanpa server untuk AWS CloudHSM Klien SDK 5
<a name="sdk8-serverless"></a>

 AWS CloudHSM Klien SDK 5 mendukung layanan tanpa AWS server berikut. 
+ AWS Lambda
+ Docker/ECS

# Kompatibilitas HSM untuk AWS CloudHSM Klien SDK 5
<a name="sdk5-hsm-types"></a>

Tabel berikut menjelaskan kompatibilitas AWS CloudHSM Client SDK 5 untuk HSMs.


| hsm1.sedang | hsm2m.sedang | 
| --- | --- | 
| Kompatibel dengan Client SDK versi 5.0.0 dan yang lebih baru. |  Kompatibel dengan Client SDK versi 5.9.0 dan yang lebih baru.  | 

# Pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 5
<a name="pkcs11-library"></a>

PKCS \$111 adalah standar untuk melakukan operasi kriptografi pada modul keamanan perangkat keras (). HSMs AWS CloudHSM menawarkan implementasi pustaka PKCS \$111 yang sesuai dengan PKCS \$111 versi 2.40.

Untuk informasi tentang bootstrap, lihat. [Menghubungkan ke cluster](cluster-connect.md) Untuk pemecahan masalah, lihat. [Masalah yang diketahui untuk pustaka PKCS \$111 untuk AWS CloudHSMMasalah yang diketahui untuk pustaka PKCS \$111](ki-pkcs11-sdk.md)

Untuk informasi tentang penggunaan SDK Klien 3, lihat[Menggunakan versi SDK sebelumnya untuk bekerja dengan AWS CloudHSM](choose-client-sdk.md).

**Topics**
+ [Instal pustaka PKCS \$111](pkcs11-library-install.md)
+ [Otentikasi ke pustaka PKCS \$111](pkcs11-pin.md)
+ [Tipe kunci](pkcs11-key-types.md)
+ [Mekanisme](pkcs11-mechanisms.md)
+ [Operasi API](pkcs11-apis.md)
+ [Atribut kunci](pkcs11-attributes.md)
+ [Sampel Kode](pkcs11-samples.md)
+ [Konfigurasi lanjutan](pkcs11-library-configs.md)
+ [Penyimpanan sertifikat](pkcs11-certificate-storage.md)

# Instal pustaka PKCS \$111 untuk AWS CloudHSM Client SDK 5
<a name="pkcs11-library-install"></a>

Topik ini memberikan petunjuk untuk menginstal pustaka PKCS \$111 versi terbaru untuk seri versi AWS CloudHSM Client SDK 5. [Untuk informasi selengkapnya tentang pustaka SDK Klien atau PKCS \$111, lihat [Menggunakan pustaka SDK Klien](use-hsm.md) dan PKCS \$111.](pkcs11-library.md)

Dengan klien SDK 5, Anda tidak diharuskan untuk menginstal atau menjalankan daemon klien. 

Untuk menjalankan satu klaster HSM dengan SDK Klien 5, Anda harus terlebih dahulu mengelola pengaturan daya tahan kunci klien dengan menetapkan `disable_key_availability_check` ke `True`. Untuk informasi selengkapnya, lihat [Sinkronisasi Kunci](manage-key-sync.md) dan [Alat Konfigurasi SDK Klien 5](configure-sdk-5.md). 

Untuk informasi selengkapnya tentang pustaka PKCS \$111 di Client SDK 5, lihat pustaka [PKCS](pkcs11-library.md) \$111.

**catatan**  
Untuk menjalankan satu klaster HSM dengan SDK Klien 5, Anda harus terlebih dahulu mengelola pengaturan daya tahan kunci klien dengan menetapkan `disable_key_availability_check` ke `True`. Untuk informasi selengkapnya, lihat [Sinkronisasi Kunci](manage-key-sync.md) dan [Alat Konfigurasi SDK Klien 5](configure-sdk-5.md).

**Untuk menginstal dan mengkonfigurasi pustaka PKCS \$111**

1. Gunakan perintah berikut untuk mengunduh dan menginstal pustaka PKCS \$111.

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

   Instal pustaka PKCS \$111 untuk Amazon Linux 2023 pada arsitektur X86\$164:

   ```
   $ 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
   ```

   Instal pustaka PKCS \$111 untuk Amazon Linux 2023 pada arsitektur: ARM64 

   ```
   $ 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 ]

   Instal pustaka PKCS \$111 untuk Amazon Linux 2 pada arsitektur X86\$164:

   ```
   $ 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
   ```

   Instal pustaka PKCS \$111 untuk Amazon Linux 2 pada ARM64 arsitektur:

   ```
   $ 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) ]

   Instal pustaka PKCS \$111 untuk RHEL 10 pada arsitektur X86\$164:

   ```
   $ 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
   ```

   Instal pustaka PKCS \$111 untuk RHEL 10 pada arsitektur: ARM64 

   ```
   $ 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) ]

   Instal pustaka PKCS \$111 untuk RHEL 9 pada arsitektur X86\$164:

   ```
   $ 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
   ```

   Instal pustaka PKCS \$111 untuk RHEL 9 pada arsitektur: ARM64 

   ```
   $ 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) ]

   Instal pustaka PKCS \$111 untuk RHEL 8 pada arsitektur X86\$164:

   ```
   $ 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
   ```

   Instal pustaka PKCS \$111 untuk RHEL 8 pada arsitektur: ARM64 

   ```
   $ 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 ]

   Instal pustaka PKCS \$111 untuk Ubuntu 24.04 LTS pada arsitektur X86\$164:

   ```
   $ 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
   ```

   Instal pustaka PKCS \$111 untuk Ubuntu 24.04 LTS pada arsitektur: ARM64 

   ```
   $ 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 ]

   Instal pustaka PKCS \$111 untuk Ubuntu 22.04 LTS pada arsitektur X86\$164:

   ```
   $ 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
   ```

   Instal pustaka PKCS \$111 untuk Ubuntu 22.04 LTS pada arsitektur: ARM64 

   ```
   $ 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 ]

   Instal pustaka PKCS \$111 untuk Windows Server pada arsitektur X86\$164:

   1. Unduh [pustaka PKCS \$111 untuk SDK Klien 5](https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMPKCS11-latest.msi).

   1. Jalankan penginstal pustaka PKCS \$111 (**AWSCloudHSMPKCS11-latest.msi) dengan hak** administratif Windows.

------

1. Gunakan alat konfigurasi untuk menentukan lokasi sertifikat penerbitan. Untuk petunjuk, lihat [Tentukan lokasi sertifikat penerbitan](cluster-connect.md#specify-cert-location).

1. Untuk terhubung ke cluster Anda, lihat[Bootstrap Klien SDK](cluster-connect.md#connect-how-to).

1. Anda dapat menemukan berkas pustaka PKCS \$111 di lokasi berikut:
   + Linux biner, skrip konfigurasi, dan berkas log:

     ```
     /opt/cloudhsm
     ```

     Biner Windows:

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

     Skrip konfigurasi Windows dan berkas log:

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

# Mengautentikasi ke pustaka PKCS \$111 untuk AWS CloudHSM SDK Klien 5
<a name="pkcs11-pin"></a>

Saat Anda menggunakan pustaka PKCS \$111, aplikasi Anda berjalan sebagai [pengguna kripto (CU)](manage-hsm-users.md) tertentu di dalam Anda HSMs . AWS CloudHSM Aplikasi Anda dapat melihat dan mengelola hanya kunci yang CU miliki dan bagikan. Anda dapat menggunakan CU yang ada di HSMs atau membuat CU baru untuk aplikasi Anda. Untuk informasi tentang pengelolaan CUs, lihat Mengelola pengguna HSM [dengan CloudHSM CLI dan Mengelola pengguna HSM dengan CloudHSM](manage-hsm-users-chsm-cli.md) [Management](manage-hsm-users-cmu.md) Utility (CMU)

Untuk menentukan CU ke pustaka PKCS \$111, gunakan parameter pin dari PKCS \$111 [Fungsi C\$1Login](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc385057915). Untuk AWS CloudHSM, parameter pin memiliki format berikut:

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

Sebagai contoh, perintah berikut menetapkan pin pustaka PKCS \$111 ke CU dengan nama pengguna `CryptoUser` dan kata sandi `CUPassword123!`.

```
CryptoUser:CUPassword123!
```

# Tipe kunci yang didukung untuk pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 5
<a name="pkcs11-key-types"></a>

Pustaka PKCS \$111 untuk AWS CloudHSM Client SDK 5mendukung tipe kunci berikut.


****  

| Tipe Kunci | Deskripsi | 
| --- | --- | 
| AES | Hasilkan kunci AES 128, 192, dan 256-bit.  | 
| Tiga DES (3DES, DESede) | Hasilkan kunci Triple DES 192-bit. Lihat catatan [1](#key-types-1) di bawah untuk perubahan yang akan datang. | 
| EC | Hasilkan kunci dengan kurva secp224r1 (P-224), secp256r1 (P-256), secp256k1 (Blockchain), secp384r1 (P-384), dan secp521r1 (P-521). | 
| GENERIC\$1SECRET | Hasilkan 1 hingga 800 byte rahasia generik. | 
| RSA | Hasilkan 2048-bit sampai 4096-bit kunci RSA, dengan penambahan 256 bit. | 

[1] Sesuai dengan panduan NIST, ini tidak diizinkan untuk cluster dalam mode FIPS setelah 2023. Untuk cluster dalam mode non-FIPS, masih diperbolehkan setelah 2023. Lihat [Kepatuhan FIPS 140: Penutupan Mekanisme 2024](compliance-dep-notif.md#compliance-dep-notif-1) untuk detail.

# Mekanisme yang didukung untuk pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 5
<a name="pkcs11-mechanisms"></a>

Pustaka PKCS \$111 sesuai dengan spesifikasi PKCS \$111 versi 2.40. Untuk memanggil fitur kriptografi menggunakan PKCS \$111, panggil fungsi dengan mekanisme tertentu. Bagian berikut merangkum kombinasi fungsi dan mekanisme yang didukung oleh AWS CloudHSM Client SDK 5. 

Pustaka PKCS \$111 mendukung algoritme berikut ini:
+ **Enkripsi dan dekripsi** — AES-CBC, AES-CTR, AES-ECB, AES-GCM, -CBC, -ECB, RSA-OAEP, dan RSA-PKCS DES3 DES3
+ **Tanda tangani dan verifikasi**- RSA, HMAC, dan ECDSA; dengan dan tanpa hashing
+ **Hash/digest** — SHA1,,, SHA224, dan SHA256 SHA384 SHA512
+ **Bungkus kunci**— Bungkus Kunci AES,[1](#mech1)AES-GCM, RSA-AES, dan RSA-OAEP
+ **Derivasi kunci** — SP800 -108 Counter KDF dan ECDH dengan KDF (Algoritma KDF yang didukung adalah X9.63 dengan,,,,) SHA1 SHA224 SHA256 SHA384 SHA512

**Topics**
+ [Menghasilkan fungsi key dan key pair](#pkcs11-mech-function-genkey)
+ [Tanda tangani dan verifikasi fungsi](#pkcs11-mech-function-signverify)
+ [Tanda tangani pemulihan dan verifikasi fungsi pemulihan](#pkcs11-mech-function-sr-vr)
+ [Fungsi mencerna](#pkcs11-mech-function-digest)
+ [Enkripsi dan dekripsi fungsi](#pkcs11-mech-function-enc-dec)
+ [Turunkan fungsi kunci](#pkcs11-mech-function-derive-key)
+ [Fungsi Bungkus dan Buka Bungkus](#pkcs11-mech-function-wrap-unwrap)
+ [Ukuran data maksimum untuk setiap mekanisme](#pkcs11-mech-max)
+ [Anotasi mekanisme](#pkcs11-mech-annotations)

## Menghasilkan fungsi key dan key pair
<a name="pkcs11-mech-function-genkey"></a>

Pustaka AWS CloudHSM perangkat lunak untuk pustaka PKCS \$111 memungkinkan Anda menggunakan mekanisme berikut untuk fungsi Generate Key dan Key Pair.
+ `CKM_RSA_PKCS_KEY_PAIR_GEN`
+ `CKM_RSA_X9_31_KEY_PAIR_GEN`Mekanisme ini secara fungsional identik dengan `CKM_RSA_PKCS_KEY_PAIR_GEN` mekanisme, tetapi menawarkan jaminan yang lebih kuat untuk `p` dan `q` generasi.
+ `CKM_EC_KEY_PAIR_GEN`
+ `CKM_GENERIC_SECRET_KEY_GEN`
+ `CKM_AES_KEY_GEN`
+ `CKM_DES3_KEY_GEN`— perubahan yang akan datang tercantum dalam catatan kaki[5](#mech5).

## Tanda tangani dan verifikasi fungsi
<a name="pkcs11-mech-function-signverify"></a>

Pustaka AWS CloudHSM perangkat lunak untuk pustaka PKCS \$111 memungkinkan Anda menggunakan mekanisme berikut untuk fungsi Masuk dan Verifikasi. Dengan Client SDK 5, data di-hash secara lokal dalam perangkat lunak. Ini berarti tidak ada batasan ukuran data yang dapat di-hash oleh SDK.

Dengan Client SDK 5 RSA dan ECDSA hashing dilakukan secara lokal sehingga tidak ada batasan data. Dengan HMAC, ada batas data. Lihat catatan kaki [2](#mech2) untuk info lebih lanjut.

**RSA**
+ `CKM_RSA_X_509`
+ `CKM_RSA_PKCS`— operasi satu bagian saja.
+ `CKM_RSA_PKCS_PSS`— operasi satu bagian saja.
+ `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`— operasi satu bagian saja.
+ `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`

## Tanda tangani pemulihan dan verifikasi fungsi pemulihan
<a name="pkcs11-mech-function-sr-vr"></a>

Client SDK 5 tidak mendukung fungsi Sign Recover dan Verify Recover.

## Fungsi mencerna
<a name="pkcs11-mech-function-digest"></a>

Pustaka AWS CloudHSM perangkat lunak untuk pustaka PKCS \$111 memungkinkan Anda menggunakan mekanisme berikut untuk fungsi Digest. Dengan Client SDK 5, data di-hash secara lokal dalam perangkat lunak. Ini berarti tidak ada batasan ukuran data yang dapat di-hash oleh SDK.
+ `CKM_SHA_1`
+ `CKM_SHA224`
+ `CKM_SHA256`
+ `CKM_SHA384`
+ `CKM_SHA512`

## Enkripsi dan dekripsi fungsi
<a name="pkcs11-mech-function-enc-dec"></a>

Pustaka AWS CloudHSM perangkat lunak untuk pustaka PKCS \$111 memungkinkan Anda menggunakan mekanisme berikut untuk fungsi Enkripsi dan Dekripsi.
+ `CKM_RSA_X_509`
+ `CKM_RSA_PKCS`— operasi satu bagian saja. Perubahan yang akan datang tercantum dalam catatan kaki[5](#mech5).
+ `CKM_RSA_PKCS_OAEP`— operasi satu bagian saja.
+ `CKM_AES_ECB`
+ `CKM_AES_CTR`
+ `CKM_AES_CBC`
+ `CKM_AES_CBC_PAD`
+ `CKM_DES3_CBC`— perubahan yang akan datang tercantum dalam catatan kaki[5](#mech5).
+ `CKM_DES3_ECB`— perubahan yang akan datang tercantum dalam catatan kaki[5](#mech5).
+ `CKM_DES3_CBC_PAD`— perubahan yang akan datang tercantum dalam catatan kaki[5](#mech5).
+  `CKM_AES_GCM` [1](#mech1), [2](#mech2)
+ `CKM_CLOUDHSM_AES_GCM`[3](#mech3)

## Turunkan fungsi kunci
<a name="pkcs11-mech-function-derive-key"></a>

Pustaka AWS CloudHSM perangkat lunak untuk pustaka PKCS \$111 mendukung mekanisme derivasi kunci berikut:
+ `CKM_SP800_108_COUNTER_KDF`
+ `CKM_ECDH1_DERIVE`- Mendukung derivasi kunci ECDH dengan jenis KDF yang ditentukan vendor berikut: [6](#kdf6)
  + `CKD_CLOUDHSM_X963_SHA1_KDF`- X9.63 KDF dengan SHA1 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA224_KDF`- X9.63 KDF dengan SHA224 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA256_KDF`- X9.63 KDF dengan SHA256 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA384_KDF`- X9.63 KDF dengan SHA384 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA512_KDF`- X9.63 KDF dengan SHA512 [7](#kdf7)

## Fungsi Bungkus dan Buka Bungkus
<a name="pkcs11-mech-function-wrap-unwrap"></a>

Pustaka AWS CloudHSM perangkat lunak untuk pustaka PKCS \$111 memungkinkan Anda menggunakan mekanisme berikut untuk fungsi Wrap dan Unwrap.

Untuk informasi tambahan mengenai pembungkus kunci AES, lihat Pembungkus Kunci [AES.](manage-aes-key-wrapping.md) 
+ `CKM_RSA_PKCS`— operasi satu bagian saja. Perubahan yang akan datang tercantum dalam catatan kaki[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)

## Ukuran data maksimum untuk setiap mekanisme
<a name="pkcs11-mech-max"></a>

Tabel berikut mencantumkan ukuran data maksimum yang ditetapkan untuk setiap mekanisme:


**Ukuran set data maksimum**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/pkcs11-mechanisms.html)

## Anotasi mekanisme
<a name="pkcs11-mech-annotations"></a>
+ [1] Saat melakukan enkripsi AES-GCM, HSM tidak menerima data vektor inisialisasi (IV) dari aplikasi. Anda harus menggunakan IV yang dihasilkannya. IV 12-byte yang disediakan oleh HSM ditulis ke dalam referensi memori yang ditunjukkan oleh elemen pIV dari parameter `CK_GCM_PARAMS` struktur yang Anda suplai. Untuk mencegah kebingungan pengguna, PKCS \$111 SDK di versi 1.1.1 dan sebelumnya memastikan bahwa pIV menunjuk ke penyangga yang dinolkan ketika enkripsi AES-GCM diinisialisasi.
+ [2] Saat mengoperasikan data dengan menggunakan salah satu mekanisme berikut, jika buffer data melebihi ukuran data maksimum, operasi menghasilkan kesalahan. Untuk mekanisme ini, semua pemrosesan data harus terjadi di dalam HSM. Untuk informasi tentang set ukuran data maksimum untuk setiap mekanisme, lihat[Ukuran data maksimum untuk setiap mekanisme](#pkcs11-mech-max).
+ [3] Mekanisme yang ditentukan vendor. Untuk menggunakan mekanisme yang ditetapkan vendor CloudHSM, aplikasi PKCS \$111 harus menyertakan `/opt/cloudhsm/include/pkcs11/pkcs11t.h` selama kompilasi.

  `CKM_CLOUDHSM_AES_GCM`: Mekanisme kepemilikan ini adalah alternatif pemrograman yang lebih aman untuk `CKM_AES_GCM` standar. Ini menambahkan IV yang dihasilkan oleh HSM untuk ciphertext, bukan menuliskannya kembali ke dalam struktur `CK_GCM_PARAMS` yang disediakan selama inisialisasi cipher. Anda dapat menggunakan mekanisme ini dengan fungsi `C_Encrypt`, `C_WrapKey`, `C_Decrypt`, dan `C_UnwrapKey`. Bila menggunakan mekanisme ini, variabel pIV di struk `CK_GCM_PARAMS` harus diatur ke `NULL`. Bila menggunakan mekanisme ini dengan `C_Decrypt` dan `C_UnwrapKey`, IV diharapkan akan ditambahkan ke ciphertext yang sedang dibuka.

  `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD`: Bungkus Kunci AES dengan Padding PKCS \$15.

  `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`: Bungkus Kunci AES dengan Padding Nol.
+ [4] Berikut ini `CK_MECHANISM_TYPE` dan `CK_RSA_PKCS_MGF_TYPE` didukung `CK_RSA_PKCS_OAEP_PARAMS` untuk`CKM_RSA_PKCS_OAEP`:
  + `CKM_SHA_1` menggunakan `CKG_MGF1_SHA1`
  + `CKM_SHA224` menggunakan `CKG_MGF1_SHA224`
  + `CKM_SHA256` menggunakan `CKG_MGF1_SHA256`
  + `CKM_SHA384` menggunakan `CKM_MGF1_SHA384`
  + `CKM_SHA512` menggunakan `CKM_MGF1_SHA512`
+ [5] Sesuai dengan panduan NIST, ini tidak diizinkan untuk cluster dalam mode FIPS setelah 2023. Untuk cluster dalam mode non-FIPS, masih diperbolehkan setelah 2023. Lihat [Kepatuhan FIPS 140: Penutupan Mekanisme 2024](compliance-dep-notif.md#compliance-dep-notif-1) untuk detail.
+ [6] Jenis yang ditentukan vendor. Untuk menggunakan tipe yang ditentukan vendor CloudHSM, aplikasi PKCS \$111 harus menyertakan selama kompilasi. `cloudhsm_pkcs11_vendor_defs.h` Ini ditemukan di `/opt/cloudhsm/include/pkcs11/cloudhsm_pkcs11_vendor_defs.h` platform berbasis Linux dan `C:\Program Files\Amazon\CloudHSM\include\pkcs11\cloudhsm_pkcs11_vendor_defs.h` untuk platform berbasis Windows
+ [7] Fungsi derivasi kunci (KDFs) ditentukan dalam [Publikasi Khusus NIST 800-56A](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf) Revisi 3.

# Operasi API yang didukung untuk pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 5
<a name="pkcs11-apis"></a>

Pustaka PKCS \$111 mendukung operasi API PKCS \$111 berikut untuk AWS CloudHSM Client SDK 5.
+ `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`

# Atribut kunci di pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 5
<a name="pkcs11-attributes"></a>

Objek AWS CloudHSM kunci dapat berupa kunci publik, pribadi, atau rahasia. Tindakan diizinkan pada objek kunci ditentukan melalui atribut. Atribut didefinisikan ketika objek kunci dibuat. Saat Anda menggunakan pustaka PKCS \$111 untuk AWS CloudHSM, kami menetapkan nilai default seperti yang ditentukan oleh standar PKCS \$111.

AWS CloudHSM tidak mendukung semua atribut yang tercantum dalam spesifikasi PKCS \$111. Kami patuh dengan spesifikasi untuk semua atribut yang kami dukung. Atribut ini tercantum dalam tabel masing-masing.

Fungsi kriptografi seperti `C_CreateObject`, `C_GenerateKey`, `C_GenerateKeyPair`, `C_UnwrapKey`, dan `C_DeriveKey` yang membuat, memodifikasi, atau menyalin objek mengambil templat atribut sebagai salah satu parameternya. Untuk informasi selengkapnya tentang meneruskan templat atribut selama pembuatan objek, lihat [Menghasilkan kunci melalui pustaka PKCS \$111 untuk contoh](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate).

Topik berikut memberikan informasi lebih lanjut tentang atribut AWS CloudHSM kunci.

**Topics**
+ [Atribut tabel](pkcs11-attributes-interpreting.md)
+ [Memodifikasi atribut](modify-attr.md)
+ [Menafsirkan kode kesalahan](attr-errors.md)

# Tabel atribut pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 5
<a name="pkcs11-attributes-interpreting"></a>

Tabel pustaka PKCS \$111 untuk AWS CloudHSM berisi daftar atribut yang berbeda menurut jenis kunci. Ini menunjukkan apakah atribut yang diberikan didukung untuk jenis kunci tertentu saat menggunakan fungsi kriptografi tertentu dengan AWS CloudHSM.

**Legenda:**
+ ✔ menunjukkan bahwa CloudHSM mendukung atribut untuk jenis kunci tertentu.
+ ✖ menunjukkan bahwa CloudHSM tidak mendukung atribut untuk jenis kunci tertentu.
+ R menunjukkan bahwa nilai atribut diatur ke hanya-baca untuk jenis kunci tertentu.
+ S menunjukkan bahwa atribut tidak dapat dibaca oleh `GetAttributeValue` karena sensitif.
+ Sel kosong di kolom Nilai Default menunjukkan bahwa tidak ada nilai default tertentu yang ditetapkan untuk atribut.

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/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/id_id/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/id_id/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/id_id/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/id_id/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/id_id/cloudhsm/latest/userguide/pkcs11-attributes-interpreting.html)

**Anotasi atribut**
+ [1] Atribut ini sebagian didukung oleh firmware dan harus secara eksplisit diatur hanya ke nilai default.
+ [2] Atribut wajib.

# Memodifikasi atribut pustaka PKCS \$111 untuk AWS CloudHSM SDK Klien 5
<a name="modify-attr"></a>

Beberapa atribut pustaka PKCS \$111 untuk AWS CloudHSM objek dapat dimodifikasi setelah objek dibuat, sedangkan beberapa tidak bisa. Untuk memodifikasi atribut, gunakan perintah [key set-attribute](cloudhsm_cli-key-set-attribute.md) dari CloudHSM CLI. Anda juga dapat memperoleh daftar atribut dengan menggunakan perintah [daftar kunci](cloudhsm_cli-key-list.md) dari CloudHSM CLI.

Daftar berikut menampilkan atribut yang diizinkan untuk modifikasi setelah pembuatan objek:
+ `CKA_LABEL`
+ `CKA_TOKEN`
**catatan**  
Modifikasi hanya diperbolehkan untuk mengubah kunci sesi menjadi kunci token. Gunakan perintah [key set-attribute](cloudhsm_cli-key-set-attribute.md) dari CloudHSM CLI untuk mengubah nilai atribut.
+ `CKA_ENCRYPT`
+ `CKA_DECRYPT`
+ `CKA_SIGN`
+ `CKA_VERIFY`
+ `CKA_WRAP`
+ `CKA_UNWRAP`
+ `CKA_LABEL`
+ `CKA_SENSITIVE`
+ `CKA_DERIVE`
**catatan**  
Atribut ini mendukung derivasi kunci. Kunci harus `False` untuk semua kunci publik dan tidak dapat diatur ke `True`. Untuk kunci rahasia dan kunci privat EC, kunci dapat diatur ke `True` atau `False`.
+ `CKA_TRUSTED`
**catatan**  
Atribut ini dapat diatur ke `True` atau `False` oleh Petugas Kripto (CO) saja.
+ `CKA_WRAP_WITH_TRUSTED`
**catatan**  
Terapkan atribut ini ke kunci data yang dapat diekspor untuk menentukan bahwa Anda hanya dapat membungkus kunci ini dengan kunci yang ditandai sebagai `CKA_TRUSTED`. Setelah Anda mengatur `CKA_WRAP_WITH_TRUSTED` menjadi true (benar), atribut menjadi hanya-baca dan Anda tidak dapat mengubah atau menghapus atribut.

# Menafsirkan kode kesalahan pustaka PKCS \$111 untuk AWS CloudHSM SDK Klien 5
<a name="attr-errors"></a>

Menentukan dalam template atribut pustaka PKCS \$111 yang tidak didukung oleh kunci tertentu menghasilkan kesalahan. Tabel berikut berisi kode galat yang dihasilkan ketika Anda melanggar spesifikasi:

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

# Contoh kode untuk pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 5
<a name="pkcs11-samples"></a>

Contoh kode GitHub menunjukkan cara menyelesaikan tugas dasar menggunakan pustaka PKCS \$111 untuk AWS CloudHSM Client SDK 5. 

## Prasyarat
<a name="pkcs11-samples-prereqs"></a>

Sebelum menjalankan sampel, lakukan langkah-langkah berikut untuk mengatur lingkungan Anda:
+ Instal dan konfigurasikan [pustaka PKCS \$111](pkcs11-library-install.md) untuk Client SDK 5.
+ Siapkan [pengguna kriptografi (CU)](manage-hsm-users.md). Aplikasi Anda menggunakan akun HSM ini untuk menjalankan sampel kode pada HSM.

## Sampel Kode
<a name="pkcs11-samples-code"></a>

Sampel Kode untuk Perpustakaan Perangkat AWS CloudHSM Lunak untuk PKCS \$111 tersedia di. [GitHub](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples) Repositori ini mencakup contoh tentang bagaimana melakukan operasi umum menggunakan PKCS \$111 termasuk enkripsi, dekripsi, penandatanganan, dan verifikasi.
+ [Hasilkan kunci (AES, RSA, EC)](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate)
+ [Daftar atribut kunci](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/)
+ [Enkripsi dan dekripsi data dengan AES GCM](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/encrypt/aes_gcm.c)
+ [Enkripsi dan dekripsi data dengan AES\$1CTR](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/aes_ctr.c) 
+ [Enkripsi dan dekripsi data dengan 3DES](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/des_ecb.c) 
+ [Tanda tangani dan verifikasi data dengan RSA](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/sign/rsa_sign.c)
+ [Turunkan kunci menggunakan HMAC KDF](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/derivation/hmac_kdf.c)
+ [Bungkus dan buka kunci dengan AES menggunakan padding PKCS \$15](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_wrapping.c)
+ [Bungkus dan buka kunci dengan AES tanpa padding](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_no_padding_wrapping.c)
+ [Bungkus dan buka kunci dengan AES menggunakan bantalan nol](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_zero_padding_wrapping.c)
+ [Bungkus dan buka kunci dengan AES-GCM](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/wrapping/aes_gcm_wrapping.c)
+ [Bungkus dan buka kunci dengan RSA](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/rsa_wrapping.c)

# Konfigurasi lanjutan untuk pustaka PKCS \$111 untuk AWS CloudHSM
<a name="pkcs11-library-configs"></a>

Penyedia AWS CloudHSM PKCS \$111 menyertakan konfigurasi lanjutan berikut, yang bukan merupakan bagian dari konfigurasi umum yang digunakan sebagian besar pelanggan. Konfigurasi ini memberikan kemampuan tambahan.
+ [Menghubungkan ke beberapa slot dengan PKCS \$111](pkcs11-library-configs-multi-slot.md)
+ [Coba lagi konfigurasi untuk PKCS \$111](pkcs11-library-configs-retry.md)

# Beberapa konfigurasi slot dengan pustaka PKCS \$111 untuk AWS CloudHSM
<a name="pkcs11-library-configs-multi-slot"></a>

Satu slot di pustaka Client SDK 5 PKCS \$111 mewakili satu koneksi ke cluster di. AWS CloudHSM Dengan Client SDK 5, Anda dapat mengonfigurasi PKCS11 pustaka Anda untuk memungkinkan beberapa slot menghubungkan pengguna ke beberapa klaster CloudHSM dari satu aplikasi PKCS \$111. 

Gunakan petunjuk dalam topik ini untuk membuat aplikasi Anda menggunakan fungsionalitas multi-slot untuk terhubung dengan beberapa cluster.

**Topics**
+ [Prasyarat multi-slot untuk pustaka PKCS \$111 untuk AWS CloudHSM](#pkcs11-multi-slot-prereqs)
+ [Konfigurasikan pustaka PKCS \$111 untuk fungsionalitas multi-slot AWS CloudHSM](pkcs11-multi-slot-config-run.md)
+ [Tambahkan cluster dengan fungsionalitas multi-slot untuk AWS CloudHSM](pkcs11-multi-slot-add-cluster.md)
+ [Hapus cluster dengan fungsionalitas multi-slot untuk AWS CloudHSM](pkcs11-multi-slot-remove-cluster.md)

## Prasyarat multi-slot untuk pustaka PKCS \$111 untuk AWS CloudHSM
<a name="pkcs11-multi-slot-prereqs"></a>

Sebelum mengonfigurasi beberapa slot untuk pustaka PKCS \$111 AWS CloudHSM, lengkapi prasyarat berikut.
+ Dua atau lebih AWS CloudHSM cluster yang ingin Anda sambungkan, bersama dengan sertifikat klaster mereka.
+ Instans EC2 dengan Grup Keamanan dikonfigurasi dengan benar untuk terhubung ke semua cluster di atas. Untuk informasi selengkapnya tentang cara menyiapkan cluster dan instance klien, lihat [Memulai AWS CloudHSM](getting-started.md).
+ Untuk mengatur fungsionalitas multi-slot, Anda harus sudah mengunduh dan menginstal pustaka PKCS \$111. Jika Anda belum melakukan ini, lihat instruksi di[Instal pustaka PKCS \$111 untuk AWS CloudHSM Client SDK 5](pkcs11-library-install.md).

# Konfigurasikan pustaka PKCS \$111 untuk fungsionalitas multi-slot AWS CloudHSM
<a name="pkcs11-multi-slot-config-run"></a>

Untuk mengonfigurasi pustaka PKCS \$111 Anda untuk fungsionalitas multi-slot AWS CloudHSM, ikuti langkah-langkah berikut:

1. Identifikasi cluster yang ingin Anda sambungkan menggunakan fungsionalitas multi-slot.

1. Tambahkan klaster ini ke konfigurasi PKCS \$111 Anda dengan mengikuti petunjuk di [Tambahkan cluster dengan fungsionalitas multi-slot untuk AWS CloudHSM](pkcs11-multi-slot-add-cluster.md)

1. Lain kali aplikasi PKCS \$111 Anda berjalan, itu akan memiliki fungsi multi-slot.

# Tambahkan cluster dengan fungsionalitas multi-slot untuk AWS CloudHSM
<a name="pkcs11-multi-slot-add-cluster"></a>

Saat [menghubungkan ke beberapa slot dengan PKCS \$111](pkcs11-library-configs-multi-slot.md) for AWS CloudHSM, gunakan **configure-pkcs11 add-cluster** perintah untuk menambahkan cluster ke konfigurasi Anda.

## Sintaksis
<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]
```

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

### Tambahkan cluster menggunakan `cluster-id` parameter
<a name="w2aac25c21c17c31b7c13b7b3b1"></a>

**Example**  
 Gunakan **configure-pkcs11 add-cluster** bersama dengan `cluster-id` parameter untuk menambahkan cluster (dengan ID dari`cluster-1234567`) ke konfigurasi Anda.   

```
$ 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>
```

**Tip**  
Jika menggunakan **configure-pkcs11 add-cluster** dengan `cluster-id` parameter tidak mengakibatkan klaster ditambahkan, lihat contoh berikut untuk versi yang lebih panjang dari perintah ini yang juga memerlukan `--region` dan `--endpoint` parameter untuk mengidentifikasi cluster yang ditambahkan. Jika, misalnya, wilayah cluster berbeda dari yang dikonfigurasi sebagai default AWS CLI Anda, Anda harus menggunakan `--region` parameter untuk menggunakan wilayah yang benar. Selain itu, Anda memiliki kemampuan untuk menentukan titik akhir AWS CloudHSM API yang akan digunakan untuk panggilan, yang mungkin diperlukan untuk berbagai pengaturan jaringan, seperti menggunakan titik akhir antarmuka VPC yang tidak menggunakan nama host DNS default untuk. AWS CloudHSM

### Tambahkan cluster menggunakan`cluster-id`,`endpoint`, dan `region` parameter
<a name="w2aac25c21c17c31b7c13b7b3b3"></a>

**Example**  
 Gunakan `region` parameter **configure-pkcs11 add-cluster** bersama dengan `cluster-id``endpoint`,, dan untuk menambahkan cluster (dengan ID`cluster-1234567`) ke konfigurasi Anda.   

```
$ 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>
```

Untuk informasi tentang parameter `--cluster-id`, `--region` dan `--endpoint`, lihat [AWS CloudHSM Parameter konfigurasi SDK 5 klien](configure-tool-params5.md).

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

**--kluster-id *<Cluster ID>***  
 Membuat panggilan `DescribeClusters` untuk menemukan semua alamat IP antarmuka jaringan elastis (ENI) HSM dalam klaster yang terkait dengan ID klaster. Sistem menambahkan alamat IP ENI ke file AWS CloudHSM konfigurasi.  
Jika Anda menggunakan `--cluster-id` parameter dari instans EC2 dalam VPC yang tidak memiliki akses ke internet publik, maka Anda harus membuat antarmuka VPC endpoint untuk terhubung. AWS CloudHSM Untuk informasi lebih lanjut tentang VPC endpoint, lihat [AWS CloudHSM dan titik akhir VPC](cloudhsm-vpc-endpoint.md).
Wajib: Ya

**--titik akhir *<Endpoint>***  
Tentukan titik akhir AWS CloudHSM API yang digunakan untuk melakukan `DescribeClusters` panggilan. Anda harus menetapkan pilihan ini dalam kombinasi dengan `--cluster-id`.   
Wajib: Tidak

**--hsm-ca-cert *<HsmCA Certificate Filepath>***  
Menentukan filepath ke sertifikat HSM CA.  
Wajib: Tidak

**--wilayah *<Region>***  
Tentukan wilayah klaster Anda. Anda harus menetapkan pilihan ini dalam kombinasi dengan `--cluster-id`.  
Jika Anda tidak menyediakan parameter `--region`, sistem memilih wilayah dengan mencoba untuk membaca variabel lingkungan `AWS_DEFAULT_REGION` atau `AWS_REGION`. Jika variabel-variabel tersebut tidak diatur, maka sistem memeriksa wilayah yang terkait dengan profil Anda di file AWS config Anda (biasanya `~/.aws/config`) kecuali jika Anda menentukan file yang berbeda di variabel lingkungan `AWS_CONFIG_FILE`. Jika tidak ada variabel di atas yang diatur, sistem default ke wilayah `us-east-1`.  
Wajib: Tidak

**-- client-cert-hsm-tls berkas *<client certificate hsm tls path>***  
 Jalur ke sertifikat klien yang digunakan untuk otentikasi timbal balik klien TLS-HSM.   
 Hanya gunakan opsi ini jika Anda telah mendaftarkan setidaknya satu jangkar kepercayaan ke HSM dengan CloudHSM CLI. Anda harus menetapkan pilihan ini dalam kombinasi dengan `--client-key-hsm-tls-file`.   
Wajib: Tidak

**-- client-key-hsm-tls berkas *<client key hsm tls path>***  
 Jalur ke kunci klien yang digunakan untuk otentikasi timbal balik klien TLS-HSM.   
 Hanya gunakan opsi ini jika Anda telah mendaftarkan setidaknya satu jangkar kepercayaan ke HSM dengan CloudHSM CLI. Anda harus menetapkan pilihan ini dalam kombinasi dengan `--client-cert-hsm-tls-file`.   
Wajib: Tidak

# Hapus cluster dengan fungsionalitas multi-slot untuk AWS CloudHSM
<a name="pkcs11-multi-slot-remove-cluster"></a>

Saat [menghubungkan ke beberapa slot dengan PKCS \$111](pkcs11-library-configs-multi-slot.md), gunakan **configure-pkcs11 remove-cluster** perintah untuk menghapus cluster dari slot PKCS \$111 yang tersedia.

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

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

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

### Hapus cluster menggunakan `cluster-id` parameter
<a name="w2aac25c21c17c31b7c15b7b3b1"></a>

**Example**  
 Gunakan **configure-pkcs11 remove-cluster** bersama dengan `cluster-id` parameter untuk menghapus cluster (dengan ID dari`cluster-1234567`) dari konfigurasi Anda.   

```
$ 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>
```

Untuk informasi tentang parameter `--cluster-id`, lihat [AWS CloudHSM Parameter konfigurasi SDK 5 klien](configure-tool-params5.md).

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

**--kluster-id *<Cluster ID>***  
 ID cluster untuk menghapus dari konfigurasi  
Wajib: Ya

# Coba lagi perintah untuk pustaka PKCS \$111 untuk AWS CloudHSM
<a name="pkcs11-library-configs-retry"></a>

AWS CloudHSM Client SDK 5.8.0 dan yang lebih baru memiliki strategi coba ulang otomatis bawaan yang akan mencoba kembali operasi HSM-throttled dari sisi klien. Ketika HSM membatasi operasi karena terlalu sibuk melakukan operasi sebelumnya dan tidak dapat menerima lebih banyak permintaan, klien SDKs akan mencoba kembali operasi yang dibatasi hingga 3 kali sementara mundur secara eksponensial. Strategi coba ulang otomatis ini dapat diatur ke salah satu dari dua mode: **off** dan **standar**.
+ **off**: SDK Klien tidak akan melakukan strategi coba ulang apa pun untuk operasi yang dibatasi oleh HSM.
+ **standard**: Ini adalah mode default untuk Client SDK 5.8.0 dan yang lebih baru. Dalam mode ini, klien SDKs akan secara otomatis mencoba kembali operasi yang dibatasi dengan mundur secara eksponensial.

Untuk informasi selengkapnya, lihat [Pelambatan HSM](troubleshoot-hsm-throttling.md).

## Setel perintah coba lagi ke mode mati
<a name="w2aac25c21c17c31b9b9"></a>

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

**Untuk mengatur perintah coba lagi **off** untuk Client SDK 5 di Linux**
+ Anda dapat menggunakan perintah berikut untuk mengatur konfigurasi coba lagi ke **off** mode:

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

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

**Untuk mengatur perintah coba lagi **off** untuk Client SDK 5 pada Windows**
+ Anda dapat menggunakan perintah berikut untuk mengatur konfigurasi coba lagi ke **off** mode:

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

------

# Penyimpanan sertifikat dengan pustaka PKCS \$111
<a name="pkcs11-certificate-storage"></a>

 Pustaka AWS CloudHSM PKCS \$111 mendukung penyimpanan sertifikat kunci publik sebagai “objek publik” (sebagaimana didefinisikan dalam PKCS \$111 2.40) pada klaster hsm2m.medium. Fitur ini memungkinkan sesi PKCS \$111 publik dan pribadi untuk membuat, mengambil, memodifikasi, dan menghapus sertifikat kunci publik. 

 Untuk menggunakan penyimpanan sertifikat dengan pustaka PKCS \$111, Anda harus mengaktifkannya dalam konfigurasi klien Anda. Setelah diaktifkan, Anda dapat mengelola objek sertifikat dari aplikasi PKCS \$111 Anda. Operasi yang berlaku untuk sertifikat dan objek kunci, seperti [C\$1 FindObjects](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc323205461), akan mengembalikan hasil dari penyimpanan kunci dan sertifikat. 

**Topics**
+ [Aktifkan penyimpanan sertifikat](pkcs11-certificate-storage-configuration.md)
+ [API penyimpanan sertifikat](pkcs11-certificate-storage-api.md)
+ [Atribut sertifikat](pkcs11-certificate-storage-attributes.md)
+ [Log audit penyimpanan sertifikat](pkcs11-certificate-storage-audit-logs.md)

# Mengaktifkan penyimpanan sertifikat
<a name="pkcs11-certificate-storage-configuration"></a>

 Anda dapat mengaktifkan penyimpanan sertifikat pada klaster hsm2m.medium menggunakan alat konfigurasi pustaka PKCS \$111. Fitur ini tersedia dalam SDK versi 5.13 dan yang lebih baru. Untuk daftar operasi yang mendukung jenis objek sertifikat, lihat[Operasi API penyimpanan sertifikat](pkcs11-certificate-storage-api.md). 

 Untuk mengaktifkan penyimpanan sertifikat, ikuti langkah-langkah berikut untuk sistem operasi Anda: 

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

****Aktifkan penyimpanan sertifikat****  
Jalankan perintah berikut:

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

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

****Aktifkan penyimpanan sertifikat****  
Buka command prompt dan jalankan perintah berikut:

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

------

# Operasi API penyimpanan sertifikat
<a name="pkcs11-certificate-storage-api"></a>

 Operasi PKCS \$111 berikut mendukung tipe objek sertifikat ()`CKO_CERTIFICATE`: 

## Operasi sertifikat umum
<a name="general-certificate-operations"></a>

**`C_CreateObject`**  
Membuat objek sertifikat baru.

**`C_DestroyObject`**  
Menghapus objek sertifikat yang ada.

**`C_GetAttributeValue`**  
Mendapat nilai satu atau lebih atribut dari objek sertifikat.

**`C_SetAttributeValue`**  
Memperbarui nilai satu atau lebih atribut dari objek sertifikat.

## Operasi pencarian objek sertifikat
<a name="certificate-object-search-operations"></a>

**`C_FindObjectsInit`**  
Memulai pencarian objek sertifikat.

**`C_FindObjects`**  
Melanjutkan pencarian objek sertifikat.

**`C_FindObjectsFinal`**  
Mengakhiri pencarian objek sertifikat.

# Atribut penyimpanan sertifikat
<a name="pkcs11-certificate-storage-attributes"></a>

 Tabel berikut mencantumkan atribut objek sertifikat yang didukung dan nilainya: 


| Atribut | Nilai default | Deskripsi | 
| --- | --- | --- | 
| `CKA_CLASS` | Diperlukan | Harus berupa `CKO_CERTIFICATE`. | 
| `CKA_TOKEN` | True |  Harus berupa `True`. | 
| `CKA_MODIFIABLE` | True | Harus berupa `True`. | 
| `CKA_PRIVATE` | False | Harus berupa `False`. | 
| `CKA_LABEL` | Kosong | Batasi 127 karakter. | 
| `CKA_COPYABLE` | False | Harus berupa `False`. | 
| `CKA_DESTROYABLE` | True | Harus berupa `True`. | 
| `CKA_CERTIFICATE_TYPE` | Diperlukan | Harus berupa `CKC_X_509`. | 
| `CKA_TRUSTED` | False | Harus berupa `False`. | 
| `CKA_CERTIFICATE_CATEGORY` | `CK_CERTIFICATE_CATEGORY_UNSPECIFIED` | Harus berupa `CK_CERTIFICATE_CATEGORY_UNSPECIFIED`. | 
| `CKA_CHECK_VALUE` | Berasal dari `CKA_VALUE` | Secara otomatis diatur berdasarkan`CKA_VALUE`. | 
| `CKA_START_DATE` | Kosong | Tanggal sertifikat 'tidak sebelum'. | 
| `CKA_END_DATE` | Kosong | Tanggal sertifikat 'tidak setelah'. | 
| `CKA_PUBLIC_KEY_INFO` | Kosong | Ukuran maksimum adalah 16 kilobyte. | 
| `CKA_SUBJECT` | Diperlukan | Subjek sertifikat. | 
| `CKA_ID` | Kosong | Ukuran maksimum adalah 128 byte. Keunikan tidak ditegakkan. | 
| `CKA_ISSUER` | Kosong | Penerbit sertifikat. | 
| `CKA_SERIAL_NUMBER` | Kosong | Nomor seri sertifikat. | 
| `CKA_VALUE` | Diperlukan | Ukuran maksimum adalah 32 kilobyte. | 

# Log audit penyimpanan sertifikat
<a name="pkcs11-certificate-storage-audit-logs"></a>

 AWS CloudHSM menulis log audit untuk operasi penyimpanan sertifikat yang mengubah data ke aliran log Acara CloudWatch Amazon terpisah dalam grup log klaster CloudWatch Anda. Aliran log ini dinamai untuk cluster, bukan untuk HSM tertentu di dalam cluster. 

 Untuk informasi tentang mengakses log audit CloudWatch, lihat[Bekerja dengan CloudWatch Log Amazon dan Log AWS CloudHSM Audit](get-hsm-audit-logs-using-cloudwatch.md). 

## Bidang entri log
<a name="pkcs11-certificate-storage-audit-logs-fields"></a>

`object_handle`  
Pengidentifikasi unik dari objek sertifikat.

`op_code`  
Operasi dilakukan atau dicoba. Kemungkinan nilai:  
+ `CreateObject`
+ `DestroyObject`
+ `SetAttributeValues`

`response`  
`OK`jika operasi berhasil, atau salah satu dari jenis kesalahan berikut:  
+ `DuplicateAttribute`
+ `InvalidAttributeValue`
+ `ObjectNotFound`
+ `MaxObjectsReached`
+ `InternalFailure`

`attributes`  
Atribut dimodifikasi, jika ada.

`timestamp`  
Waktu ketika operasi terjadi, dalam milidetik sejak zaman Unix.

## Contoh-contoh log Audit
<a name="pkcs11-certificate-storage-audit-logs-examples"></a>

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

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

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

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

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

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

### Contoh yang tidak berhasil CreateObject
<a name="pkcs11-certificate-storage-audit-logs-examples-error"></a>

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

# Mesin AWS CloudHSM Dinamis OpenSSL untuk SDK Klien 5
<a name="openssl-library"></a>

 AWS CloudHSM OpenSSL Dynamic Engine memungkinkan Anda untuk membongkar operasi kriptografi ke cluster CloudHSM Anda melalui OpenSSL API.

AWS CloudHSM menyediakan OpenSSL Dynamic Engine, yang dapat Anda baca di atau. [AWS CloudHSM SSL/TLS offload di Linux menggunakan Tomcat dengan JSSE](third-offload-linux-jsse.md) [AWS CloudHSM SSL/TLS offload di Linux menggunakan NGINX atau Apache dengan OpenSSL](third-offload-linux-openssl.md) Untuk contoh penggunaan AWS CloudHSM dengan OpenSSL, lihat blog keamanan [AWS ini](https://aws.amazon.com/blogs/security/automate-the-deployment-of-an-nginx-web-service-using-amazon-ecs-with-tls-offload-in-cloudhsm/). Untuk informasi tentang dukungan platform SDKs, lihat[AWS CloudHSM Platform yang didukung SDK Klien 5](client-supported-platforms.md). Untuk pemecahan masalah, lihat. [Masalah yang diketahui untuk OpenSSL Dynamic Engine untuk AWS CloudHSM](ki-openssl-sdk.md)

Gunakan bagian berikut untuk menginstal dan mengkonfigurasi mesin AWS CloudHSM dinamis untuk OpenSSL, menggunakan Client SDK 5.

Untuk informasi tentang penggunaan SDK Klien 3, lihat[Menggunakan versi SDK sebelumnya untuk bekerja dengan AWS CloudHSM](choose-client-sdk.md).

**Topics**
+ [Instal OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 5](openssl5-install.md)
+ [Tipe kunci yang didukung untuk OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 5](openssl-key-types.md)
+ [Mekanisme yang didukung untuk OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 5](openssl-mechanisms.md)
+ [Konfigurasi lanjutan untuk OpenSSL untuk AWS CloudHSM](openssl-library-configs.md)

# Instal OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 5
<a name="openssl5-install"></a>

Gunakan bagian berikut untuk menginstal OpenSSL Dynamic Engine AWS CloudHSM for Client SDK 5.

**catatan**  
Untuk menjalankan satu klaster HSM dengan SDK Klien 5, Anda harus terlebih dahulu mengelola pengaturan daya tahan kunci klien dengan menetapkan `disable_key_availability_check` ke `True`. Untuk informasi selengkapnya, lihat [Sinkronisasi Kunci](manage-key-sync.md) dan [Alat Konfigurasi SDK Klien 5](configure-sdk-5.md).

**Untuk menginstal dan mengatur konfigurasi OpenSSL Dynamic Engine**

1. Gunakan salah satu perintah berikut untuk mengunduh dan menjalankan mesin OpenSSL.

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

   Instal OpenSSL Dynamic Engine untuk Amazon Linux 2023 pada arsitektur x86\$164:

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

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

   Instal OpenSSL Dynamic Engine untuk Amazon Linux 2023 pada arsitektur: ARM64 

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

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

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

   Instal OpenSSL Dynamic Engine untuk Amazon Linux 2 pada arsitektur x86\$164:

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

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

   Instal OpenSSL Dynamic Engine untuk Amazon Linux 2 pada arsitektur: ARM64 

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

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

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

   Instal OpenSSL Dynamic Engine untuk RHEL 9 pada arsitektur x86\$164:

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

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

   Instal OpenSSL Dynamic Engine untuk RHEL 9 pada arsitektur: ARM64 

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

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

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

   Instal OpenSSL Dynamic Engine untuk RHEL 8 pada arsitektur x86\$164:

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

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

   Instal OpenSSL Dynamic Engine untuk RHEL 8 pada arsitektur: ARM64 

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

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

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

   Instal OpenSSL Dynamic Engine untuk Ubuntu 24.04 LTS pada arsitektur x86\$164:

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

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

   Instal OpenSSL Dynamic Engine untuk Ubuntu 24.04 LTS pada arsitektur: ARM64 

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

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

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

   Instal OpenSSL Dynamic Engine untuk Ubuntu 22.04 LTS pada arsitektur x86\$164:

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

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

   Instal OpenSSL Dynamic Engine untuk Ubuntu 22.04 LTS pada arsitektur: ARM64 

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

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

------

   Anda telah menginstal perpustakaan bersama untuk mesin dinamis di`/opt/cloudhsm/lib/libcloudhsm_openssl_engine.so`.

1. SDK Klien Bootstrap 5. Untuk informasi selengkapnya tentang bootstrapping, lihat [Bootstrap Klien SDK](cluster-connect.md#connect-how-to).

1. Tetapkan variabel lingkungan dengan kredensil pengguna kripto (CU). Untuk informasi tentang membuat CUs, lihat[Buat AWS CloudHSM pengguna dengan CloudHSM CLI](cloudhsm_cli-user-create.md).

   ```
   $ export CLOUDHSM_PIN=<HSM user name>:<password>
   ```
**catatan**  
SDK Klien 5 memperkenalkan `CLOUDHSM_PIN` variabel lingkungan untuk menyimpan kredensial CU. Di Client SDK 3 Anda menyimpan kredensi CU dalam variabel lingkungan. `n3fips_password` Klien SDK 5 mendukung kedua variabel lingkungan, namun sebaiknya gunakan`CLOUDHSM_PIN`.  
Saat mengatur variabel `CLOUDHSM_PIN` lingkungan, Anda harus melarikan diri dari karakter khusus apa pun yang dapat ditafsirkan oleh shell Anda.

1. Hubungkan instalasi OpenSSL Dynamic Engine Anda ke cluster. Untuk informasi selengkapnya, lihat [Hubungkan ke Klaster](cluster-connect.md).

1. Bootstrap SDK Klien 5. Untuk informasi selengkapnya, lihat [Bootstrap Klien SDK](cluster-connect.md#connect-how-to).

## Verifikasi OpenSSL Dynamic Engine untuk SDK Klien 5
<a name="verify-dyn-5"></a>

Gunakan perintah berikut untuk memverifikasi instalasi OpenSSL Dynamic Engine.

```
$ openssl engine -t cloudhsm
```

Output berikut memverifikasi konfigurasi Anda:

```
(cloudhsm) CloudHSM OpenSSL Engine
     [ available ]
```

# Tipe kunci yang didukung untuk OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 5
<a name="openssl-key-types"></a>

 AWS CloudHSM OpenSSL Dynamic Engine mendukung jenis kunci berikut dengan Client SDK 5.


****  

| Tipe Kunci | Deskripsi | 
| --- | --- | 
| EC | ECDSA sign/verify untuk tipe kunci P-256, P-384, dan secp256k1. Untuk menghasilkan kunci EC yang dapat dioperasikan dengan mesin OpenSSL, lihat. [Ekspor kunci asimetris dengan CloudHSM CLI](cloudhsm_cli-key-generate-file.md) | 
| RSA | Pembuatan kunci RSA untuk kunci 2048, 3072, dan 4096-bit. Tanda/verifikasi RSA. Verifikasi diturunkan ke perangkat lunak OpenSSL. | 

# Mekanisme yang didukung untuk OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 5
<a name="openssl-mechanisms"></a>

 AWS CloudHSM OpenSSL Dynamic Engine mendukung mekanisme berikut untuk fungsi Masuk dan Verifikasi dengan Client SDK 5.

## Tanda tangani dan verifikasi fungsi
<a name="openssl-mechanisms-sign-verify"></a>

Dengan Client SDK 5, data di-hash secara lokal dalam perangkat lunak. Ini berarti tidak ada batasan ukuran data yang dapat di-hash.

Jenis Tanda Tangan RSA
+ SHA1withRSA
+ SHA224withRSA
+ SHA256withRSA
+ SHA384withRSA
+ SHA512withRSA

Jenis Tanda Tangan ECDSA
+ SHA1withECDSA
+ SHA224withECDSA
+ SHA256withECDSA
+ SHA384withECDSA
+ SHA512withECDSA

# Konfigurasi lanjutan untuk OpenSSL untuk AWS CloudHSM
<a name="openssl-library-configs"></a>

Penyedia AWS CloudHSM OpenSSL menyertakan konfigurasi lanjutan berikut, yang bukan merupakan bagian dari konfigurasi umum yang digunakan sebagian besar pelanggan. Konfigurasi ini memberikan kemampuan tambahan.
+ [Coba lagi perintah untuk OpenSSL](openssl-library-configs-retry.md)

# Coba lagi perintah untuk OpenSSL untuk AWS CloudHSM
<a name="openssl-library-configs-retry"></a>

AWS CloudHSM Client SDK 5.8.0 dan yang lebih baru memiliki strategi coba ulang otomatis bawaan yang akan mencoba kembali operasi HSM-throttled dari sisi klien. Ketika HSM membatasi operasi karena terlalu sibuk melakukan operasi sebelumnya dan tidak dapat menerima lebih banyak permintaan, klien SDKs akan mencoba kembali operasi yang dibatasi hingga 3 kali sementara mundur secara eksponensial. Strategi coba ulang otomatis ini dapat diatur ke salah satu dari dua mode: **off** dan **standar**.
+ **off**: SDK Klien tidak akan melakukan strategi coba ulang apa pun untuk operasi yang dibatasi oleh HSM.
+ **standard**: Ini adalah mode default untuk Client SDK 5.8.0 dan yang lebih baru. Dalam mode ini, klien SDKs akan secara otomatis mencoba kembali operasi yang dibatasi dengan mundur secara eksponensial.

Untuk informasi selengkapnya, lihat [Pelambatan HSM](troubleshoot-hsm-throttling.md).

## Setel perintah coba lagi ke mode mati
<a name="w2aac25c21c19c19b7b9"></a>

Anda dapat menggunakan perintah berikut untuk mengatur perintah coba lagi ke **off** mode:

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

# Penyedia AWS CloudHSM OpenSSL untuk SDK Klien 5
<a name="openssl-provider-library"></a>

Penyedia AWS CloudHSM OpenSSL memungkinkan Anda untuk membongkar operasi kriptografi TLS ke klaster CloudHSM Anda melalui OpenSSL Provider API. Antarmuka Provider adalah pendekatan yang direkomendasikan untuk penerapan baru menggunakan OpenSSL 3.2 dan yang lebih baru.

Gunakan bagian berikut untuk menginstal dan mengkonfigurasi Penyedia AWS CloudHSM OpenSSL, menggunakan Client SDK 5.

**Awas**  
 Integrasi dengan OpenSSL CLI saat ini tidak didukung oleh Penyedia OpenSSL. AWS CloudHSM Lihat [AWS CloudHSM SSL/TLS offload di Linux menggunakan NGINX atau dengan OpenSSL Provider HAProxy](third-offload-linux-openssl-provider.md) untuk integrasi yang didukung. 

## Platform yang didukung
<a name="openssl-provider-supported-platforms"></a>

Penyedia OpenSSL memerlukan OpenSSL 3.2 atau yang lebih baru, tersedia di \$1, Ubuntu 24.04\$1, dan Amazon Linux EL9 2023\$1.

Verifikasi kompatibilitas: `openssl version`

**Topics**
+ [Platform yang didukung](#openssl-provider-supported-platforms)
+ [Instal Penyedia AWS CloudHSM OpenSSL untuk Klien SDK 5](openssl-provider-install.md)
+ [Tipe kunci yang didukung untuk Penyedia AWS CloudHSM OpenSSL untuk SDK Klien 5](openssl-provider-key-types.md)
+ [Mekanisme yang Didukung Penyedia OpenSSL](openssl-provider-mechanisms.md)
+ [Konfigurasi Lanjutan Penyedia OpenSSL](openssl-provider-advanced-config.md)

# Instal Penyedia AWS CloudHSM OpenSSL untuk Klien SDK 5
<a name="openssl-provider-install"></a>

Gunakan bagian berikut untuk menginstal Penyedia OpenSSL untuk AWS CloudHSM Client SDK 5.

**catatan**  
Untuk menjalankan satu klaster HSM dengan SDK Klien 5, Anda harus terlebih dahulu mengelola pengaturan daya tahan kunci klien dengan menetapkan `disable_key_availability_check` ke `True`. Untuk informasi selengkapnya, lihat [Sinkronisasi Kunci](working-client-sync.md#client-sync-sdk8) dan [Alat Konfigurasi SDK Klien 5](configure-sdk-5.md).

## Persyaratan
<a name="openssl-provider-cluster-requirements"></a>

Penyedia OpenSSL **memerlukan** tipe klaster hsm2m.medium dan minimum CloudHSM Client SDK versi 5.17.0 atau yang lebih baru.

## Instal Penyedia OpenSSL
<a name="openssl-provider-install-steps"></a>

**Untuk menginstal Penyedia OpenSSL**

1. Gunakan perintah berikut untuk mengunduh dan menginstal Penyedia OpenSSL.

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

   Instal Penyedia OpenSSL untuk Amazon Linux 2023 pada arsitektur x86\$164:

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

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

   Instal Penyedia OpenSSL untuk Amazon Linux 2023 pada arsitektur: ARM64 

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

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

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

   Instal Penyedia OpenSSL untuk RHEL 9 pada arsitektur x86\$164:

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

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

   Instal Penyedia OpenSSL untuk RHEL 9 pada arsitektur: ARM64 

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

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

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

   Instal Penyedia OpenSSL untuk RHEL 10 pada arsitektur x86\$164:

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

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

   Instal Penyedia OpenSSL untuk RHEL 10 pada arsitektur: ARM64 

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

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

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

   Instal Penyedia OpenSSL untuk Ubuntu 24.04 pada arsitektur x86\$164:

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

   ```
   $ sudo dpkg -i ./cloudhsm-openssl-provider_latest_u24.04_amd64.deb
   ```

   Instal Penyedia OpenSSL untuk Ubuntu 24.04 pada arsitektur: ARM64 

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

   ```
   $ sudo dpkg -i ./cloudhsm-openssl-provider_latest_u24.04_arm64.deb
   ```

------

   Anda telah menginstal pustaka bersama untuk Penyedia OpenSSL di. `/opt/cloudhsm/lib/licloudhsm_openssl_provider.so` 

1. SDK Klien Bootstrap 5. Untuk informasi selengkapnya tentang bootstrapping, lihat [Bootstrap Klien SDK](cluster-connect.md#connect-how-to).

1. Tetapkan variabel `CLOUDHSM_PIN` lingkungan dengan kredensi pengguna kripto (CU) Anda:

   ```
   $ export CLOUDHSM_PIN=<username>:<password>
   ```

1. Connect instalasi OpenSSL Provider Anda ke cluster. Untuk informasi selengkapnya, lihat [Hubungkan ke Klaster](cluster-connect.md).

## Verifikasi instalasi.
<a name="openssl-provider-verify-installation"></a>

Verifikasi bahwa Penyedia OpenSSL diinstal dengan benar:

```
$ CLOUDHSM_PIN=<username>:<password> openssl list -providers -provider cloudhsm
```

Anda akan melihat output yang mirip dengan:

```
Providers:
  cloudhsm
    name: AWS CloudHSM OpenSSL Provider
    version: 5.17.0
    status: active
  default
    name: OpenSSL Default Provider
    version: 3.2.2
    status: active
```

# Tipe kunci yang didukung untuk Penyedia AWS CloudHSM OpenSSL untuk SDK Klien 5
<a name="openssl-provider-key-types"></a>

Penyedia AWS CloudHSM OpenSSL mendukung tipe kunci berikut dengan Client SDK 5.


****  

| Tipe Kunci | Deskripsi | 
| --- | --- | 
| RSA | RSA sign/verify dan operasi enkripsi asimetris. Verifikasi diturunkan ke perangkat lunak OpenSSL. Untuk menghasilkan kunci RSA yang dapat dioperasikan dengan Penyedia OpenSSL, lihat. [Ekspor kunci asimetris dengan CloudHSM CLI](cloudhsm_cli-key-generate-file.md) | 
| EC | ECDSA sign/verify untuk kurva P-256, P-384, dan P-521. Verifikasi diturunkan ke perangkat lunak OpenSSL. Untuk menghasilkan kunci EC yang dapat dioperasikan dengan Penyedia OpenSSL, lihat. [Ekspor kunci asimetris dengan CloudHSM CLI](cloudhsm_cli-key-generate-file.md) | 

# Mekanisme yang Didukung Penyedia OpenSSL
<a name="openssl-provider-mechanisms"></a>

AWS CloudHSM OpenSSL Provider SDK mendukung serangkaian mekanisme kriptografi yang komprehensif untuk berbagai operasi termasuk tanda tangan digital, enkripsi asimetris, enkripsi simetris, pertukaran kunci, dan banyak lagi.

## Jenis tanda tangan RSA
<a name="openssl-provider-rsa-signatures"></a>

Penyedia OpenSSL mendukung tanda tangan digital RSA dengan beberapa algoritma hash dan skema padding:

SHA1withRSA  
Tanda tangan RSA dengan algoritma hash SHA-1  
+ Bantalan PKCS \$11 v1.5
+ Padding PSS (Skema Tanda Tangan Probabilistik)

SHA224withRSA  
Tanda tangan RSA dengan algoritma hash SHA-224  
+ Bantalan PKCS \$11 v1.5
+ Padding PSS

SHA256withRSA  
Tanda tangan RSA dengan algoritma hash SHA-256  
+ Bantalan PKCS \$11 v1.5
+ Padding PSS

SHA384withRSA  
Tanda tangan RSA dengan algoritma hash SHA-384  
+ Bantalan PKCS \$11 v1.5
+ Padding PSS

SHA512withRSA  
Tanda tangan RSA dengan algoritma hash SHA-512  
+ Bantalan PKCS \$11 v1.5
+ Padding PSS

## Jenis tanda tangan ECDSA
<a name="openssl-provider-ecdsa-signatures"></a>

Penyedia OpenSSL mendukung tanda tangan digital ECDSA dengan beberapa algoritma hash:

SHA1withECDSA  
Tanda tangan ECDSA dengan algoritma hash SHA-1

SHA224withECDSA  
Tanda tangan ECDSA dengan algoritma hash SHA-224

SHA256withECDSA  
Tanda tangan ECDSA dengan algoritma hash SHA-256

SHA384withECDSA  
Tanda tangan ECDSA dengan algoritma hash SHA-384

SHA512withECDSA  
Tanda tangan ECDSA dengan algoritma hash SHA-512

# Konfigurasi Lanjutan Penyedia OpenSSL
<a name="openssl-provider-advanced-config"></a>

AWS CloudHSM OpenSSL Provider SDK menyediakan opsi konfigurasi lanjutan untuk menyesuaikan perilakunya untuk berbagai kasus penggunaan dan lingkungan. Gunakan alat konfigurasi untuk mengatur opsi ini.
+ [Coba lagi konfigurasi untuk Penyedia OpenSSL](openssl-provider-configs-retry.md)

# Coba lagi perintah untuk Penyedia OpenSSL untuk AWS CloudHSM
<a name="openssl-provider-configs-retry"></a>

AWS CloudHSM Client SDK 5.8.0 dan yang lebih baru memiliki strategi coba ulang otomatis bawaan yang akan mencoba kembali operasi HSM-throttled dari sisi klien. Ketika HSM membatasi operasi karena terlalu sibuk melakukan operasi sebelumnya dan tidak dapat menerima lebih banyak permintaan, klien SDKs akan mencoba kembali operasi yang dibatasi hingga 3 kali sementara mundur secara eksponensial. Strategi coba ulang otomatis ini dapat diatur ke salah satu dari dua mode: **off** dan **standar**.
+ **off**: SDK Klien tidak akan melakukan strategi coba ulang apa pun untuk operasi yang dibatasi oleh HSM.
+ **standard**: Ini adalah mode default untuk Client SDK 5.8.0 dan yang lebih baru. Dalam mode ini, klien SDKs akan secara otomatis mencoba kembali operasi yang dibatasi dengan mundur secara eksponensial.

Untuk informasi selengkapnya, lihat [Pelambatan HSM](troubleshoot-hsm-throttling.md).

## Setel perintah coba lagi ke mode mati
<a name="w2aac25c21c21c19b7b9"></a>

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

**Untuk mengatur perintah coba lagi **off** untuk Client SDK 5 di Linux**
+ Anda dapat menggunakan perintah berikut untuk mengatur konfigurasi coba lagi ke **off** mode:

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

------

# Penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM Klien SDK 5
<a name="ksp-library"></a>

 Key Storage Provider (KSP) adalah API kriptografi khusus untuk sistem operasi Microsoft Windows. Key Storage Provider (KSP) memungkinkan pengembang untuk menggunakan teknik kriptografi untuk mengamankan aplikasi berbasis Windows.

Untuk informasi tentang bootstrap, lihat. [Menghubungkan ke cluster](cluster-connect.md)

Untuk informasi tentang penggunaan SDK Klien 3, lihat[Menggunakan versi SDK sebelumnya untuk bekerja dengan AWS CloudHSM](choose-client-sdk.md).

**Topics**
+ [Instal penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM Client SDK 5](ksp-library-install.md)
+ [Otentikasi ke penyedia penyimpanan Kunci (KSP) untuk AWS CloudHSM Klien SDK 5](ksp-library-authentication.md)
+ [Tipe kunci yang didukung untuk Penyedia Penyimpanan Kunci (KSP) untuk SDK AWS CloudHSM Klien 5](ksp-library--key-types.md)
+ [Operasi API yang didukung Penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM Klien SDK 5](ksp-library-apis.md)
+ [Konfigurasi lanjutan untuk KSP untuk AWS CloudHSM](ksp-library-configs.md)

# Instal penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM Client SDK 5
<a name="ksp-library-install"></a>

Gunakan bagian berikut untuk menginstal penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM Client SDK 5.

**catatan**  
Untuk menjalankan satu klaster HSM dengan SDK Klien 5, Anda harus terlebih dahulu mengelola pengaturan daya tahan kunci klien dengan menetapkan `disable_key_availability_check` ke `True`. Untuk informasi selengkapnya, lihat [Sinkronisasi Kunci](manage-key-sync.md) dan [Alat Konfigurasi SDK Klien 5](configure-sdk-5.md).

**Untuk menginstal dan mengkonfigurasi Penyedia Penyimpanan Kunci (KSP)**

1. Instal Penyedia Penyimpanan Kunci (KSP) untuk Windows Server pada arsitektur x86\$164, buka PowerShell sebagai administrator dan jalankan perintah berikut:

   ```
   PS C:\> wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMKSP-latest.msi -Outfile C:\AWSCloudHSMKSP-latest.msi
   ```

   ```
   PS C:\> Start-Process msiexec.exe -ArgumentList '/i C:\AWSCloudHSMKSP-latest.msi /quiet /norestart /log C:\client-install.txt' -Wait
   ```

1. Gunakan alat konfigurasi untuk menentukan lokasi sertifikat penerbitan. Untuk petunjuk, lihat [Tentukan lokasi sertifikat penerbitan](cluster-connect.md#specify-cert-location).

1. Untuk terhubung ke cluster Anda, lihat[Bootstrap Klien SDK](cluster-connect.md#connect-how-to).

1. Anda dapat menemukan file Penyedia Penyimpanan Kunci (KSP) di lokasi berikut:
   + Biner Windows:

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

     Skrip konfigurasi Windows dan berkas log:

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

# Otentikasi ke penyedia penyimpanan Kunci (KSP) untuk AWS CloudHSM Klien SDK 5
<a name="ksp-library-authentication"></a>

Sebelum Anda menggunakan Key Storage Provider (KSP) untuk AWS CloudHSM Client SDK 5, Anda harus mengatur kredensi login untuk HSM pada sistem Anda. Anda memiliki dua pilihan:
+ Windows Credentials Manager (direkomendasikan untuk keamanan yang lebih baik)
+ Variabel lingkungan sistem (pengaturan yang lebih sederhana)

## Pengelola Kredensional Windows
<a name="sdk5-wcm"></a>

Anda dapat mengatur kredensil menggunakan `set_cloudhsm_credentials` utilitas atau antarmuka Windows Credentials Manager.
+ **Menggunakan utilitas `set_cloudhsm_credentials`**:

  Pemasang Windows termasuk `set_cloudhsm_credentials` utilitas. Anda dapat menggunakan utilitas ini untuk dengan mudah melewati kredensial login HSM ke Windows Credential Manager. Jika Anda ingin mengkompilasi utilitas ini dari sumber, Anda dapat menggunakan kode Python yang disertakan dalam penginstal.

  1. Navigasi ke `C:\Program Files\Amazon\CloudHSM\tools\`.

  1. Jalankan perintah berikut:

     ```
     set_cloudhsm_credentials.exe --username <CU USER> --password <CU PASSWORD>
     ```
+ **Menggunakan antarmuka Credential Manager**:

  1. Buka Manajer Kredensi:
     + Masukkan `credential manager` di kotak pencarian taskbar 
     + Pilih **Credential Manager**

  1. Pilih **Kredensial Windows** untuk mengelola kredensial Windows.

  1. Pilih **Tambahkan kredensi generik**

  1. Masukkan detail berikut:
     + **Alamat Internet atau Jaringan**:`CLOUDHSM_PIN`.
     + **Nama Pengguna**:*<CU USER>*.
     + **Kata Sandi**:*<CU PASSWORD>*.

  1. Pilih **OK**

## Variabel lingkungan sistem
<a name="sdk5-enviorn-var"></a>

Anda dapat mengatur variabel lingkungan sistem untuk mengidentifikasi HSM dan [pengguna kripto](understanding-users.md#crypto-user-chsm-cli) (CU) Anda. 

**Awas**  
Menyetel kredensil melalui variabel lingkungan sistem menyimpan kata sandi Anda dalam teks biasa di sistem Anda. Untuk keamanan yang lebih baik, gunakan Windows Credential Manager sebagai gantinya.

Anda dapat mengatur variabel lingkungan menggunakan:
+ Itu [https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx).
+ Panel Kontrol **Properti Sistem** Windows (tab **Lanjutan**).
+ mengatur variabel lingkungan sistem permanen Metode [terprogram](https://msdn.microsoft.com/en-us/library/system.environment.setenvironmentvariable(v=vs.110).aspx).

Untuk mengatur variabel lingkungan sistem:

**`CLOUDHSM_PIN=<CU USERNAME>:<CU PASSWORD>`**  
Mengidentifikasi [pengguna kripto](understanding-users.md#crypto-user-chsm-cli) (CU) di HSM dan menyediakan semua informasi login yang diperlukan. Aplikasi Anda mengautentikasi dan berjalan sebagai CU ini. Aplikasi memiliki izin CU ini dan dapat melihat dan mengelola hanya kunci yang CU miliki dan bagikan. Untuk membuat CU baru, gunakan perintah [user create](cloudhsm_cli-user-create.md) di CloudHSM CLI. Untuk menemukan yang ada CUs, gunakan perintah [daftar pengguna](cloudhsm_cli-user-list.md) di CloudHSM CLI.  
Contoh:  

```
setx /m CLOUDHSM_PIN test_user:password123
```

**catatan**  
Saat menyetel variabel lingkungan CLOUDHSM\$1PIN, Anda harus menghindari karakter khusus apa pun yang mungkin ditafsirkan oleh shell Anda.

# Tipe kunci yang didukung untuk Penyedia Penyimpanan Kunci (KSP) untuk SDK AWS CloudHSM Klien 5
<a name="ksp-library--key-types"></a>

Penyedia Penyimpanan AWS CloudHSM Kunci (KSP) mendukung jenis kunci berikut dengan Client SDK 5.


****  

| Tipe Kunci | Deskripsi | 
| --- | --- | 
| EC | Hasilkan kunci dengan kurva secp256r1 (P-256), secp384r1 (P-384), dan secp521r1 (P-521). | 
| RSA | Hasilkan kunci RSA 2048, 3072, dan 4096-bit. | 

# Operasi API yang didukung Penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM Klien SDK 5
<a name="ksp-library-apis"></a>

Parameter dalam KSP ditentukan oleh Microsoft KSP. Lihat [dokumentasi Microsoft](https://learn.microsoft.com/en-us/windows/win32/api/ncrypt/) untuk informasi selengkapnya.

Penyedia Penyimpanan Kunci (KSP) mendukung operasi API KSP berikut untuk AWS CloudHSM Client SDK 5.
+ [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md)
+ [NCryptOpenKey](ksp-library-apis-open-key.md)
+ [NCryptCreatePersistedKey](ksp-library-apis-create-persisted-key.md)
+ [NCryptGetProperty](ksp-library-apis-get-property.md)
+ [NCryptSetProperty](ksp-library-apis-set-property.md)
+ [NCryptFinalizeKey](ksp-library-apis-finalize-key.md)
+ [NCryptDeleteKey](ksp-library-apis-delete-key.md)
+ [NCryptFreeObject](ksp-library-apis-free-object.md)
+ [NCryptFreeBuffer](ksp-library-apis-free-buffer.md)
+ [NCryptIsAlgSupported](ksp-library-apis-is-alg-supported.md)
+ [NCryptEnumAlgorithms](ksp-library-apis-enum-algorithms.md)
+ [NCryptEnumKeys](ksp-library-apis-enum-keys.md)
+ [NCryptExportKey](ksp-library-apis-export-key.md)
+ [NCryptSignHash](ksp-library-apis-sign-hash.md)
+ [NCryptVerifySignature](ksp-library-apis-verify-signature.md)

# NCryptOpenStorageProvider berfungsi dengan Penyedia Penyimpanan Kunci (KSP)
<a name="ksp-library-apis-open-provider"></a>

`NCryptOpenStorageProvider`Fungsi memuat dan menginisialisasi Penyedia Penyimpanan Kunci (KSP).

## Parameter
<a name="ksp-library-apis-open-provider-parameters"></a>

 `phProvider`[keluar]   
Pointer ke `NCRYPT_PROV_HANDLE` variabel yang menyimpan pegangan penyedia.

 `pszProviderName`[dalam]   
Pointer ke string Unicode yang dihentikan nol yang mengidentifikasi penyedia penyimpanan kunci. AWS CloudHSM Key Storage Provider (KSP) mendukung nilai-nilai berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-open-provider.html)
Nilai adalah string karakter lebar literal, seperti yang ditunjukkan oleh L sebelum literal.

`dwFlags`[dalam]  
Bendera yang mengubah perilaku fungsi. Tidak ada bendera yang ditentukan untuk fungsi ini.

## Nilai yang Ditampilkan
<a name="ksp-library-apis-open-provider-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 

# NCryptOpenKey dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-open-key"></a>

`NCryptOpenKey`Fungsi ini membuka kunci yang ada di Penyedia Penyimpanan Kunci (KSP).

## Parameter
<a name="ksp-library-apis-open-key-parameters"></a>

 `hProvider`[dalam]   
Pegangan KSP yang berisi kunci. Gunakan [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md)untuk mendapatkan pegangan.

 `phKey`[Keluar]   
Sebuah pointer ke `NCRYPT_KEY_HANDLE` variabel yang menyimpan pegangan kunci.

`pszKeyName`[dalam]  
Sebuah pointer ke string Unicode null-terminated yang berisi nama kunci.

`dwLegacyKeySpec`[di, tidak terpakai]  
AWS CloudHSM Penyedia Penyimpanan Kunci (KSP) tidak menggunakan parameter ini.

`dwFlags`[dalam]  
Bendera yang memodifikasi perilaku fungsi. Tidak ada bendera yang ditentukan untuk fungsi ini.

## Nilai yang Ditampilkan
<a name="ksp-library-apis-open-key-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode kembalikan | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hProvider` tidak valid.  | 
|  NTE\$1BAD\$1KEYSET  |  Nama kunci yang diberikan tidak mengembalikan hasil yang unik.  | 

# NCryptCreatePersistedKey dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-create-persisted-key"></a>

`NCryptCreatePersistedKey`Fungsi ini membuat kunci baru dan menyimpannya di Penyedia Penyimpanan Kunci (KSP). Anda dapat menggunakan [`NCryptSetProperty`](ksp-library-apis-set-property.md)fungsi untuk mengatur propertinya setelah pembuatan. Anda harus menelepon [`NCryptFinalizeKey`](ksp-library-apis-finalize-key.md)sebelum Anda dapat menggunakan kunci.

## Parameter
<a name="ksp-library-apis-create-persisted-key-parameters"></a>

 `hProvider`[dalam]   
Pegangan penyedia penyimpanan kunci tempat Anda akan membuat kunci. Gunakan [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md)untuk mendapatkan pegangan ini.

 `phKey`[Keluar]   
Alamat `NCRYPT_KEY_HANDLE` variabel yang menyimpan pegangan kunci. 

 `pszAlgId`[dalam]   
Pointer ke string Unicode yang dihentikan nol yang menentukan pengidentifikasi algoritma kriptografi untuk membuat kunci.  
AWS CloudHSM Penyedia Penyimpanan Kunci (KSP) mendukung algoritma berikut:     
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-create-persisted-key.html)

`pszKeyName`[dalam, opsional]  
Pointer ke string Unicode yang dihentikan nol yang berisi nama kunci. Jika parameter ini adalah NULL, fungsi ini akan membuat kunci fana yang tidak bertahan.

`dwLegacyKeySpec`[di, tidak terpakai]  
AWS CloudHSM Penyedia Penyimpanan Kunci (KSP) tidak menggunakan parameter ini.

`dwFlags`[dalam]  
Bendera untuk memodifikasi perilaku fungsi. Gunakan nol atau lebih dari nilai-nilai berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-create-persisted-key.html)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-create-persisted-key-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Fungsi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 
|  NTE\$1NOT\$1SUPPORTED  |  `pszAlgId`Parameter berisi nilai yang tidak didukung.  | 
|  NTE\$1EXISTS  |  Kunci dengan nama yang ditentukan sudah ada dan operasi tidak digunakan` NCRYPT_OVERWRITE_KEY_FLAG`.  | 

# NCryptGetProperty dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-get-property"></a>

`NCryptGetProperty`Fungsi mengambil nilai properti untuk objek penyimpanan kunci.

## Parameter
<a name="ksp-library-apis-create-get-property-parameters"></a>

 `hObject`[dalam]   
 Pegangan objek yang propertinya ingin Anda ambil. Anda dapat menggunakan:  
+ Pegangan penyedia (`NCRYPT_PROV_HANDLE`)
+ Sebuah pegangan kunci (`NCRYPT_KEY_HANDLE`)

 `pszProperty `[dalam]   
Sebuah pointer ke string Unicode null-terminated yang berisi nama properti untuk diambil.   
Saat menggunakan`NCRYPT_PROV_HANDLE`, Penyedia Penyimpanan AWS CloudHSM Kunci (KSP) mendukung pengidentifikasi KSP berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)
Saat menggunakan`NCRYPT_KEY_HANDLE`, Penyedia Penyimpanan AWS CloudHSM Kunci (KSP) mendukung pengidentifikasi KSP berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)
Nilai adalah string karakter lebar literal, seperti yang ditunjukkan oleh L sebelum literal.

 `pbOutput`[Keluar]   
Alamat buffer untuk menyimpan nilai properti. Tentukan ukuran buffer menggunakan`cbOutput`.  
Untuk menentukan ukuran buffer yang diperlukan, atur parameter ini ke NULL. Fungsi menyimpan ukuran yang diperlukan (dalam byte) di lokasi yang ditunjuk oleh`pcbResult`.

 `cbOutput`[dalam]   
 Ukuran `pbOutput` buffer dalam byte.

`pcbResult`[Keluar]  
Pointer ke variabel DWORD yang menyimpan jumlah byte yang disalin ke buffer. `pbOutput`  
Jika NULL, ini menyimpan ukuran yang diperlukan (dalam byte). `pbOutput`

`dwFlags`[dalam]  
Bendera untuk memodifikasi perilaku fungsi. Anda dapat menggunakan nol atau:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)
Ketika PSZProperty`NCRYPT_SECURITY_DESCR_PROPERTY`, gunakan satu atau kombinasi dari:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-get-property.html)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-get-property-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 
|  NTE\$1NOT\$1SUPPORTED  |  `pszAlgId`Parameter berisi nilai yang tidak didukung.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hObject` tidak valid.  | 
|  NTE\$1BUFFER\$1TOO\$1SMALL  |  `cbOutput`Parameternya terlalu kecil untuk mengembalikan nilai.  | 

# NCryptSetProperty dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-set-property"></a>

`NCryptSetProperty`Fungsi menetapkan nilai properti untuk objek penyimpanan kunci.

## Parameter
<a name="ksp-library-apis-create-set-property-parameters"></a>

 `hObject`[dalam]   
 Pegangan objek yang propertinya ingin Anda atur. Anda dapat menggunakan:  
+ Pegangan penyedia (`NCRYPT_PROV_HANDLE`)
+ Sebuah pegangan kunci (`NCRYPT_KEY_HANDLE`)

 `pszProperty `[dalam]   
Sebuah pointer ke string Unicode null-terminated yang berisi nama properti untuk diambil.   
Saat menggunakan`NCRYPT_PROV_HANDLE`, Penyedia Penyimpanan AWS CloudHSM Kunci (KSP) mendukung pengidentifikasi KSP berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-set-property.html)
Saat menggunakan`NCRYPT_KEY_HANDLE`, Penyedia Penyimpanan AWS CloudHSM Kunci (KSP) mendukung pengidentifikasi KSP berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-set-property.html)
Nilai adalah string karakter lebar literal, seperti yang ditunjukkan oleh L sebelum literal.

 `pbInput`[dalam]   
 Alamat buffer yang berisi nilai properti baru. `cbInput`berisi ukuran buffer. 

 `cbInput`[dalam]   
 Ukuran `pbInput` buffer dalam byte. 

`dwFlags`[dalam]  
Bendera yang memodifikasi perilaku fungsi. Tidak ada bendera yang ditentukan untuk fungsi ini.

## Nilai yang Ditampilkan
<a name="ksp-library-apis-set-property-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 
|  NTE\$1NOT\$1SUPPORTED  |  `pszProperty`Parameter berisi nilai yang tidak didukung.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hObject` tidak valid.  | 
|  NTE\$1BAD\$1DATA  |  Data yang ditunjukkan oleh `pbInput` dan `cbInput` tidak valid.  | 

# NCryptFinalizeKey dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-finalize-key"></a>

`NCryptFinalizeKey`Fungsi ini melengkapi kunci KSP. Anda harus memanggil fungsi ini sebelum Anda dapat menggunakan kunci.

## Parameter
<a name="ksp-library-apis-finalize-key-parameters"></a>

 `hKey`[dalam]   
 Pegangan kunci untuk menyelesaikan. Dapatkan pegangan ini dengan memanggil [NCryptCreatePersistedKey](ksp-library-apis-create-persisted-key.md)fungsi.

`dwFlags`[dalam]  
Bendera untuk memodifikasi perilaku fungsi. Anda dapat menggunakan nol atau nilai-nilai ini:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-finalize-key.html)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-finalize-key-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hKey` tidak valid.  | 
|  NTE\$1NOT\$1SUPPORTED  |  `dwFlags`Parameter berisi nilai yang tidak didukung.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 

# NCryptDeleteKey dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-delete-key"></a>

`NCryptDeleteKey`Fungsi menghapus kunci KSP dari Penyedia Penyimpanan Kunci (KSP).

## Parameter
<a name="ksp-library-apis-delete-key-parameters"></a>

 `hKey`[dalam]   
 Pegangan kunci untuk dihapus. 

`dwFlags`[dalam]  
Bendera untuk memodifikasi perilaku fungsi. Anda dapat menggunakan nol atau lebih dari nilai-nilai berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-delete-key.html)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-delete-key-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Fungsinya berhasil.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hKey` tidak valid.  | 
|  NTE\$1INTERNAL\$1ERROR  |  Kesalahan internal terjadi saat menghapus kunci.  | 

# NCryptFreeObject dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-free-object"></a>

`NCryptFreeObject`Fungsi melepaskan provider atau key handle dari Key Storage Provider (KSP).

## Parameter
<a name="ksp-library-apis-free-object-parameters"></a>

 `hObject`[dalam]   
 Pegangan objek untuk dilepaskan. Anda dapat menggunakan:  
+ Pegangan penyedia (`NCRYPT_PROV_HANDLE`)
+ Sebuah pegangan kunci (`NCRYPT_KEY_HANDLE`)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-free-object-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hObject` tidak valid.  | 

# NCryptFreeBuffer dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-free-buffer"></a>

`NCryptFreeBuffer`Fungsi ini melepaskan blok memori yang dialokasikan oleh Penyedia Penyimpanan Kunci (KSP).

## Parameter
<a name="ksp-library-apis-free-buffer-parameters"></a>

 `pvInput`[dalam]   
 Alamat memori yang akan dilepaskan. 

## Nilai yang Ditampilkan
<a name="ksp-library-apis-free-buffer-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 

# NCryptIsAlgSupported dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-is-alg-supported"></a>

NCryptIsAlgSupported fungsi menentukan apakah Key Storage Provider (KSP) mendukung algoritma kriptografi tertentu.

## Parameter
<a name="ksp-library-apis-is-alg-supported-parameters"></a>

 `hProvider`[dalam]   
 Pegangan penyedia penyimpanan kunci. Gunakan [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md)untuk mendapatkan pegangan. 

 `pszAlgId`[dalam]   
 Pointer ke string Unicode yang dihentikan nol yang berisi pengidentifikasi algoritma kriptografi untuk membuat kunci. AWS CloudHSM Key Storage Provider (KSP) mendukung algoritma berikut:     
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-is-alg-supported.html)

`dwFlags`[dalam]  
Bendera yang memodifikasi perilaku fungsi. Ini bisa nol atau nilai berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-is-alg-supported.html)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-is-alg-supported-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode kembalikan | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 
|  NTE\$1NOT\$1SUPPORTED  |  `pszAlgId`Parameter berisi nilai yang tidak didukung.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hProvider` tidak valid.  | 

# NCryptEnumAlgorithms dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-enum-algorithms"></a>

`NCryptEnumAlgorithms`Fungsi ini mengambil nama-nama algoritma yang didukung oleh Penyedia Penyimpanan Kunci (KSP).

## Parameter
<a name="ksp-library-apis-enum-algorithms-parameters"></a>

 `hProvider`[dalam]   
 Pegangan penyedia penyimpanan kunci untuk menghitung algoritma. Gunakan [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md)fungsi untuk mendapatkan pegangan ini. 

 `dwAlgOperations`[dalam]   
Satu set nilai yang menentukan kelas algoritma mana yang akan dihitung. Anda dapat menggunakan nol untuk menghitung semua algoritma, atau menggabungkan satu atau lebih dari nilai-nilai ini:     
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-enum-algorithms.html)

`pdwAlgCount`[Keluar]  
Alamat DWORD yang menyimpan jumlah elemen dalam `ppAlgList` array.

`ppAlgList`[Keluar]  
Alamat pointer `NCryptAlgorithmName` struktur yang menyimpan array nama algoritma terdaftar. `pdwAlgCount`Parameter menunjukkan jumlah elemen dalam array ini.

`dwFlags`[dalam]  
Bendera untuk memodifikasi perilaku fungsi. Gunakan nol atau nilai berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-enum-algorithms.html)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-open-key-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 
|  NTE\$1NOT\$1SUPPORTED  |  `dwAlgOperations`Parameter berisi nilai yang tidak didukung.  | 

# NCryptEnumKeys dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-enum-keys"></a>

NCryptEnumKeys fungsi daftar kunci yang disimpan di Penyedia Penyimpanan Kunci (KSP).

## Parameter
<a name="ksp-library-apis-enum-keys-parameters"></a>

 `hProvider`[dalam]   
Pegangan penyedia penyimpanan utama. Gunakan [`NCryptOpenStorageProvider`](ksp-library-apis-open-provider.md)untuk mendapatkan pegangan ini. 

 `pszScope`[di, tidak terpakai]   
 Setel parameter ini ke NULL.

 `ppKeyName`[keluar]   
Alamat pointer ke `NCryptKeyName` struktur yang menyimpan nama kunci. Untuk membebaskan memori ini setelah digunakan, hubungi`NCryptFreeBuffer`. 

`ppEnumState`[masuk, keluar]  
Alamat pointer VOID yang melacak kemajuan enumerasi. Penyedia penyimpanan kunci menggunakan informasi ini secara internal untuk mengelola urutan enumerasi. Untuk memulai enumerasi baru dari awal, atur pointer ini ke NULL.  
Untuk membebaskan memori ini setelah menyelesaikan enumerasi, berikan pointer ini ke file. `NCryptFreeBuffer`

`dwFlags`[dalam]  
Bendera untuk memodifikasi perilaku fungsi. Fungsi ini tidak memiliki bendera.

## Nilai yang Ditampilkan
<a name="ksp-library-apis-enum-keys-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hProvider` tidak valid.  | 
|  NTE\$1NO\$1MORE\$1ITEMS  |  Enumerasi telah mencantumkan semua kunci yang tersedia.  | 

# NCryptExportKey dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-export-key"></a>

`NCryptExportKey`Fungsi mengekspor kunci KSP ke memori. BLOB Fungsi ini hanya mendukung ekspor kunci publik.

## Parameter
<a name="ksp-library-apis-export-key-parameters"></a>

 `hKey`[dalam]  
Pegangan kunci untuk mengekspor.

 `hExportKey`[di, tidak terpakai]  
 AWS CloudHSM Penyedia Penyimpanan Kunci (KSP) tidak menggunakan parameter ini. 

`pszBlobType`[dalam]  
String Unicode yang dihentikan nol yang menentukan jenis yang akan diekspor. BLOB AWS CloudHSM Penyedia Penyimpanan Kunci (KSP) mendukung nilai-nilai berikut:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-export-key.html)

`pParameterList`[di, tidak terpakai]  
AWS CloudHSM Penyedia Penyimpanan Kunci (KSP) tidak menggunakan parameter ini.

`pbOutput`[keluar, opsional]  
Alamat buffer untuk menyimpan BLOB kunci. Tentukan ukuran buffer menggunakan`cbOutput`. Jika disetel ke NULL, fungsi menyimpan ukuran yang diperlukan (dalam byte) di DWORD yang ditunjuk oleh. `pcbResult`

`cbOutput`[dalam]  
Ukuran `pbOutput` buffer dalam byte.

`pcbResult`[keluar]  
Alamat variabel DWORD yang menyimpan jumlah byte yang disalin ke buffer. `pbOutput` Jika `pbOutput` NULL, fungsi menyimpan ukuran buffer yang diperlukan dalam byte.

`dwFlags`[dalam]  
Bendera yang memodifikasi cara kerja fungsi. Anda dapat menggunakan nol atau berikut ini:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-export-key.html)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-export-key-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hProvider` tidak valid.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 
|  NTE\$1BAD\$1KEY\$1STATE  |  Status kunci tidak valid.  | 
|  NTE\$1NOT\$1SUPPORTED  |  `dwFlags`Parameter `pszBlobType` atau berisi nilai yang tidak didukung.  | 
|  STATUS\$1INTERNAL\$1ERROR  |  Kesalahan internal terjadi selama operasi.  | 

# NCryptSignHash dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-sign-hash"></a>

`NCryptSignHash`Fungsi ini menciptakan tanda tangan dari nilai hash.

## Parameter
<a name="ksp-library-apis-sign-hash-parameters"></a>

 `hKey`[dalam]   
 Pegangan kunci yang digunakan untuk menandatangani hash. 

`pPaddingInfo`[dalam, opsional]  
Sebuah pointer ke struktur yang berisi informasi padding. Jenis struktur tergantung pada `dwFlags` nilainya. Gunakan parameter ini hanya dengan tombol asimetris; atur ke NULL untuk jenis kunci lainnya.

`pbHashValue`[dalam]  
Sebuah pointer ke buffer yang berisi nilai hash untuk ditandatangani. Tentukan ukuran buffer menggunakan`cbHashValue`.

`cbHashValue`[dalam]  
Ukuran, dalam byte, dari `pbHashValue` buffer untuk ditandatangani.

`pbSignature`[keluar]  
Alamat buffer untuk menyimpan tanda tangan. Tentukan ukuran buffer menggunakan`cbSignature`.  
Untuk menentukan ukuran buffer yang diperlukan, atur parameter ini ke NULL. Fungsi menyimpan ukuran yang diperlukan (dalam byte) di lokasi yang ditunjuk oleh`pcbResult`.

`cbSignature`[dalam]  
Ukuran `pbSignature` buffer dalam byte. Fungsi mengabaikan parameter ini jika `pbSignature` NULL.

`pcbResult`[keluar]  
Pointer ke variabel DWORD yang menyimpan jumlah byte yang disalin ke buffer. `pbSignature`  
Jika `pbSignature` NULL, ini menyimpan ukuran buffer yang diperlukan, dalam byte. 

`dwFlags`[dalam]  
Bendera untuk memodifikasi perilaku fungsi. Bendera yang diizinkan bergantung pada jenis kunci Anda. Gunakan salah satu dari nilai-nilai ini:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-sign-hash.html)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-sign-hash-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode pengembalian | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hKey` tidak valid.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 
|  NTE\$1BUFFER\$1TOO\$1SMALL  |  `pcbOutput`Parameternya terlalu kecil untuk mengembalikan nilai.  | 
|  NTE\$1BAD\$1KEY\$1STATE  |  Status kunci tidak valid.  | 
|  NTE\$1INTERNAL\$1ERROR  |  Kesalahan internal terjadi saat menandatangani hash.  | 

# NCryptVerifySignature dengan penyedia penyimpanan kunci (KSP)
<a name="ksp-library-apis-verify-signature"></a>

`NCryptVerifySignature`Fungsi ini mengonfirmasi apakah tanda tangan cocok dengan hash tertentu.

## Parameter
<a name="ksp-library-apis-verify-signature-parameters"></a>

 `hKey`[dalam]   
 Pegangan kunci yang digunakan untuk mendekripsi tanda tangan. Anda harus menggunakan bagian kunci publik dari key pair yang digunakan untuk menandatangani data dengan [`NCryptSignHash`](ksp-library-apis-sign-hash.md). 

`pPaddingInfo`[dalam, opsional]  
Sebuah pointer ke struktur yang berisi informasi padding. Jenis struktur tergantung pada `dwFlags` nilainya. Gunakan parameter ini hanya dengan tombol asimetris; atur ke NULL untuk jenis kunci lainnya.

`pbHashValue`[dalam]  
Sebuah pointer ke buffer yang berisi nilai hash untuk ditandatangani. Tentukan ukuran buffer menggunakan`cbHashValue`.

`cbHashValue`[dalam]  
Ukuran `pbHashValue` buffer dalam byte.

`pbSignature`[Keluar]  
Alamat buffer yang berisi hash data yang ditandatangani. Gunakan [`NCryptSignHash`](ksp-library-apis-sign-hash.md)untuk membuat tanda tangan ini. Tentukan ukuran buffer menggunakan`cbSignature`.

`cbSignature`[dalam]  
Ukuran `pbSignature` buffer dalam byte. Gunakan [`NCryptSignHash`](ksp-library-apis-sign-hash.md)untuk membuat tanda tangan.

`dwFlags`[dalam]  
Bendera untuk memodifikasi perilaku fungsi. Bendera yang diizinkan bergantung pada jenis kunci Anda. Gunakan salah satu dari nilai-nilai ini:    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/ksp-library-apis-verify-signature.html)

## Nilai yang Ditampilkan
<a name="ksp-library-apis-verify-signature-return-value"></a>

Fungsi mengembalikan kode status untuk menunjukkan keberhasilan atau kegagalan.

Kode pengembalian umum meliputi:


****  

| Kode kembalikan | Deskripsi | 
| --- | --- | 
|  ERROR\$1SUCCESS  |  Operasi selesai dengan sukses.  | 
|  NTE\$1INVALID\$1PARAMETER  |  Satu atau lebih parameter tidak valid.  | 
|  NTE\$1FAIL  |  Operasi tidak bisa selesai.  | 
|  NTE\$1INVALID\$1HANDLE  |  Pegangan masuk `hKey` tidak valid.  | 
|  NTE\$1BAD\$1FLAGS  |  `dwFlags`Parameter berisi nilai yang tidak valid.  | 
|  NTE\$1BAD\$1SIGNATURE  |  Tanda tangan tidak diverifikasi.  | 
|  NTE\$1BAD\$1KEY\$1STATE  |  Status kunci tidak valid.  | 
|  NTE\$1INTERNAL\$1ERROR  |  Kesalahan internal terjadi saat memverifikasi tanda tangan.  | 

# Konfigurasi lanjutan untuk KSP untuk AWS CloudHSM
<a name="ksp-library-configs"></a>

Penyedia Penyimpanan AWS CloudHSM Kunci (KSP) mencakup konfigurasi lanjutan berikut, yang bukan merupakan bagian dari konfigurasi umum yang digunakan sebagian besar pelanggan. Konfigurasi ini memberikan kemampuan tambahan.
+ [SDK3 mode kompatibilitas untuk KSP](ksp-library-configs-sdk3-compatibility-mode.md)

# SDK3 mode kompatibilitas untuk Penyedia Penyimpanan Kunci (KSP) untuk AWS CloudHSM
<a name="ksp-library-configs-sdk3-compatibility-mode"></a>

Penyedia Penyimpanan Kunci (KSP) menerapkan pendekatan yang berbeda untuk interaksi kunci HSM:
+ Klien SDK 5: Menyediakan komunikasi langsung dengan kunci yang disimpan di HSM, menghilangkan kebutuhan akan file referensi lokal
+ Client SDK 3: Mempertahankan file lokal di server Windows yang bertindak sebagai referensi ke kunci yang disimpan di HSM, menggunakan file-file ini untuk memfasilitasi operasi utama

Untuk pelanggan yang bermigrasi dari Client SDK 3 ke Client SDK 5, mengaktifkan opsi mode SDK3 kompatibilitas mendukung operasi menggunakan file referensi kunci yang ada sambil mempertahankan arsitektur penyimpanan kunci HSM yang mendasarinya.

## Aktifkan mode SDK3 kompatibilitas
<a name="ksp-library-configs-sdk3-compatibility-mode-on"></a>

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

**Untuk mengaktifkan mode SDK3 kompatibilitas untuk Penyedia Penyimpanan Kunci (KSP) untuk Klien SDK 5 di Windows**
+ Anda dapat menggunakan perintah berikut untuk mengaktifkan mode SDK3 kompatibilitas:

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-ksp.exe" --enable-sdk3-compatibility-mode
  ```

------

## Nonaktifkan mode SDK3 kompatibilitas
<a name="ksp-library-configs-sdk3-compatibility-mode-off"></a>

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

**Untuk menonaktifkan mode SDK3 kompatibilitas untuk Penyedia Penyimpanan Kunci (KSP) untuk Klien SDK 5 di Windows**
+ Anda dapat menggunakan perintah berikut untuk menonaktifkan mode SDK3 kompatibilitas:

  ```
  PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-ksp.exe" --disable-sdk3-compatibility-mode
  ```

------

# Penyedia JCE untuk AWS CloudHSM Klien SDK 5
<a name="java-library"></a>

Penyedia AWS CloudHSM JCE adalah implementasi penyedia yang dibangun dari kerangka penyedia Java Cryptographic Extension (JCE). JCE memungkinkan Anda untuk melakukan operasi kriptografi menggunakan Java Development Kit (JDK). Dalam panduan ini, penyedia AWS CloudHSM JCE kadang-kadang disebut sebagai penyedia JCE. Gunakan penyedia JCE dan JDK untuk membongkar operasi kriptografi ke HSM. Untuk pemecahan masalah, lihat. [Masalah yang diketahui untuk JCE SDK untuk AWS CloudHSM](ki-jce-sdk.md)

Untuk informasi tentang penggunaan SDK Klien 3, lihat[Menggunakan versi SDK sebelumnya untuk bekerja dengan AWS CloudHSM](choose-client-sdk.md).

**Topics**
+ [Instal penyedia JCE untuk AWS CloudHSM Client SDK 5](java-library-install_5.md)
+ [Tipe kunci yang didukung untuk penyedia JCE untuk AWS CloudHSM Client SDK 5](java-lib-keys_5.md)
+ [Dasar-dasar manajemen utama di penyedia JCE untuk AWS CloudHSM Client SDK 5](java-library-key-basics_5.md)
+ [Mekanisme yang didukung untuk penyedia JCE untuk AWS CloudHSM Client SDK 5](java-lib-supported_5.md)
+ [Atribut kunci Java yang didukung untuk AWS CloudHSM Klien SDK 5](java-lib-attributes_5.md)
+ [Contoh kode untuk pustaka AWS CloudHSM perangkat lunak untuk Java untuk Klien SDK 5](java-samples.md)
+ [AWS CloudHSM JCE penyedia Javadocs](java-javadocs_5.md)
+ [AWS CloudHSM KeyStore Kelas Java untuk Client SDK 5](alternative-keystore_5.md)
+ [Konfigurasi lanjutan untuk AWS CloudHSM JCE untuk Client SDK 5](java-lib-configs.md)

# Instal penyedia JCE untuk AWS CloudHSM Client SDK 5
<a name="java-library-install_5"></a>

Penyedia JCE untuk AWS CloudHSM Client SDK 5 kompatibel dengan OpenJDK 8, OpenJDK 11, OpenJDK 17, OpenJDK 21, dan OpenJDK 25. Anda dapat mengunduh keduanya dari situs web [OpenJDK](https://openjdk.java.net/).

Gunakan bagian berikut untuk menginstal dan memberikan kredensil kepada penyedia.

**catatan**  
Untuk menjalankan satu klaster HSM dengan SDK Klien 5, Anda harus terlebih dahulu mengelola pengaturan daya tahan kunci klien dengan menetapkan `disable_key_availability_check` ke `True`. Untuk informasi selengkapnya, lihat [Sinkronisasi Kunci](manage-key-sync.md) dan [Alat Konfigurasi SDK Klien 5](configure-sdk-5.md).

**Topics**
+ [Langkah 1: Instal penyedia JCE](#install-java-library_5)
+ [Langkah 2: Berikan kredensil ke penyedia JCE](#java-library-credentials_5)

## Langkah 1: Instal penyedia JCE
<a name="install-java-library_5"></a>

1. Gunakan perintah berikut untuk mengunduh dan menginstal penyedia JCE. 

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

   Instal penyedia JCE untuk Amazon Linux 2023 pada arsitektur x86\$164:

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

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

   Instal penyedia JCE untuk Amazon Linux 2023 pada ARM64 arsitektur:

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

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

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

   Instal penyedia JCE untuk Amazon Linux 2 pada arsitektur x86\$164:

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

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

   Instal penyedia JCE untuk Amazon Linux 2 pada ARM64 arsitektur:

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

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

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

   Instal penyedia JCE untuk RHEL 10 pada arsitektur x86\$164:

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

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

   Instal penyedia JCE untuk RHEL 10 pada ARM64 arsitektur:

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

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

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

   Instal penyedia JCE untuk RHEL 9 (9.2\$1) pada arsitektur x86\$164:

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

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

   Instal penyedia JCE untuk RHEL 9 (9.2\$1) pada arsitektur: ARM64 

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

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

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

   Instal penyedia JCE untuk RHEL 8 pada arsitektur x86\$164:

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

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

   Instal penyedia JCE untuk RHEL 8 pada ARM64 arsitektur:

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

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

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

   Instal penyedia JCE untuk Ubuntu 24.04 LTS pada arsitektur x86\$164:

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

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

   Instal penyedia JCE untuk Ubuntu 24.04 LTS pada arsitektur: ARM64 

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

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

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

   Instal penyedia JCE untuk Ubuntu 22.04 LTS pada arsitektur x86\$164:

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

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

   Instal penyedia JCE untuk Ubuntu 22.04 LTS pada arsitektur: ARM64 

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

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

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

   Instal penyedia JCE untuk Windows Server pada arsitektur x86\$164, buka PowerShell sebagai administrator dan jalankan perintah berikut:

   ```
   PS C:\> wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Windows/AWSCloudHSMJCE-latest.msi -Outfile C:\AWSCloudHSMJCE-latest.msi
   ```

   ```
   PS C:\> Start-Process msiexec.exe -ArgumentList '/i C:\AWSCloudHSMJCE-latest.msi /quiet /norestart /log C:\client-install.txt' -Wait
   ```

------

1. SDK Klien Bootstrap 5. Untuk informasi selengkapnya tentang bootstrapping, lihat [Bootstrap Klien SDK](cluster-connect.md#connect-how-to).

1. Temukan file penyedia JCE berikut:

------
#### [ Linux ]
   + `/opt/cloudhsm/java/cloudhsm-<version>.jar`
   + `/opt/cloudhsm/bin/configure-jce`
   + `/opt/cloudhsm/bin/jce-info`

------
#### [ Windows ]
   + `C:\Program Files\Amazon\CloudHSM\java\cloudhsm-<version>.jar>`
   + `C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe`
   + `C:\Program Files\Amazon\CloudHSM\bin\jce_info.exe`

------

## Langkah 2: Berikan kredensil ke penyedia JCE
<a name="java-library-credentials_5"></a>

Sebelum aplikasi Java Anda dapat menggunakan HSM, HSM harus terlebih dahulu mengotentikasi aplikasi. HSMs mengautentikasi menggunakan login eksplisit atau metode login implisit.

**Login eksplisit** - Metode ini memungkinkan Anda memberikan AWS CloudHSM kredensil langsung dalam aplikasi. Ini menggunakan metode dari [https://docs.oracle.com/javase/8/docs/api/java/security/AuthProvider.html](https://docs.oracle.com/javase/8/docs/api/java/security/AuthProvider.html), di mana Anda melewati nama pengguna dan kata sandi CU dalam pola pin. Untuk informasi selengkapnya, lihat [Login ke contoh kode HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java).

**Login implisit** — Metode ini memungkinkan Anda mengatur AWS CloudHSM kredensil baik dalam file properti baru, properti sistem, atau sebagai variabel lingkungan.
+ **Properti sistem** — Set kredensial melalui properti sistem saat menjalankan aplikasi Anda. Contoh berikut menunjukkan dua cara berbeda yang dapat dilakukan:

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

  ```
  $ java -DHSM_USER=<HSM user name> -DHSM_PASSWORD=<password>
  ```

  ```
  System.setProperty("HSM_USER","<HSM user name>");
  System.setProperty("HSM_PASSWORD","<password>");
  ```

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

  ```
  PS C:\> java -DHSM_USER=<HSM user name> -DHSM_PASSWORD=<password>
  ```

  ```
  System.setProperty("HSM_USER","<HSM user name>");
  System.setProperty("HSM_PASSWORD","<password>");
  ```

------
+ **Variabel lingkungan** — Set kredensial sebagai variabel lingkungan.
**catatan**  
Saat mengatur variabel lingkungan, Anda harus melarikan diri dari karakter khusus apa pun yang dapat ditafsirkan oleh shell Anda.

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

  ```
  $ export HSM_USER=<HSM user name>
  $ export HSM_PASSWORD=<password>
  ```

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

  ```
  PS C:\> $Env:HSM_USER="<HSM user name>"
  PS C:\> $Env:HSM_PASSWORD="<password>"
  ```

------

Kredensial mungkin tidak tersedia jika aplikasi tidak menyediakannya atau jika Anda mencoba operasi sebelum HSM mengautentikasi sesi. Dalam kasus tersebut, pustaka perangkat lunak CloudHSM untuk Java mencari kredensialnya dengan urutan sebagai berikut:

1. Properti sistem

1. Variabel-variabel lingkungan

# Tipe kunci yang didukung untuk penyedia JCE untuk AWS CloudHSM Client SDK 5
<a name="java-lib-keys_5"></a>

Perpustakaan AWS CloudHSM perangkat lunak untuk Java memungkinkan Anda untuk menghasilkan jenis kunci berikut.


****  

| Tipe Kunci | Deskripsi | 
| --- | --- | 
| AES | Hasilkan kunci AES 128, 192, dan 256-bit.  | 
| Tiga DES (3DES, DESede) | Hasilkan Kunci Triple DES 192-bit. [*](#java-lib-keys_5-note-1) | 
| EC | Hasilkan pasangan kunci EC - kurva NIST secp224r1 (P-224), secp256r1 (P-256), secp256k1 (Blockchain), secp384r1 (P-384), dan secp521r1 (P-521). | 
| GENERIC\$1SECRET | Hasilkan 1 hingga 800 byte rahasia generik. | 
| HMAC | Dukungan hash untuk SHA1,, SHA224, SHA256 SHA384, SHA512. | 
| RSA | Hasilkan 2048-bit sampai 4096-bit kunci RSA, dengan penambahan 256 bit. | 

\$1 Sesuai dengan panduan NIST, ini dilarang untuk cluster dalam mode FIPS setelah 2023. Untuk cluster dalam mode non-FIPS, masih diperbolehkan setelah 2023. Lihat [Kepatuhan FIPS 140: Penutupan Mekanisme 2024](compliance-dep-notif.md#compliance-dep-notif-1) untuk rincian selengkapnya.

# Dasar-dasar manajemen utama di penyedia JCE untuk AWS CloudHSM Client SDK 5
<a name="java-library-key-basics_5"></a>

Dasar-dasar manajemen kunci dalam penyedia JCE melibatkan mengimpor kunci, mengekspor kunci, memuat kunci dengan pegangan, atau menghapus kunci. Untuk informasi lebih lanjut tentang mengelola kunci, lihat sampel kode [Kelola kunci](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java).

Anda juga dapat menemukan lebih banyak contoh kode penyedia JCE di [Sampel Kode](java-samples.md).

# Mekanisme yang didukung untuk penyedia JCE untuk AWS CloudHSM Client SDK 5
<a name="java-lib-supported_5"></a>

Topik ini memberikan informasi tentang mekanisme yang didukung untuk penyedia JCE dengan AWS CloudHSM Client SDK 5. Untuk informasi tentang antarmuka Java Cryptography Architecture (JCA) dan kelas mesin yang didukung oleh AWS CloudHSM, lihat topik berikut. 

**Topics**
+ [Menghasilkan fungsi key dan key pair](#java-gen-key-pairs-5)
+ [Fungsi cipher](#java-ciphers_5)
+ [Tanda tangani dan verifikasi fungsi](#java-sign-verify_5)
+ [Fungsi mencerna](#java-digests_5)
+ [Fungsi kode otentikasi pesan berbasis hash (HMAC)](#java-mac_5)
+ [Fungsi kode otentikasi pesan berbasis sandi (CMAC)](#java-cmac_5)
+ [Fungsi Perjanjian Utama](#java-key-derivation_5)
+ [Konversi kunci ke spesifikasi utama menggunakan pabrik-pabrik utama](#java-key-factories)
+ [Anotasi mekanisme](#w2aac25c21c25c15c23)

## Menghasilkan fungsi key dan key pair
<a name="java-gen-key-pairs-5"></a>

Pustaka AWS CloudHSM perangkat lunak untuk Java memungkinkan Anda untuk menggunakan operasi berikut untuk menghasilkan fungsi key dan key pair.
+ `RSA`
+ `EC`
+ `AES`
+ `DESede (Triple DES)`lihat catatan [1](#java-gen-key-pairs-5-note-1)
+ `GenericSecret`

## Fungsi cipher
<a name="java-ciphers_5"></a>

Pustaka AWS CloudHSM perangkat lunak untuk Java mendukung kombinasi algoritma, mode, dan padding berikut.


| Algoritme | Mode | Bantalan | Catatan | 
| --- | --- | --- | --- | 
| AES | CBC |  `AES/CBC/NoPadding` `AES/CBC/PKCS5Padding`  |  Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`. Menerapkan `Cipher.UNWRAP_MODE for AES/CBC NoPadding`  | 
| AES | ECB |  `AES/ECB/PKCS5Padding` `AES/ECB/NoPadding`  | Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`.  | 
| AES | CTR |  `AES/CTR/NoPadding`  |  Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`.  | 
| AES | GCM | `AES/GCM/NoPadding` | Menerapkan `Cipher.WRAP_MODE`, `Cipher.UNWRAP_MODE`, `Cipher.ENCRYPT_MODE`, dan `Cipher.DECRYPT_MODE`.Ketika melakukan enkripsi AES-GCM, HSM mengabaikan vektor inisialisasi (IV) dalam permintaan dan menggunakan IV yang dihasilkannya. Saat operasi selesai, Anda harus memanggil `Cipher.getIV()` untuk mendapatkan IV. | 
| AESWrap | ECB |  `AESWrap/ECB/NoPadding` `AESWrap/ECB/PKCS5Padding` `AESWrap/ECB/ZeroPadding`  | Menerapkan `Cipher.WRAP_MODE` dan `Cipher.UNWRAP_MODE`.  | 
| DESede (Tiga DES) | CBC |  `DESede/CBC/PKCS5Padding` `DESede/CBC/NoPadding`  |  Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`. Lihat catatan [1](#java-gen-key-pairs-5-note-1) di bawah untuk perubahan yang akan datang.  | 
| DESede (Tiga DES) | ECB |  `DESede/ECB/NoPadding` `DESede/ECB/PKCS5Padding`  | Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`. Lihat catatan [1](#java-gen-key-pairs-5-note-1) di bawah untuk perubahan yang akan datang.  | 
| RSA | ECB | `RSA/ECB/PKCS1Padding`**lihat catatan [1](#java-gen-key-pairs-5-note-1)** `RSA/ECB/OAEPPadding` `RSA/ECB/OAEPWithSHA-1ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-224ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-256ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-384ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-512ANDMGF1Padding`  |  Menerapkan `Cipher.WRAP_MODE`, `Cipher.UNWRAP_MODE`, `Cipher.ENCRYPT_MODE`, dan `Cipher.DECRYPT_MODE`.  | 
| RSA | ECB | `RSA/ECB/NoPadding` |  Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`.  | 
| RSAAESWrap | ECB |  `RSAAESWrap/ECB/OAEPPadding` `RSAAESWrap/ECB/OAEPWithSHA-1ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-224ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-256ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-384ANDMGF1Padding` `RSAAESWrap/ECB/OAEPWithSHA-512ANDMGF1Padding`  | Menerapkan `Cipher.WRAP_MODE` dan `Cipher.UNWRAP_MODE`.  | 

## Tanda tangani dan verifikasi fungsi
<a name="java-sign-verify_5"></a>

Pustaka AWS CloudHSM perangkat lunak untuk Java mendukung jenis tanda tangan dan verifikasi berikut. Dengan Client SDK 5 dan algoritma tanda tangan dengan hashing, data di-hash secara lokal dalam perangkat lunak sebelum dikirim ke HSM untuk tanda tangan/verifikasi. Ini berarti tidak ada batasan ukuran data yang dapat di-hash oleh SDK.

**Jenis Tanda Tangan RSA**
+ `NONEwithRSA`
+ `RSASSA-PSS`
+ `SHA1withRSA`
+ `SHA1withRSA/PSS`
+ `SHA1withRSAandMGF1`
+ `SHA224withRSA`
+ `SHA224withRSAandMGF1`
+ `SHA224withRSA/PSS`
+ `SHA256withRSA`
+ `SHA256withRSAandMGF1`
+ `SHA256withRSA/PSS`
+ `SHA384withRSA`
+ `SHA384withRSAandMGF1`
+ `SHA384withRSA/PSS`
+ `SHA512withRSA`
+ `SHA512withRSAandMGF1`
+ `SHA512withRSA/PSS`

**Jenis Tanda Tangan ECDSA**
+ `NONEwithECDSA`
+ `SHA1withECDSA`
+ `SHA224withECDSA`
+ `SHA256withECDSA`
+ `SHA384withECDSA`
+ `SHA512withECDSA`

## Fungsi mencerna
<a name="java-digests_5"></a>

Pustaka AWS CloudHSM perangkat lunak untuk Java mendukung intisari pesan berikut. Dengan Client SDK 5, data di-hash secara lokal dalam perangkat lunak. Ini berarti tidak ada batasan ukuran data yang dapat di-hash oleh SDK.
+ `SHA-1`
+ `SHA-224`
+ `SHA-256`
+ `SHA-384`
+ `SHA-512`

## Fungsi kode otentikasi pesan berbasis hash (HMAC)
<a name="java-mac_5"></a>

Pustaka AWS CloudHSM perangkat lunak untuk Java mendukung algoritma HMAC berikut.
+ `HmacSHA1`(Ukuran data maksimum dalam byte: 16288)
+ `HmacSHA224`(Ukuran data maksimum dalam byte: 16256)
+ `HmacSHA256`(Ukuran data maksimum dalam byte: 16288)
+ `HmacSHA384`(Ukuran data maksimum dalam byte: 16224)
+ `HmacSHA512`(Ukuran data maksimum dalam byte: 16224)

## Fungsi kode otentikasi pesan berbasis sandi (CMAC)
<a name="java-cmac_5"></a>

CMACs (Kode otentikasi pesan berbasis sandi) buat kode otentikasi pesan (MACs) menggunakan sandi blok dan kunci rahasia. Mereka berbeda dari HMACs dalam bahwa mereka menggunakan metode kunci simetris blok untuk MACs bukan metode hashing.

Pustaka AWS CloudHSM perangkat lunak untuk Java mendukung algoritma CMAC berikut.
+ `AESCMAC`

## Fungsi Perjanjian Utama
<a name="java-key-derivation_5"></a>

Pustaka AWS CloudHSM perangkat lunak untuk Java mendukung ECDH dengan Key Derivation Functions (KDF). Jenis KDF berikut didukung:
+ `ECDHwithX963SHA1KDF`Mendukung algoritma X9.63 KDF SHA1 [2](#kdf2)
+ `ECDHwithX963SHA224KDF`Mendukung algoritma X9.63 KDF SHA224 [2](#kdf2)
+ `ECDHwithX963SHA256KDF`Mendukung algoritma X9.63 KDF SHA256 [2](#kdf2)
+ `ECDHwithX963SHA384KDF`Mendukung algoritma X9.63 KDF SHA384 [2](#kdf2)
+ `ECDHwithX963SHA512KDF`Mendukung algoritma X9.63 KDF SHA512 [2](#kdf2)

## Konversi kunci ke spesifikasi utama menggunakan pabrik-pabrik utama
<a name="java-key-factories"></a>

Anda dapat menggunakan pabrik-pabrik utama untuk mengonversi kunci ke spesifikasi utama. AWS CloudHSM memiliki dua jenis pabrik utama untuk JCE:

**SecretKeyFactory:** Digunakan untuk mengimpor atau menurunkan kunci simetris. Dengan menggunakan SecretKeyFactory, Anda dapat meneruskan Kunci yang didukung atau didukung KeySpec untuk mengimpor atau memperoleh kunci simetris. AWS CloudHSM Berikut ini adalah spesifikasi yang didukung untuk KeyFactory:
+ `generateSecret`Metode untuk SecretKeyFactory [KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html)kelas berikut didukung:
  + **KeyAttributesMap**dapat digunakan untuk mengimpor byte kunci dengan atribut tambahan sebagai CloudHSM Key. Contohnya dapat ditemukan di sini di [sini](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java).
  + **[SecretKeySpec](https://docs.oracle.com/javase/8/docs/api/javax/crypto/spec/SecretKeySpec.html)**dapat digunakan untuk mengimpor spesifikasi kunci simetris sebagai Kunci CloudHSM.
  + **AesCmacKdfParameterSpec**dapat digunakan untuk menurunkan kunci simetris menggunakan CloudHSM AES Key lain.

**catatan**  
SecretKeyFactory`translateKey`Metode ini mengambil kunci apa pun yang mengimplementasikan antarmuka [kunci](https://docs.oracle.com/javase/8/docs/api/java/security/Key.html).

**KeyFactory:** Digunakan untuk mengimpor kunci asimetris. Dengan menggunakan KeyFactory, Anda dapat meneruskan Kunci yang didukung atau didukung KeySpec untuk mengimpor kunci AWS CloudHSM asimetris. Untuk informasi lebih lanjut, lihat sumber daya berikut:
+ `generatePublic`Metode KeyFactory For, [KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html)kelas berikut didukung:
+  KeyAttributesMap CloudHSM untuk RSA dan EC, termasuk: KeyTypes
  +  KeyAttributesMap CloudHSM untuk RSA dan EC publik. KeyTypes Contoh dapat ditemukan [di sini](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)
  + [X509 EncodedKeySpec untuk Kunci](https://docs.oracle.com/javase/8/docs/api/java/security/spec/X509EncodedKeySpec.html) Publik RSA dan EC
  + [RSAPublicKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPublicKeySpec.html)untuk Kunci Publik RSA
  + [ECPublicKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/ECPublicKeySpec.html)untuk Kunci Publik EC
+ `generatePrivate`Metode KeyFactory For, [KeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/KeySpec.html)kelas berikut didukung:
+  KeyAttributesMap CloudHSM untuk RSA dan EC, termasuk: KeyTypes
  +  KeyAttributesMap CloudHSM untuk RSA dan EC publik. KeyTypes Contoh dapat ditemukan [di sini](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)
  + [PKCS8EncodedKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/PKCS8EncodedKeySpec.html)untuk EC dan RSA Private Key
  + [RSAPrivateCrtKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/RSAPrivateCrtKeySpec.html)untuk Kunci Pribadi RSA
  + [ECPrivateKeySpec](https://docs.oracle.com/javase/8/docs/api/java/security/spec/ECPrivateKeySpec.html)untuk Kunci Pribadi EC

`translateKey`Metode KeyFactory For, dibutuhkan setiap Key yang mengimplementasikan [Key Interface](https://docs.oracle.com/javase/8/docs/api/java/security/Key.html).

## Anotasi mekanisme
<a name="w2aac25c21c25c15c23"></a>

[1] Sesuai dengan panduan NIST, ini tidak diizinkan untuk cluster dalam mode FIPS setelah 2023. Untuk cluster dalam mode non-FIPS, masih diperbolehkan setelah 2023. Lihat [Kepatuhan FIPS 140: Penutupan Mekanisme 2024](compliance-dep-notif.md#compliance-dep-notif-1) untuk detail.

[2] Fungsi derivasi kunci (KDFs) ditentukan dalam [Publikasi Khusus NIST 800-56A](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf) Revisi 3.

# Atribut kunci Java yang didukung untuk AWS CloudHSM Klien SDK 5
<a name="java-lib-attributes_5"></a>

Topik ini memberikan informasi tentang atribut kunci Java yang didukung untuk AWS CloudHSM Client SDK 5. Topik ini menjelaskan cara menggunakan ekstensi berpemilik untuk penyedia JCE untuk menetapkan atribut kunci. Gunakan ekstensi ini untuk mengatur atribut kunci yang didukung dan nilai-nilainya selama operasi ini:
+ Pembuatan kunci
+ Impor kunci

Untuk contoh cara menggunakan atribut kunci, lihat[Contoh kode untuk pustaka AWS CloudHSM perangkat lunak untuk Java untuk Klien SDK 5](java-samples.md).

**Topics**
+ [Memahami atribut](#java-understanding-attributes_5)
+ [Atribut yang didukung](#java-attributes_5)
+ [Menyetel atribut untuk kunci](#java-setting-attributes_5)

## Memahami atribut
<a name="java-understanding-attributes_5"></a>

Gunakan atribut kunci untuk menentukan tindakan apa yang diizinkan pada objek utama, termasuk kunci publik, pribadi, atau rahasia. Atribut dan nilai kunci didefinisikan selama operasi pembuatan objek utama. 

Ekstensi Kriptografi Java (JCE) tidak menentukan bagaimana Anda harus menetapkan nilai pada atribut kunci, sehingga sebagian besar tindakan diizinkan secara default. Sebaliknya, PKCS \$1 11 standar menentukan satu set lengkap atribut dengan default lebih ketat. Dimulai dengan penyedia JCE 3.1, AWS CloudHSM menyediakan ekstensi eksklusif yang memungkinkan Anda menetapkan nilai yang lebih ketat untuk atribut yang umum digunakan. 

## Atribut yang didukung
<a name="java-attributes_5"></a>

Anda dapat mengatur nilai untuk atribut yang tercantum dalam tabel berikut. Sebagai praktik terbaik, tetapkan hanya nilai untuk atribut yang ingin Anda buat ketat. Jika Anda tidak menentukan nilai, AWS CloudHSM menggunakan nilai default yang ditentukan dalam tabel di bawah ini. Sel kosong di kolom Nilai Default menunjukkan bahwa tidak ada nilai default tertentu yang ditetapkan untuk atribut.


****  

| Atribut | Nilai Default | Catatan |  | Kunci simetris | Kunci Publik dalam Pasangan Kunci | Kunci Privat dalam Pasangan Kunci |  | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| DECRYPT | TRUE |  | TRUE | Benar menunjukkan Anda dapat menggunakan kunci untuk mendekripsi penyangga apa pun. Anda biasanya menyetel ini ke FALSE untuk kunci yang WRAPNYA disetel ke true.  | 
| DERIVE |  |  |  | Memungkinkan kunci untuk digunakan untuk mendapatkan kunci lainnya. | 
| ENCRYPT | TRUE | TRUE |  | Benar menunjukkan Anda dapat menggunakan kunci untuk mengenkripsi penyangga apa pun. | 
| EXTRACTABLE | TRUE |  | TRUE | Benar menunjukkan Anda dapat mengekspor kunci ini keluar dari HSM. | 
| ID |  |  |  | Nilai yang ditentukan pengguna yang digunakan untuk mengidentifikasi kunci. | 
| KEY\$1TYPE |  |  |  | Digunakan untuk mengidentifikasi jenis kunci (AES,, rahasia generik DESede, EC, atau RSA). | 
| LABEL |   |  |  | String yang ditentukan pengguna memungkinkan Anda mengidentifikasi kunci dengan mudah pada HSM Anda. Untuk mengikuti praktik terbaik, gunakan label unik untuk setiap tombol sehingga lebih mudah ditemukan nanti. | 
| LOCAL |  |  |  | Menunjukkan kunci yang dihasilkan oleh HSM. | 
| OBJECT\$1CLASS |  |  |  | Digunakan untuk mengidentifikasi Object Class dari kunci (SecretKey, PublicKey atau PrivateKey). | 
| PRIVATE | TRUE | TRUE | TRUE | Benar menunjukkan bahwa pengguna tidak dapat mengakses kunci sampai pengguna diautentikasi. Untuk kejelasan, pengguna tidak dapat mengakses kunci apa pun AWS CloudHSM sampai mereka diautentikasi, bahkan jika atribut ini disetel ke FALSE. | 
| SIGN | TRUE |  | TRUE | Benar menunjukkan Anda dapat menggunakan kunci untuk menandatangani digest pesan. Hal ini umumnya diatur ke FALSE untuk kunci publik dan kunci privat yang telah Anda arsipkan. | 
| SIZE |  |  |  | Atribut yang mendefinisikan ukuran kunci. Untuk detail selengkapnya tentang ukuran kunci yang didukung, lihat [Mekanisme yang didukung untuk SDK Klien 5](https://docs.aws.amazon.com/cloudhsm/latest/userguide/java-lib-supported_5.html#java-keys_5). | 
| TOKEN | FALSE | FALSE | FALSE |  Kunci permanen yang direplikasi HSMs di semua klaster dan disertakan dalam cadangan. TOKEN = FALSE menyiratkan kunci sementara yang secara otomatis dihapus ketika koneksi ke HSM rusak atau keluar.  | 
| UNWRAP | TRUE |  | TRUE | Benar menunjukkan Anda dapat menggunakan kunci untuk membungkus kunci lain. | 
| VERIFY | TRUE | TRUE |  | Benar menunjukkan Anda dapat menggunakan kunci untuk menandatangani digest pesan. Hal ini umumnya diatur ke FALSE untuk kunci privat. | 
| WRAP | TRUE | TRUE |  | Benar menunjukkan Anda dapat menggunakan kunci untuk membungkus kunci lain. Anda biasanya akan mengatur ini ke FALSE untuk kunci privat. | 
| WRAP\$1WITH\$1TRUSTED | FALSE |  | FALSE | True menunjukkan kunci hanya dapat dibungkus dan dibuka dengan kunci yang memiliki TRUSTED atribut disetel ke true. Setelah kunci WRAP\$1WITH\$1TRUSTED disetel ke true, atribut itu hanya-baca dan tidak dapat disetel ke false. Untuk membaca tentang pembungkus kepercayaan, lihat [Menggunakan kunci tepercaya untuk mengontrol pembukaan kunci](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_using_trusted_keys_control_key_wrap.html). | 

**catatan**  
Anda mendapatkan dukungan yang lebih luas untuk atribut di pustaka PKCS \$111. Untuk informasi lebih lanjut, lihat [Atribut PKCS \$111 yang Didukung](pkcs11-attributes.md).

## Menyetel atribut untuk kunci
<a name="java-setting-attributes_5"></a>

`KeyAttributesMap`adalah objek seperti Peta Java, yang dapat Anda gunakan untuk mengatur nilai atribut untuk objek kunci. Metode untuk fungsi `KeyAttributesMap` yang mirip dengan metode yang digunakan untuk manipulasi peta Java. 

Untuk mengatur nilai kustom pada atribut, Anda memiliki dua opsi:
+ Gunakan metode yang tercantum dalam tabel berikut
+ Gunakan pola pembangun yang ditunjukkan kemudian dalam dokumen ini

Atribut peta objek mendukung metode berikut untuk mengatur atribut:


****  

| Operasi | Nilai Pengembalian | Metode `KeyAttributesMap` | 
| --- | --- | --- | 
| Dapatkan nilai atribut kunci untuk kunci yang ada | Obyek (berisi nilai) atau nol |  **get**(keyAttribute)  | 
| Isi nilai satu atribut kunci  | Nilai sebelumnya terkait dengan atribut kunci, atau nol jika tidak ada pemetaan untuk atribut kunci |  **put**(keyAttribute, value)  | 
| Isi nilai untuk beberapa atribut kunci | N/A |  **putAll** () keyAttributesMap  | 
| Hapus pasangan nilai kunci dari peta atribut |  Nilai sebelumnya terkait dengan atribut kunci, atau *nol* jika tidak ada pemetaan untuk atribut kunci  |  **remove**(keyAttribute)  | 

**catatan**  
Setiap atribut yang tidak secara eksplisit Anda tentukan diatur ke default yang tercantum dalam tabel sebelumnya di [Atribut yang didukung](#java-attributes_5). 

### Menetapkan atribut untuk key pair
<a name="java-setting-attributes-key-pair"></a>

Gunakan kelas Java `KeyPairAttributesMap` untuk menangani atribut kunci untuk pasangan kunci. `KeyPairAttributesMap` merangkum dua objek `KeyAttributesMap`; satu untuk kunci publik dan satu untuk kunci privat.

Untuk mengatur atribut individu untuk kunci publik dan kunci privat secara terpisah, Anda dapat menggunakan metode `put()` pada objek peta `KeyAttributes` yang terkait untuk kunci itu. Gunakan metode `getPublic()` untuk mengambil peta atribut untuk kunci publik, dan gunakan `getPrivate()` untuk mengambil peta atribut untuk kunci privat. Isi nilai dari beberapa atribut kunci bersama-sama untuk kedua pasangan kunci publik dan privat menggunakan `putAll()` dengan peta atribut pasangan kunci sebagai argumen.

# Contoh kode untuk pustaka AWS CloudHSM perangkat lunak untuk Java untuk Klien SDK 5
<a name="java-samples"></a>

Topik ini menyediakan sumber daya dan informasi tentang contoh kode Java untuk AWS CloudHSM Client SDK 5.

## Prasyarat
<a name="java-samples-prereqs_5"></a>

 Sebelum menjalankan sampel, Anda harus mengatur lingkungan Anda:
+ Instal dan konfigurasikan penyedia [Java Cryptographic Extension (JCE)](java-library-install_5.md#install-java-library_5). 
+ Siapkan [nama pengguna HSM dan kata sandi](manage-hsm-users.md) yang valid. Izin pengguna kriptografi (CU) cukup untuk tugas-tugas ini. Aplikasi Anda menggunakan kredensial ini untuk login ke HSM di setiap contoh.
+ Tentukan cara memberikan kredensial ke [penyedia JCE](java-library-install_5.md#java-library-credentials_5).

## Sampel Kode
<a name="java-samples-code_5"></a>

Sampel kode berikut menunjukkan cara menggunakan [penyedia JCE AWS CloudHSM](java-library.md) untuk melakukan tugas dasar. Lebih banyak contoh kode tersedia di [GitHub](https://github.com/aws-samples/aws-cloudhsm-jce-examples/tree/sdk5).
+ [Masuk ke HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java)
+ [Kelola kunci](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)
+ [Hasilkan Kunci Simetris](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/SymmetricKeys.java)
+ [Hasilkan Kunci Asimetris](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AsymmetricKeys.java)
+ [Enkripsi dan dekripsi dengan AES-GCM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AESGCMEncryptDecryptRunner.java)
+ [Enkripsi dan dekripsi dengan AES-CTR](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/AESCTREncryptDecryptRunner.java)
+ [Enkripsi dan dekripsi dengan DESede](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/DESedeECBEncryptDecryptRunner.java) -ECB lihat catatan [1](#java-samples-code-5-note-1)
+ [Masuk dan Verifikasi dengan Kunci RSA](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/RSAOperationsRunner.java)
+ [Masuk dan Verifikasi dengan Kunci EC](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/ECOperationsRunner.java)
+ [Gunakan atribut kunci yang didukung](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyAttributesRunner.java)
+ [Gunakan toko kunci CloudHSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/KeyStoreExampleRunner.java)

[1] Sesuai dengan panduan NIST, ini tidak diizinkan untuk cluster dalam mode FIPS setelah 2023. Untuk cluster dalam mode non-FIPS, masih diperbolehkan setelah 2023. Lihat [Kepatuhan FIPS 140: Penutupan Mekanisme 2024](compliance-dep-notif.md#compliance-dep-notif-1) untuk rincian selengkapnya.

# AWS CloudHSM JCE penyedia Javadocs
<a name="java-javadocs_5"></a>

Gunakan penyedia JCE Javadocs untuk mendapatkan informasi penggunaan tentang jenis dan metode Java yang ditentukan dalam AWS CloudHSM JCE SDK. Untuk mengunduh Javadocs terbaru AWS CloudHSM, lihat [AWS CloudHSM rilis SDK Klien terbaru](latest-releases.md) bagian di halaman Unduhan.

Anda dapat mengimpor Javadocs ke lingkungan pengembangan terintegrasi (IDE) atau melihatnya di browser web.

# AWS CloudHSM KeyStore Kelas Java untuk Client SDK 5
<a name="alternative-keystore_5"></a>

 AWS CloudHSM `KeyStore`Kelas ini menyediakan toko PKCS12 kunci tujuan khusus. Penyimpanan kunci ini dapat menyimpan sertifikat bersama dengan data kunci Anda dan menghubungkannya dengan data kunci yang disimpan di AWS CloudHSM. AWS CloudHSM `KeyStore`Kelas mengimplementasikan `KeyStore` Service Provider Interface (SPI) dari Java Cryptography Extension (JCE). Untuk informasi selengkapnya tentang penggunaan`KeyStore`, lihat [Kelas KeyStore](https://devdocs.io/openjdk~8/java/security/keystore).

**catatan**  
Karena sertifikat adalah informasi publik, dan untuk memaksimalkan kapasitas penyimpanan untuk kunci kriptografi, AWS CloudHSM tidak mendukung penyimpanan sertifikat. HSMs

## Pilih penyimpanan kunci yang sesuai untuk AWS CloudHSM Client SDK 5
<a name="choosing_keystore_5"></a>

Penyedia AWS CloudHSM Java Cryptographic Extension (JCE) menawarkan AWS CloudHSM tujuan khusus. KeyStore AWS CloudHSM `KeyStore`Kelas ini mendukung pembongkaran operasi kunci ke HSM, penyimpanan lokal sertifikat dan operasi berbasis sertifikat.

Muat CloudHSM tujuan khusus sebagai berikut: KeyStore 

```
KeyStore ks = KeyStore.getInstance("CloudHSM")
```

## Inisialisasi SDK AWS CloudHSM KeyStore Klien 5
<a name="initialize_cloudhsm_keystore_5"></a>

Masuk ke cara AWS CloudHSM KeyStore yang sama seperti Anda masuk ke penyedia JCE. Anda dapat menggunakan variabel lingkungan atau file properti sistem, dan Anda harus masuk sebelum mulai menggunakan CloudHSM KeyStore. Untuk contoh masuk ke HSM menggunakan penyedia JCE, lihat [Masuk ke HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/sdk5/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java).

Jika diinginkan, Anda dapat menentukan kata sandi untuk mengenkripsi PKCS12 file lokal yang menyimpan data penyimpanan kunci. Saat Anda membuat AWS CloudHSM Keystore, Anda mengatur kata sandi dan memberikannya saat menggunakan metode pemuatan, atur, dan dapatkan.

Buat instance objek CloudHSM baru sebagai berikut: KeyStore 

```
ks.load(null, null);
```

Tulis data penyimpanan kunci ke file menggunakan metode `store`. Sejak saat itu, Anda dapat memuat penyimpanan kunci yang ada menggunakan metode `load` dengan file sumber dan kata sandi sebagai berikut: 

```
ks.load(inputStream, password);
```

## Gunakan AWS CloudHSM KeyStore atau AWS CloudHSM Klien SDK 5
<a name="using_cloudhsm_keystore_5"></a>

AWS CloudHSM KeyStore sesuai dengan KeyStore spesifikasi JCE [Class](https://devdocs.io/openjdk~8/java/security/keystore) dan menyediakan fungsi-fungsi berikut.
+ `load`

  Memuat penyimpanan kunci dari pengaliran input yang diberikan. Jika kata sandi ditetapkan saat menyimpan penyimpanan kunci, kata sandi yang sama ini harus disediakan agar pemuatan berhasil. Atur kedua parameter ke null untuk menginisialisasi sebuah penyimpanan kunci kosong baru.

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  ks.load(inputStream, password);
  ```
+ `aliases`

  Mengembalikan penghitungan nama alias dari semua entri dalam contoh instans penyimpanan kunci yang diberikan. Hasil termasuk objek yang disimpan secara lokal dalam PKCS12 file dan objek yang tinggal di HSM. 

  **Contoh kode:**

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  for(Enumeration<String> entry = ks.aliases(); entry.hasMoreElements();) {    
      String label = entry.nextElement();    
      System.out.println(label);
  }
  ```
+ `containsalias`

  Mengembalikan nilai true jika penyimpanan kunci memiliki akses ke setidaknya satu objek dengan alias yang ditentukan. Toko kunci memeriksa objek yang disimpan secara lokal dalam PKCS12 file dan objek yang tinggal di HSM.
+ `deleteEntry`

  Menghapus entri sertifikat dari PKCS12 file lokal. Menghapus data kunci yang disimpan dalam HSM tidak didukung menggunakan file. AWS CloudHSM KeyStore Anda dapat menghapus kunci menggunakan `destroy` metode antarmuka [Destroyable](https://devdocs.io/openjdk~8/javax/security/auth/destroyable#destroy--).

  ```
  ((Destroyable) key).destroy();
  ```
+ `getCertificate`

  Mengembalikan sertifikat yang terkait dengan alias jika tersedia. Jika alias tidak ada atau mereferensikan objek yang bukan sertifikat, fungsi mengembalikan NULL. 

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  Certificate cert = ks.getCertificate(alias);
  ```
+ `getCertificateAlias`

  Mengembalikan nama (alias) dari entri penyimpanan kunci pertama yang datanya cocok dengan sertifikat yang diberikan. 

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  String alias = ks.getCertificateAlias(cert);
  ```
+ `getCertificateChain`

  Mengembalikan rantai sertifikat yang terkait dengan alias yang diberikan. Jika alias tidak ada atau mereferensikan objek yang bukan sertifikat, fungsi mengembalikan NULL. 
+ `getCreationDate`

  Mengembalikan tanggal pembuatan entri yang diidentifikasi oleh alias yang diberikan. Jika tanggal pembuatan tidak tersedia, fungsi mengembalikan tanggal saat sertifikat menjadi valid.
+ `getKey`

  GetKey diteruskan ke HSM dan mengembalikan objek kunci yang sesuai dengan label yang diberikan. Seperti yang `getKey` secara langsung menanyakan HSM, itu dapat digunakan untuk kunci apa pun pada HSM terlepas dari apakah itu dihasilkan oleh. KeyStore 

  ```
  Key key = ks.getKey(keyLabel, null);
  ```
+ `isCertificateEntry`

  Memeriksa apakah entri dengan alias yang diberikan merupakan entri sertifikat. 
+ `isKeyEntry`

  Memeriksa apakah entri dengan alias yang diberikan merupakan entri kunci. Tindakan mencari PKCS12 file dan HSM untuk alias. 
+ `setCertificateEntry`

  Menetapkan sertifikat yang diberikan untuk alias yang diberikan. Jika alias yang diberikan sudah digunakan untuk me ngidentifikasi kunci atau sertifikat,`KeyStoreException`dikeluarkan. Anda dapat menggunakan kode JCE untuk mendapatkan objek kunci dan kemudian menggunakan KeyStore `SetKeyEntry` metode untuk mengaitkan sertifikat ke kunci.
+ `setKeyEntry` dengan `byte[]` kunci

  **API ini saat ini tidak didukung dengan Client SDK 5.**
+ `setKeyEntry` dengan objek `Key`

  Menetapkan kunci yang diberikan untuk alias yang diberikan dan menyimpannya di dalam HSM. Jika kunci belum ada di dalam HSM, itu akan diimpor ke HSM sebagai kunci sesi yang dapat diekstraksi.

  Jika objek `Key` adalah tipe `PrivateKey`, objek harus disertai dengan rantai sertifikat yang sesuai. 

  Jika alias sudah ada, panggilan `SetKeyEntry` mengeluarkan `KeyStoreException` dan mencegah kunci ditimpa. Jika kunci harus ditimpa, gunakan KMU atau JCE untuk tujuan itu. 
+ `engineSize`

  Mengembalikan jumlah entri dalam penyimpanan kunci.
+ `store`

  Menyimpan penyimpanan kunci ke aliran output yang diberikan sebagai PKCS12 file dan mengamankannya dengan kata sandi yang diberikan. Selain itu, semua kunci dimuat tetap ada (yang ditetapkan menggunakan panggilan`setKey`).

# Konfigurasi lanjutan untuk AWS CloudHSM JCE untuk Client SDK 5
<a name="java-lib-configs"></a>

Penyedia AWS CloudHSM JCE menyertakan konfigurasi lanjutan berikut, yang bukan merupakan bagian dari konfigurasi umum yang digunakan sebagian besar pelanggan.
+ [Menghubungkan ke beberapa cluster](java-lib-configs-multi.md)
+ [Ekstraksi kunci menggunakan JCE](java-lib-configs-getencoded.md)
+ [Coba lagi konfigurasi untuk JCE](java-lib-configs-retry.md)

# Menghubungkan ke beberapa AWS CloudHSM cluster dengan penyedia JCE
<a name="java-lib-configs-multi"></a>

Konfigurasi ini memungkinkan instance klien tunggal untuk berkomunikasi ke beberapa AWS CloudHSM cluster. Dibandingkan dengan memiliki satu instance yang hanya berkomunikasi dengan satu cluster, ini bisa menjadi fitur penghematan biaya untuk beberapa kasus penggunaan. `CloudHsmProvider`Kelas ini adalah AWS CloudHSM implementasi dari [kelas Provider Java Security](https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html). Setiap instance dari kelas ini mewakili koneksi ke seluruh AWS CloudHSM cluster Anda. Anda membuat instance kelas ini dan menambahkannya ke daftar penyedia Java Security sehingga Anda dapat berinteraksi dengannya menggunakan kelas JCE standar.

Contoh berikut membuat instance class ini dan menambahkannya ke daftar penyedia Java Security:

```
if (Security.getProvider(CloudHsmProvider.PROVIDER_NAME) == null) {
    Security.addProvider(new CloudHsmProvider());
}
```

`CloudHsmProvider`dapat dikonfigurasi dengan dua cara:

1. Konfigurasikan dengan file (konfigurasi default)

1. Konfigurasikan menggunakan kode

Topik berikut menjelaskan konfigurasi ini, dan cara menghubungkan ke beberapa cluster.

**Topics**
+ [Konfigurasikan AWS CloudHSM `CloudHsmProvider` kelas dengan file (Konfigurasi default)](java-lib-configs-default.md)
+ [Konfigurasikan AWS CloudHSM `CloudHsmProvider` kelas menggunakan kode](java-lib-configs-using-code.md)
+ [Connect ke beberapa AWS CloudHSM cluster](java-lib-connecting-to-multiclusters.md)

# Konfigurasikan AWS CloudHSM `CloudHsmProvider` kelas dengan file (Konfigurasi default)
<a name="java-lib-configs-default"></a>

Cara default untuk mengkonfigurasi AWS CloudHSM `CloudHsmProvider` kelas adalah dengan file.

Ketika Anda membuat instance `CloudHsmProvider` menggunakan konstruktor default, secara default akan mencari file konfigurasi di `/opt/cloudhsm/etc/cloudhsm-jce.cfg` jalur di Linux. File konfigurasi ini dapat dikonfigurasi menggunakan file`configure-jce`. 

Objek yang dibuat menggunakan konstruktor default akan menggunakan nama penyedia CloudHSM default. `CloudHSM` Nama penyedia berguna untuk berinteraksi dengan JCE untuk memberi tahu penyedia mana yang akan digunakan untuk berbagai operasi. Contoh untuk menggunakan nama penyedia CloudHSM untuk operasi Cipher adalah sebagai berikut:

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHSM");
```

# Konfigurasikan AWS CloudHSM `CloudHsmProvider` kelas menggunakan kode
<a name="java-lib-configs-using-code"></a>

Pada Client SDK versi 5.8.0, Anda juga dapat mengkonfigurasi AWS CloudHSM `CloudHsmProvider` kelas menggunakan kode Java. Cara untuk melakukan ini adalah dengan menggunakan objek `CloudHsmProviderConfig` kelas. Anda dapat membangun objek ini menggunakan`CloudHsmProviderConfigBuilder`. 

`CloudHsmProvider`memiliki konstruktor lain yang mengambil `CloudHsmProviderConfig` objek, seperti contoh berikut menunjukkan.

**Example**  

```
CloudHsmProviderConfig config = CloudHsmProviderConfig.builder()  
                                    .withCluster(  
                                        CloudHsmCluster.builder()  
                                            .withHsmCAFilePath(hsmCAFilePath)
                                            .withClusterUniqueIdentifier("CloudHsmCluster1")
        .withServer(CloudHsmServer.builder().withHostIP(hostName).build())  
                        .build())  
        .build();
CloudHsmProvider provider = new CloudHsmProvider(config);
```

Dalam contoh ini, nama penyedia JCE adalah`CloudHsmCluster1`. Ini adalah nama yang kemudian dapat digunakan aplikasi untuk berinteraksi dengan JCE:

**Example**  

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHsmCluster1");
```

Atau, aplikasi juga dapat menggunakan objek penyedia yang dibuat di atas untuk memberi tahu JCE untuk menggunakan penyedia itu untuk operasi:

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider);
```

Jika pengidentifikasi unik tidak ditentukan dengan `withClusterUniqueIdentifier` metode, nama penyedia yang dibuat secara acak dibuat untuk Anda. Untuk mendapatkan pengenal yang dihasilkan secara acak ini, aplikasi dapat memanggil `provider.getName()` untuk mendapatkan pengenal.

# Connect ke beberapa AWS CloudHSM cluster
<a name="java-lib-connecting-to-multiclusters"></a>

Masing-masing `CloudHsmProvider` mewakili koneksi ke AWS CloudHSM Cluster Anda. Jika Anda ingin berbicara dengan cluster lain dari aplikasi yang sama, Anda dapat membuat objek lain `CloudHsmProvider` dengan konfigurasi untuk cluster Anda yang lain dan Anda dapat berinteraksi dengan cluster lain ini baik menggunakan objek penyedia atau menggunakan nama penyedia, seperti yang ditunjukkan pada contoh berikut.

**Example**  

```
CloudHsmProviderConfig config = CloudHsmProviderConfig.builder()  
                                    .withCluster(  
                                        CloudHsmCluster.builder()  
                                            .withHsmCAFilePath(hsmCAFilePath)
                                            .withClusterUniqueIdentifier("CloudHsmCluster1")
        .withServer(CloudHsmServer.builder().withHostIP(hostName).build())  
                        .build())  
        .build();
CloudHsmProvider provider1 = new CloudHsmProvider(config);

if (Security.getProvider(provider1.getName()) == null) {
    Security.addProvider(provider1);
}

CloudHsmProviderConfig config2 = CloudHsmProviderConfig.builder()  
                                    .withCluster(  
                                        CloudHsmCluster.builder()  
                                            .withHsmCAFilePath(hsmCAFilePath2)
                                            .withClusterUniqueIdentifier("CloudHsmCluster2")
        .withServer(CloudHsmServer.builder().withHostIP(hostName2).build())  
                        .build())  
        .build();
CloudHsmProvider provider2 = new CloudHsmProvider(config2);

if (Security.getProvider(provider2.getName()) == null) {
    Security.addProvider(provider2);
}
```

Setelah Anda mengonfigurasi kedua penyedia (kedua cluster) di atas, Anda dapat berinteraksi dengan mereka baik menggunakan objek penyedia atau menggunakan nama penyedia. 

Memperluas contoh ini yang menunjukkan cara berbicara`cluster1`, Anda dapat menggunakan sampel berikut untuk AES/GCM/NoPadding operasi:

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider1);
```

Dan dalam aplikasi yang sama untuk melakukan “AES” Pembuatan kunci pada cluster kedua menggunakan nama penyedia, Anda juga dapat menggunakan contoh berikut:

```
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider2.getName());
```

# Ekstraksi kunci menggunakan JCE untuk AWS CloudHSM
<a name="java-lib-configs-getencoded"></a>

Java Cryptography Extension (JCE) menggunakan arsitektur yang memungkinkan implementasi kriptografi yang berbeda untuk dicolokkan. AWS CloudHSM mengirimkan salah satu penyedia JCE yang menurunkan operasi kriptografi ke HSM. Agar sebagian besar penyedia JCE lainnya dapat bekerja dengan kunci yang disimpan di AWS CloudHSM, mereka harus mengekstrak byte kunci HSMs dari teks bening Anda ke dalam memori mesin Anda untuk digunakan. HSMs biasanya hanya mengizinkan kunci untuk diekstraksi sebagai objek yang dibungkus, bukan teks yang jelas. Namun, untuk mendukung kasus penggunaan integrasi antar-penyedia, AWS CloudHSM memungkinkan opsi konfigurasi opt-in untuk mengaktifkan ekstraksi byte kunci secara jelas.

**penting**  
JCE membongkar operasi ke AWS CloudHSM setiap kali penyedia AWS CloudHSM ditentukan atau AWS CloudHSM objek kunci digunakan. Anda tidak perlu mengekstrak kunci dengan jelas jika Anda mengharapkan operasi Anda terjadi di dalam HSM. Ekstraksi kunci dalam teks yang jelas hanya diperlukan ketika aplikasi Anda tidak dapat menggunakan mekanisme aman seperti membungkus dan membuka kunci karena pembatasan dari perpustakaan pihak ketiga atau penyedia JCE. 

Penyedia AWS CloudHSM JCE memungkinkan ekstraksi **kunci publik** untuk bekerja dengan penyedia JCE eksternal secara default. Metode berikut selalu diperbolehkan:


| Kelas | Metode | Format (GetEncoded) | 
| --- | --- | --- | 
| EcPublicKey | getEncoded () | X.509 | 
|  | GetW () | N/A | 
| RSAPublicKunci | getEncoded () | X.509 | 
|  | getPublicExponent() | N/A | 
| CloudHsmRsaPrivateCrtKey | getPublicExponent() | N/A | 

Penyedia AWS CloudHSM JCE tidak mengizinkan ekstraksi byte kunci secara jelas untuk kunci **pribadi** atau **rahasia secara** default. Jika kasus penggunaan Anda memerlukannya, Anda dapat mengaktifkan ekstraksi byte kunci secara jelas untuk kunci **pribadi** atau **rahasia** dalam kondisi berikut:

1. `EXTRACTABLE`Atribut untuk kunci pribadi dan rahasia diatur ke **true**.
   + Secara default, `EXTRACTABLE` atribut untuk kunci pribadi dan rahasia diatur ke **true**. `EXTRACTABLE`kunci adalah kunci yang diizinkan untuk diekspor keluar dari HSM. Untuk informasi selengkapnya, lihat Atribut Java yang didukung untuk [SDK Klien 5](java-lib-attributes_5.md).

1. `WRAP_WITH_TRUSTED`Atribut untuk kunci pribadi dan rahasia diatur ke **false**.
   + `getEncoded`,`getPrivateExponent`, dan `getS` tidak dapat digunakan dengan kunci pribadi yang tidak dapat diekspor dengan jelas. `WRAP_WITH_TRUSTED`tidak mengizinkan kunci pribadi Anda untuk diekspor keluar dari HSM dengan jelas. Untuk informasi selengkapnya, lihat [Menggunakan kunci tepercaya untuk mengontrol pembukaan kunci.](manage-keys-using-trusted-keys.md)

# Izinkan penyedia JCE untuk mengekstrak rahasia kunci pribadi dari AWS CloudHSM
<a name="get-encoded-take-out-private-keys"></a>

Gunakan langkah-langkah berikut untuk memungkinkan penyedia AWS CloudHSM JCE mengekstrak rahasia kunci pribadi Anda.

**penting**  
Perubahan konfigurasi ini memungkinkan ekstraksi semua byte `EXTRACTABLE` kunci secara jelas dari cluster HSM Anda. Untuk keamanan yang lebih baik, Anda harus mempertimbangkan untuk menggunakan [metode pembungkus kunci](java-lib-supported_5.md) untuk mengekstrak kunci dari HSM dengan aman. Ini mencegah ekstraksi byte kunci Anda yang tidak disengaja dari HSM. 

1. Gunakan perintah berikut untuk mengaktifkan kunci **pribadi** atau **rahasia** Anda untuk diekstraksi di JCE:

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

   ```
   $ /opt/cloudhsm/bin/configure-jce --enable-clear-key-extraction-in-software
   ```

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

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --enable-clear-key-extraction-in-software
   ```

------

1. Setelah Anda mengaktifkan ekstraksi kunci yang jelas, metode berikut diaktifkan untuk mengekstrak kunci pribadi ke dalam memori.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/get-encoded-take-out-private-keys.html)

Jika Anda ingin mengembalikan perilaku default dan tidak mengizinkan JCE untuk mengekspor kunci dengan jelas, jalankan perintah berikut:

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

```
$ /opt/cloudhsm/bin/configure-jce --disable-clear-key-extraction-in-software
```

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

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" --disable-clear-key-extraction-in-software
```

------

# Coba lagi perintah untuk JCE untuk AWS CloudHSM
<a name="java-lib-configs-retry"></a>

AWS CloudHSM Client SDK 5.8.0 dan yang lebih baru memiliki strategi coba ulang otomatis bawaan yang akan mencoba kembali operasi HSM-throttled dari sisi klien. Ketika HSM membatasi operasi karena terlalu sibuk melakukan operasi sebelumnya dan tidak dapat menerima lebih banyak permintaan, klien SDKs akan mencoba kembali operasi yang dibatasi hingga 3 kali sementara mundur secara eksponensial. Strategi coba ulang otomatis ini dapat diatur ke salah satu dari dua mode: **off** dan **standar**.
+ **off**: SDK Klien tidak akan melakukan strategi coba ulang apa pun untuk operasi yang dibatasi oleh HSM.
+ **standard**: Ini adalah mode default untuk Client SDK 5.8.0 dan yang lebih baru. Dalam mode ini, klien SDKs akan secara otomatis mencoba kembali operasi yang dibatasi dengan mundur secara eksponensial.

Untuk informasi selengkapnya, lihat [Pelambatan HSM](troubleshoot-hsm-throttling.md).

## Setel perintah coba lagi ke mode mati
<a name="w2aac25c21c25c25c15b9"></a>

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

**Untuk mengatur perintah coba lagi **off** untuk Client SDK 5 di Linux**
+ Anda dapat menggunakan perintah berikut untuk mengatur konfigurasi coba lagi ke **off** mode:

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

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

**Untuk mengatur perintah coba lagi **off** untuk Client SDK 5 pada Windows**
+ Anda dapat menggunakan perintah berikut untuk mengatur konfigurasi coba lagi ke **off** mode:

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

------



# Menggunakan versi SDK sebelumnya untuk bekerja dengan AWS CloudHSM
<a name="choose-client-sdk"></a>

****  
 SDK versi 5.8.0 dan sebelumnya telah mencapai akhir dukungan mereka. Setelah 31 Maret 2025 dokumentasi untuk SDK versi 3.4.4 dan sebelumnya tidak akan lagi tersedia.

 AWS CloudHSM mencakup dua versi SDK Klien utama: 
+ SDK Klien 5: Ini adalah SDK Klien terbaru dan default kami. Untuk informasi tentang manfaat dan keuntungan yang diberikannya, lihat[Manfaat SDK AWS CloudHSM Klien 5](client-sdk-5-benefits.md).
+ SDK Klien 3: Ini adalah SDK Klien kami yang lebih lama. Ini mencakup satu set lengkap komponen untuk platform dan aplikasi berbasis bahasa kompatibilitas dan alat manajemen.

Untuk petunjuk tentang migrasi dari SDK Klien 3 ke SDK Klien 5, lihat. [Migrasi dari SDK AWS CloudHSM Klien 3 ke SDK Klien 5](client-sdk-migration.md)

Topik ini menjelaskan SDK Klien 3. Untuk melihat versi Client SDK yang Anda gunakan, lihat[Periksa versi SDK AWS CloudHSM Klien AndaUntuk memeriksa versi daemon klien](check-client_version.md).

Untuk mengunduh, lihat[Unduh untuk AWS CloudHSM Client SDK](client-history.md).

**Topics**
+ [Tingkatkan SDK AWS CloudHSM Klien 3 di Linux](client-upgrade.md)
+ [AWS CloudHSM Platform yang didukung SDK Klien 3](sdk3-support.md)
+ [Pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 3](pkcs11-v3-library.md)
+ [OpenSSL Dynamic Engine AWS CloudHSM untuk Klien SDK 3](openssl3-install.md)
+ [Penyedia JCE untuk AWS CloudHSM Klien SDK 3](java-library_3.md)
+ [API Kriptografi: Generasi Berikutnya (CNG) dan penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM](ksp-v3-library.md)

# Tingkatkan SDK AWS CloudHSM Klien 3 di Linux
<a name="client-upgrade"></a>

****  
 SDK versi 5.8.0 dan sebelumnya telah mencapai akhir dukungan mereka. Setelah 31 Maret 2025 dokumentasi untuk SDK versi 3.4.4 dan sebelumnya tidak akan lagi tersedia.

Dengan AWS CloudHSM Client SDK 3.1 dan yang lebih tinggi, versi daemon klien dan komponen apa pun yang Anda instal harus cocok untuk ditingkatkan. Untuk semua sistem berbasis Linux, Anda harus menggunakan satu perintah untuk mengelompokkan meningkatkan daemon klien dengan versi yang sama dari pustaka PKCS \$111, penyedia Java Cryptographic Extension (JCE), atau OpenSSL Dynamic Engine. Persyaratan ini tidak berlaku untuk sistem berbasis Windows karena biner untuk penyedia CNG dan KSP sudah termasuk dalam paket daemon klien. 

## Untuk memeriksa versi daemon klien
<a name="check-client-version"></a>
+ Pada sistem Linux berbasis Red Hat (termasuk Amazon Linux dan CentOS), gunakan perintah berikut:

  ```
  rpm -qa | grep ^cloudhsm
  ```
+ Pada sistem Linux berbasis Debian, gunakan perintah berikut:

  ```
  apt list --installed | grep ^cloudhsm
  ```
+ Pada sistem Windows, gunakan perintah berikut:

  ```
  wmic product get name,version
  ```

**Topics**
+ [Prasyarat](#client-upgrade-prerequisites)
+ [Langkah 1: Hentikan daemon klien](#client-stop)
+ [Langkah 2: Tingkatkan SDK klien](#upgrade-commands)
+ [Langkah 3: Mulai daemon klien](#client-start)

## Prasyarat
<a name="client-upgrade-prerequisites"></a>

Unduh versi terbaru daemon AWS CloudHSM klien dan pilih komponen Anda.

**catatan**  
Anda tidak perlu menginstal semua komponen. Untuk setiap komponen yang telah Anda instal, Anda harus meningkatkan komponen tersebut untuk mencocokkan versi daemon klien.

### Daemon klien Linux terbaru
<a name="download-client"></a>

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

```
wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-latest.el6.x86_64.rpm
```

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

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

------
#### [ CentOS 7 ]

```
sudo yum install wget
```

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

------
#### [ CentOS 8 ]

```
sudo yum install wget
```

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

------
#### [ RHEL 7 ]

```
sudo yum install wget
```

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

------
#### [ RHEL 8 ]

```
sudo yum install wget
```

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

------
#### [ Ubuntu 16.04 LTS ]

```
wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client_latest_amd64.deb
```

------
#### [ Ubuntu 18.04 LTS ]

```
wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client_latest_u18.04_amd64.deb
```

------

### Pustaka PKCS \$111 terbaru
<a name="download-pkcs11"></a>

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

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-pkcs11-latest.el6.x86_64.rpm
```

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

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

------
#### [ CentOS 7 ]

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

------
#### [ CentOS 8 ]

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

------
#### [ RHEL 7 ]

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

------
#### [ RHEL 8 ]

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

------
#### [ Ubuntu 16.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-pkcs11_latest_amd64.deb
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client-pkcs11_latest_u18.04_amd64.deb
```

------

### OpenSSL Dynamic Engine Terbaru
<a name="download-openssl"></a>

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

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-dyn-latest.el6.x86_64.rpm
```

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

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

------
#### [ CentOS 7 ]

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

------
#### [ RHEL 7 ]

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

------
#### [ Ubuntu 16.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-dyn_latest_amd64.deb
```

------

### Penyedia JCE terbaru
<a name="download-java"></a>

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

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-jce-latest.el6.x86_64.rpm
```

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

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

------
#### [ CentOS 7 ]

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

------
#### [ CentOS 8 ]

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

------
#### [ RHEL 7 ]

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

------
#### [ RHEL 8 ]

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

------
#### [ Ubuntu 16.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-jce_latest_amd64.deb
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client-jce_latest_u18.04_amd64.deb
```

------

## Langkah 1: Hentikan daemon klien
<a name="client-stop"></a>

Gunakan perintah berikut untuk menghentikan daemon klien.

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

```
$ sudo stop cloudhsm-client
```

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

```
$ sudo service cloudhsm-client stop
```

------
#### [ CentOS 7 ]

```
$ sudo service cloudhsm-client stop
```

------
#### [ CentOS 8 ]

```
$ sudo service cloudhsm-client stop
```

------
#### [ RHEL 7 ]

```
$ sudo service cloudhsm-client stop
```

------
#### [ RHEL 8 ]

```
$ sudo service cloudhsm-client stop
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ sudo service cloudhsm-client stop
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ sudo service cloudhsm-client stop
```

------

## Langkah 2: Tingkatkan SDK klien
<a name="upgrade-commands"></a>

Perintah berikut menunjukkan sintaks yang diperlukan untuk meningkatkan daemon klien dan komponen. Sebelum menjalankan perintah, hapus komponen yang tidak ingin ditingkatkan.

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

```
$ sudo yum install ./cloudhsm-client-latest.el6.x86_64.rpm \
              <./cloudhsm-client-pkcs11-latest.el6.x86_64.rpm> \
              <./cloudhsm-client-dyn-latest.el6.x86_64.rpm> \
              <./cloudhsm-client-jce-latest.el6.x86_64.rpm>
```

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

```
$ sudo yum install ./cloudhsm-client-latest.el7.x86_64.rpm \
              <./cloudhsm-client-pkcs11-latest.el7.x86_64.rpm> \
              <./cloudhsm-client-dyn-latest.el7.x86_64.rpm> \
              <./cloudhsm-client-jce-latest.el7.x86_64.rpm>
```

------
#### [ CentOS 7 ]

```
$ sudo yum install ./cloudhsm-client-latest.el7.x86_64.rpm \
              <./cloudhsm-client-pkcs11-latest.el7.x86_64.rpm> \
              <./cloudhsm-client-dyn-latest.el7.x86_64.rpm> \
              <./cloudhsm-client-jce-latest.el7.x86_64.rpm>
```

------
#### [ CentOS 8 ]

```
$ sudo yum install ./cloudhsm-client-latest.el8.x86_64.rpm \
              <./cloudhsm-client-pkcs11-latest.el8.x86_64.rpm> \              
              <./cloudhsm-client-jce-latest.el8.x86_64.rpm>
```

------
#### [ RHEL 7 ]

```
$ sudo yum install ./cloudhsm-client-latest.el7.x86_64.rpm \
              <./cloudhsm-client-pkcs11-latest.el7.x86_64.rpm> \
              <./cloudhsm-client-dyn-latest.el7.x86_64.rpm> \
              <./cloudhsm-client-jce-latest.el7.x86_64.rpm>
```

------
#### [ RHEL 8 ]

```
$ sudo yum install ./cloudhsm-client-latest.el8.x86_64.rpm \
              <./cloudhsm-client-pkcs11-latest.el8.x86_64.rpm> \
              <./cloudhsm-client-jce-latest.el8.x86_64.rpm>
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ sudo apt install ./cloudhsm-client_latest_amd64.deb \
              <cloudhsm-client-pkcs11_latest_amd64.deb> \
              <cloudhsm-client-dyn_latest_amd64.deb> \
              <cloudhsm-client-jce_latest_amd64.deb>
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ sudo apt install ./cloudhsm-client_latest_u18.04_amd64.deb \
              <cloudhsm-client-pkcs11_latest_amd64.deb> \
              <cloudhsm-client-jce_latest_amd64.deb>
```

------

## Langkah 3: Mulai daemon klien
<a name="client-start"></a>

Gunakan perintah berikut untuk memulai daemon klien.

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

```
$ sudo start cloudhsm-client
```

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

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 20.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------

# AWS CloudHSM Platform yang didukung SDK Klien 3
<a name="sdk3-support"></a>

****  
 SDK versi 5.8.0 dan sebelumnya telah mencapai akhir dukungan mereka. Setelah 31 Maret 2025 dokumentasi untuk SDK versi 3.4.4 dan sebelumnya tidak akan lagi tersedia.

AWS CloudHSM Client SDK 3 memerlukan daemon klien dan menawarkan alat baris perintah termasuk, CloudHSM Management Utility (CMU), utilitas manajemen kunci (KMU), dan alat konfigurasi. 

Dukungan dasar berbeda untuk setiap versi SDK AWS CloudHSM Klien. Biasanya dukungan platform untuk komponen dalam SDK cocok dengan dukungan dasar, tetapi tidak selalu. Untuk menentukan dukungan platform untuk komponen tertentu, pertama-tama pastikan platform yang Anda inginkan muncul di bagian dasar SDK, lalu periksa pengecualian atau informasi terkait lainnya di bagian komponen.

Dukungan platform berubah dari waktu ke waktu. Versi CloudHSM Client SDK sebelumnya mungkin tidak mendukung semua sistem operasi yang tercantum di sini. Gunakan catatan rilis untuk menentukan dukungan sistem operasi untuk versi CloudHSM Client SDK sebelumnya. Untuk informasi selengkapnya, lihat [Unduh untuk AWS CloudHSM Client SDK](client-history.md).

AWS CloudHSM hanya mendukung sistem operasi 64-bit.

**Topics**
+ [Dukungan Linux untuk AWS CloudHSM Client SDK 3](sdk3-linux.md)
+ [Dukungan Windows untuk AWS CloudHSM Client SDK 3](sdk3-windows.md)
+ [Kompatibilitas HSM untuk AWS CloudHSM Klien SDK 3](sdk3-hsm-types.md)

# Dukungan Linux untuk AWS CloudHSM Client SDK 3
<a name="sdk3-linux"></a>

AWS CloudHSM Client SDK 3 mendukung sistem operasi dan platform Linux berikut.
+ Amazon Linux
+ Amazon Linux 2
+ CentOS 6.10\$1 2
+ CentOS 7.3\$1
+ CentOS 8 1,4
+ Red Hat Enterprise Linux (RHEL) 6.10\$1 2
+ Red Hat Enterprise Linux (RHEL) 7.3\$1
+ Perusahaan Topi Merah Linux (RHEL) 8 1
+ Ubuntu 16.04 LTS 3
+ Ubuntu 18.04 LTS 1

[1] Tidak ada dukungan untuk OpenSSL Dynamic Engine. Untuk informasi lebih lanjut, lihat [OpenSSL Dynamic Engine](sdk3-compare.md#openssl-collapse).

[2] Tidak ada dukungan untuk Client SDK 3.3.0 dan yang lebih baru.

[3] SDK 3.4 adalah rilis terakhir yang didukung di Ubuntu 16.04.

[4] SDK 3.4 adalah rilis terakhir yang didukung di CentOS 8.3\$1.

# Dukungan Windows untuk AWS CloudHSM Client SDK 3
<a name="sdk3-windows"></a>

AWS CloudHSM Client SDK 3 mendukung versi Windows Server berikut.
+ Microsoft Windows Server 2012
+ Microsoft Windows Server 2012 R2
+ Microsoft Windows Server 2016
+ Microsoft Windows Server 2019

# Kompatibilitas HSM untuk AWS CloudHSM Klien SDK 3
<a name="sdk3-hsm-types"></a>

Tabel berikut menjelaskan kompatibilitas AWS CloudHSM Client SDK 3 untuk HSMs.


| hsm1.sedang | hsm2m.sedang | 
| --- | --- | 
| Kompatibel dengan versi Klien SDK 3.1.0 dan yang lebih baru. |  Tidak didukung.  | 

# Pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 3
<a name="pkcs11-v3-library"></a>

PKCS \$111 adalah standar untuk melakukan operasi kriptografi pada modul keamanan perangkat keras (HSM) di. AWS CloudHSM

Untuk informasi tentang bootstrap, lihat. [Menghubungkan ke cluster](cluster-connect.md)

**Topics**
+ [Instal pustaka PKCS \$111](install-pkcs11-v3.md)
+ [Otentikasi ke pustaka PKCS \$111](pkcs11-v3-pin.md)
+ [Tipe kunci](pkcs11-v3-key-types.md)
+ [Mekanisme](pkcs11-v3-mechanisms.md)
+ [Operasi API](pkcs11-v3-apis.md)
+ [Atribut kunci](pkcs11-v3-attributes.md)
+ [Sampel Kode](pkcs11-v3-samples.md)

# Instal pustaka PKCS \$111 untuk AWS CloudHSM Client SDK 3
<a name="install-pkcs11-v3"></a>

Topik ini memberikan petunjuk untuk menginstal pustaka PKCS \$111 untuk seri versi AWS CloudHSM Client SDK 3. [Untuk informasi selengkapnya tentang pustaka SDK Klien atau PKCS \$111, lihat [Menggunakan pustaka SDK Klien](use-hsm.md) dan PKCS \$111.](pkcs11-library.md)

## Prasyarat untuk Klien SDK 3
<a name="pkcs11-library-prerequisites"></a>

Pustaka PKCS \$111 membutuhkan klien. AWS CloudHSM 

Jika Anda belum menginstal dan mengkonfigurasi AWS CloudHSM klien, lakukan itu sekarang dengan mengikuti langkah-langkah di[Instal klien (Linux)](cmu-install-and-configure-client-linux.md). Setelah Anda menginstal dan mengatur konfigurasi klien, gunakan perintah berikut untuk memulainya. 

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

```
$ sudo start cloudhsm-client
```

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

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 20.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------

## Instal pustaka PKCS \$111 untuk Client SDK 3
<a name="install-pkcs11-library"></a>

Perintah berikut mengunduh dan memasang pustaka PKCS \$111.

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

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-pkcs11-latest.el6.x86_64.rpm
```

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

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

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

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

------
#### [ CentOS 7 ]

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

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

------
#### [ CentOS 8 ]

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

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

------
#### [ RHEL 7 ]

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

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

------
#### [ RHEL 8 ]

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

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

------
#### [ Ubuntu 16.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-pkcs11_latest_amd64.deb
```

```
$ sudo apt install ./cloudhsm-client-pkcs11_latest_amd64.deb
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client-pkcs11_latest_u18.04_amd64.deb
```

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

------
+ Jika instans EC2 tempat Anda menginstal pustaka PKCS \$111 tidak memiliki komponen lain dari SDK Klien 3 yang diinstal, Anda harus bootstrap SDK Klien 3. Anda hanya perlu melakukan ini sekali pada setiap contoh dengan komponen dari SDK Klien 3.
+ Anda dapat menemukan berkas pustaka PKCS \$111 di lokasi berikut:

  Linux biner, skrip konfigurasi, sertifikat, dan berkas log:

  ```
  /opt/cloudhsm/lib
  ```

# Mengautentikasi ke pustaka PKCS \$111 untuk AWS CloudHSM SDK Klien 3
<a name="pkcs11-v3-pin"></a>

Saat Anda menggunakan pustaka PKCS \$111, aplikasi Anda berjalan sebagai [pengguna kripto (CU)](manage-hsm-users.md) tertentu di dalam Anda HSMs . AWS CloudHSM Aplikasi Anda dapat melihat dan mengelola hanya kunci yang CU miliki dan bagikan. Anda dapat menggunakan CU yang ada di HSMs atau membuat CU baru. Untuk informasi tentang pengelolaan CUs, lihat Mengelola pengguna [HSM dengan CloudHSM CLI dan Mengelola pengguna HSM dengan CloudHSM](manage-hsm-users-chsm-cli.md) [Management Utility (CMU](manage-hsm-users-cmu.md)).

Untuk menentukan CU ke pustaka PKCS \$111, gunakan parameter pin dari PKCS \$111 [Fungsi C\$1Login](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc385057915). Untuk AWS CloudHSM, parameter pin memiliki format berikut:

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

Sebagai contoh, perintah berikut menetapkan pin pustaka PKCS \$111 ke CU dengan nama pengguna `CryptoUser` dan kata sandi `CUPassword123!`.

```
CryptoUser:CUPassword123!
```

# Tipe kunci yang didukung untuk pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 3
<a name="pkcs11-v3-key-types"></a>

Pustaka PKCS \$111 mendukung tipe kunci berikut dengan AWS CloudHSM Client SDK 3.


****  

| Tipe Kunci | Deskripsi | 
| --- | --- | 
| RSA | Hasilkan 2048-bit sampai 4096-bit kunci RSA, dengan penambahan 256 bit. | 
| EC | Hasilkan kunci dengan kurva secp224r1 (P-224), secp256r1 (P-256), secp256k1 (Blockchain), secp384r1 (P-384), dan secp521r1 (P-521). | 
| AES | Hasilkan kunci AES 128, 192, dan 256-bit.  | 
| DES3 (Tiga DES) | Hasilkan kunci 192-bit DES3 . Lihat catatan [1](#pkcs11-v3-key-note) di bawah untuk perubahan yang akan datang. | 
| GENERIC\$1SECRET | Hasilkan 1 sampai 64 byte rahasia generik. | 
+ [1] Sesuai dengan panduan NIST, ini tidak diizinkan untuk cluster dalam mode FIPS setelah 2023. Untuk cluster dalam mode non-FIPS, masih diperbolehkan setelah 2023. Lihat [Kepatuhan FIPS 140: Penutupan Mekanisme 2024](compliance-dep-notif.md#compliance-dep-notif-1) untuk detail.

# Mekanisme yang didukung untuk AWS CloudHSM Klien SDK 3
<a name="pkcs11-v3-mechanisms"></a>

Pustaka PKCS \$111 mendukung algoritme berikut untuk AWS CloudHSM Client SDK 3:
+ **Enkripsi dan dekripsi** — AES-CBC, AES-CTR, AES-ECB, AES-GCM, -CBC, -ECB, RSA-OAEP, dan RSA-PKCS DES3 DES3
+ **Tanda tangani dan verifikasi**- RSA, HMAC, dan ECDSA; dengan dan tanpa hashing
+ **Hash/digest** — SHA1,,, SHA224, dan SHA256 SHA384 SHA512
+ **Bungkus kunci**— Bungkus Kunci AES,[4](#pkcs11-v3-mech4)AES-GCM, RSA-AES, dan RSA-OAEP
+ **Derivasi kunci** — ECDH, -108 CTR KDF [5](#pkcs11-v3-mech5) SP800

## Tabel mekanisme-fungsi perpustakaan PKCS \$111
<a name="pkcs11-v3-mech-function"></a>

Pustaka PKCS \$111 sesuai dengan spesifikasi PKCS \$111 versi 2.40. Untuk memanggil fitur kriptografi menggunakan PKCS \$111, panggil fungsi dengan mekanisme tertentu. Tabel berikut merangkum kombinasi fungsi dan mekanisme yang didukung oleh AWS CloudHSM.

**Menafsirkan tabel mekanisme-fungsi PKCS \$111 yang didukung**  
Tanda ✔ menunjukkan bahwa AWS CloudHSM mendukung mekanisme untuk fungsi tersebut. Kami tidak mendukung semua fungsi yang mungkin tercantum dalam spesifikasi PKCS \$111. Tanda ✖ menunjukkan bahwa AWS CloudHSM belum mendukung mekanisme untuk fungsi yang diberikan, meskipun standar PKCS \$111 mengizinkannya. Sel kosong menunjukkan bahwa standar PKCS \$111 tidak mendukung mekanisme fungsi tertentu.


**Mekanisme dan fungsi pustaka PKCS \$111 yang didukung**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

**Anotasi mekanisme**
+ [1] Operasi satu bagian saja.
+ [2] Mekanisme secara fungsional identik dengan mekanisme `CKM_RSA_PKCS_KEY_PAIR_GEN`, tetapi menawarkan jaminan lebih kuat untuk pembuatan `p` dan `q`.
+ [3.1] AWS CloudHSM mendekati hashing secara berbeda berdasarkan SDK Klien. Untuk Client SDK 3, tempat kita melakukan hashing tergantung pada ukuran data dan apakah Anda menggunakan bagian tunggal atau operasi multi\$1bagian.

  **Operasi satu bagian di SDK Klien 3**

  Tabel 3.1 mencantumkan ukuran kumpulan data maksimum untuk setiap mekanisme untuk SDK Klien 3. Seluruh hash dikomputasi di dalam HSM. Tidak ada dukungan untuk ukuran data yang lebih besar dari 16 KB.  
**Tabel 3.1, Ukuran set data maksimum untuk operasi satu bagian**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

  **Operasi multipart Klien SDK 3**

  Dukungan untuk ukuran data lebih besar dari 16 KB, tetapi ukuran data menentukan tempat hashing berlangsung. Penyangga data kurang dari 16 KB di-hash dalam HSM. Penyangga antara 16 KB dan ukuran data maksimum untuk sistem Anda di-hash secara lokal dalam perangkat lunak. *Ingat*: Fungsi hash tidak memerlukan rahasia kriptografi, sehingga Anda dapat dengan aman melakukan komputasi pada mereka di luar HSM.
+ [3.2] AWS CloudHSM mendekati hashing secara berbeda berdasarkan SDK Klien. Untuk Client SDK 3, tempat kita melakukan hashing tergantung pada ukuran data dan apakah Anda menggunakan bagian tunggal atau operasi multi\$1bagian.

  **Operasi satu bagian Klien SDK 3**

  Tabel 3.2 mencantumkan ukuran kumpulan data maksimum untuk setiap mekanisme untuk SDK Klien 3. Tidak ada dukungan untuk ukuran data yang lebih besar dari 16 KB.  
**Tabel 3.2, Ukuran set data maksimum untuk operasi satu bagian**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

  **Operasi multipart Klien SDK 3**

  Dukungan untuk ukuran data lebih besar dari 16 KB, tetapi ukuran data menentukan tempat hashing berlangsung. Penyangga data kurang dari 16 KB di-hash dalam HSM. Penyangga antara 16 KB dan ukuran data maksimum untuk sistem Anda di-hash secara lokal dalam perangkat lunak. *Ingat*: Fungsi hash tidak memerlukan rahasia kriptografi, sehingga Anda dapat dengan aman melakukan komputasi pada mereka di luar HSM.
+ [3.3] Ketika beroperasi pada data dengan menggunakan salah satu mekanisme berikut, jika penyangga data melebihi ukuran data maksimum, hasil operasi dalam kesalahan. Untuk mekanisme ini, semua pemrosesan data harus terjadi di dalam HSM. Tabel berikut mencantumkan set ukuran data maksimum untuk setiap mekanisme:  
**Tabel 3.3, Ukuran set data maksimum**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)
+ [4] Saat melakukan enkripsi AES-GCM, HSM tidak menerima data vektor inisialisasi (IV) dari aplikasi. Anda harus menggunakan IV yang dihasilkannya. IV 12-byte yang disediakan oleh HSM ditulis ke dalam referensi memori yang ditunjukkan oleh elemen pIV dari parameter `CK_GCM_PARAMS` struktur yang Anda suplai. Untuk mencegah kebingungan pengguna, PKCS \$111 SDK di versi 1.1.1 dan sebelumnya memastikan bahwa pIV menunjuk ke penyangga yang dinolkan ketika enkripsi AES-GCM diinisialisasi.
+ [5] **Klien SDK 3 saja**. Mekanisme diimplementasikan untuk mendukung kasus pembongkaran SSL/TLS dan dijalankan hanya sebagian di dalam HSM. Sebelum menggunakan mekanisme ini, lihat “Masalah: Derivasi kunci ECDH dijalankan hanya sebagian di dalam HSM” di. [Masalah yang diketahui untuk pustaka PKCS \$111 untuk AWS CloudHSMMasalah yang diketahui untuk pustaka PKCS \$111](ki-pkcs11-sdk.md) `CKM_ECDH1_DERIVE`tidak mendukung kurva secp521r1 (P-521).
+ [6] `CK_MECHANISM_TYPE` dan `CK_RSA_PKCS_MGF_TYPE` berikut didukung sebagai `CK_RSA_PKCS_OAEP_PARAMS` untuk `CKM_RSA_PKCS_OAEP`:
  + `CKM_SHA_1` menggunakan `CKG_MGF1_SHA1`
  + `CKM_SHA224` menggunakan `CKG_MGF1_SHA224`
  + `CKM_SHA256` menggunakan `CKG_MGF1_SHA256`
  + `CKM_SHA384` menggunakan `CKM_MGF1_SHA384`
  + `CKM_SHA512` menggunakan `CKM_MGF1_SHA512`
+ [7.1] Mekanisme yang ditentukan vendor. Untuk menggunakan mekanisme yang ditetapkan vendor CloudHSM, aplikasi PKCS \$111 harus menyertakan `/opt/cloudhsm/include/pkcs11/cloudhsm_pkcs11_vendor_defs.h` selama kompilasi. 

  `CKM_CLOUDHSM_AES_GCM`: Mekanisme kepemilikan ini adalah alternatif pemrograman yang lebih aman untuk `CKM_AES_GCM` standar. Ini menambahkan IV yang dihasilkan oleh HSM untuk ciphertext, bukan menuliskannya kembali ke dalam struktur `CK_GCM_PARAMS` yang disediakan selama inisialisasi cipher. Anda dapat menggunakan mekanisme ini dengan fungsi `C_Encrypt`, `C_WrapKey`, `C_Decrypt`, dan `C_UnwrapKey`. Bila menggunakan mekanisme ini, variabel pIV di struk `CK_GCM_PARAMS` harus diatur ke `NULL`. Bila menggunakan mekanisme ini dengan `C_Decrypt` dan `C_UnwrapKey`, IV diharapkan akan ditambahkan ke ciphertext yang sedang dibuka.

  `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD`: Bungkus Kunci AES dengan Padding PKCS \$15

  `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`: Bungkus Kunci AES dengan Padding Nol

  Untuk informasi tambahan mengenai pembungkus kunci AES, lihat Pembungkus Kunci [AES.](manage-aes-key-wrapping.md) 
+ [8] Sesuai dengan panduan NIST, ini tidak diizinkan untuk cluster dalam mode FIPS setelah 2023. Untuk cluster dalam mode non-FIPS, masih diperbolehkan setelah 2023. Lihat [Kepatuhan FIPS 140: Penutupan Mekanisme 2024](compliance-dep-notif.md#compliance-dep-notif-1) untuk detail.

# Operasi API yang didukung untuk AWS CloudHSM Client SDK 3
<a name="pkcs11-v3-apis"></a>

Pustaka PKCS \$111 mendukung operasi API PKCS \$111 berikut untuk AWS CloudHSM Client SDK 3.
+ `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_SignRecover`(Hanya dukungan SDK 3 Klien)
+ `C_SignRecoverInit`(Hanya dukungan SDK 3 Klien)
+ `C_SignUpdate`
+ `C_UnWrapKey`
+ `C_Verify`
+ `C_VerifyFinal`
+ `C_VerifyInit`
+ `C_VerifyRecover`(Hanya dukungan SDK 3 Klien)
+ `C_VerifyRecoverInit`(Hanya dukungan SDK 3 Klien)
+ `C_VerifyUpdate`
+ `C_WrapKey`

# Atribut kunci di pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 3
<a name="pkcs11-v3-attributes"></a>

Objek kunci bisa berupa kunci publik, pribadi, atau rahasia. Tindakan diizinkan pada objek kunci ditentukan melalui atribut. Atribut didefinisikan ketika objek kunci dibuat. Saat Anda menggunakan pustaka PKCS \$111 untuk AWS CloudHSM, kami menetapkan nilai default seperti yang ditentukan oleh standar PKCS \$111.

AWS CloudHSM tidak mendukung semua atribut yang tercantum dalam spesifikasi PKCS \$111. Kami patuh dengan spesifikasi untuk semua atribut yang kami dukung. Atribut ini tercantum dalam tabel masing-masing.

Fungsi kriptografi seperti `C_CreateObject`, `C_GenerateKey`, `C_GenerateKeyPair`, `C_UnwrapKey`, dan `C_DeriveKey` yang membuat, memodifikasi, atau menyalin objek mengambil templat atribut sebagai salah satu parameternya. Untuk informasi lebih lanjut tentang melewatkan templat atribut selama pembuatan objek, lihat sampel [Hasilkan kunci melalui pustaka PKCS \$111](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate).

Topik berikut memberikan informasi selengkapnya tentang atribut AWS CloudHSM kunci untuk SDK Klien 3.

**Topics**
+ [Tabel atribut](pkcs11-v3-attributes-interpreting.md)
+ [Memodifikasi atribut](pkcs11-v3-modify-attr.md)
+ [Menafsirkan kode kesalahan pustaka PKCS \$111 untuk AWS CloudHSM SDK Klien 3](pkcs11-v3-attr-errors.md)

# Tabel atribut pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 3
<a name="pkcs11-v3-attributes-interpreting"></a>

Tabel pustaka PKCS \$111 untuk AWS CloudHSM Client SDK 3 berisi daftar atribut yang berbeda menurut jenis kunci. Ini menunjukkan apakah atribut yang diberikan didukung untuk jenis kunci tertentu saat menggunakan fungsi kriptografi tertentu dengan AWS CloudHSM.

**Legenda:**
+ ✔ menunjukkan bahwa CloudHSM mendukung atribut untuk jenis kunci tertentu.
+ ✖ menunjukkan bahwa CloudHSM tidak mendukung atribut untuk jenis kunci tertentu.
+ R menunjukkan bahwa nilai atribut diatur ke hanya-baca untuk jenis kunci tertentu.
+ S menunjukkan bahwa atribut tidak dapat dibaca oleh `GetAttributeValue` karena sensitif.
+ Sel kosong di kolom Nilai Default menunjukkan bahwa tidak ada nilai default tertentu yang ditetapkan untuk atribut.

## GenerateKeyPair
<a name="pkcs11-v3-generatekeypair"></a>

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

## GenerateKey
<a name="pkcs11-v3-generatekey"></a>

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

## CreateObject
<a name="pkcs11-v3-createobject"></a>

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

## UnwrapKey
<a name="pkcs11-v3-unwrapkey"></a>

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

## DeriveKey
<a name="pkcs11-v3-derivekey"></a>

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

## GetAttributeValue
<a name="pkcs11-v3-getattributevalue"></a>

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

**Anotasi atribut**
+ [1] Atribut ini sebagian didukung oleh firmware dan harus secara eksplisit diatur hanya ke nilai default.
+ [2] Atribut wajib.
+ [3] **Klien SDK 3 saja**. `CKA_SIGN_RECOVER`Atribut berasal dari `CKA_SIGN` atribut. Jika sedang diatur, itu hanya dapat diatur ke nilai yang sama yang ditetapkan untuk `CKA_SIGN`. Jika tidak diatur, itu menurunkan nilai default dari `CKA_SIGN`. Karena CloudHSM hanya mendukung mekanisme tanda tangan dipulihkan berbasis RSA, atribut ini saat ini hanya berlaku untuk kunci publik RSA.
+ [4] **Klien SDK 3 saja**. `CKA_VERIFY_RECOVER`Atribut berasal dari `CKA_VERIFY` atribut. Jika sedang diatur, itu hanya dapat diatur ke nilai yang sama yang ditetapkan untuk `CKA_VERIFY`. Jika tidak diatur, itu menurunkan nilai default dari `CKA_VERIFY`. Karena CloudHSM hanya mendukung mekanisme tanda tangan dipulihkan berbasis RSA, atribut ini saat ini hanya berlaku untuk kunci publik RSA.

# Memodifikasi atribut pustaka PKCS \$111 untuk AWS CloudHSM SDK Klien 3
<a name="pkcs11-v3-modify-attr"></a>

Beberapa atribut dari suatu objek dapat dimodifikasi setelah objek dibuat, sedangkan beberapa objek tidak bisa. Untuk mengubah atribut, gunakan perintah [setAttribute](cloudhsm_mgmt_util-setAttribute.md) dari cloudhsm\$1mgmt\$1util. Anda juga dapat memperoleh daftar atribut dan konstanta yang mewakilinya dengan menggunakan perintah [listAttribute](cloudhsm_mgmt_util-listAttributes.md) dari cloudhsm\$1mgmt\$1util.

Daftar berikut menampilkan atribut yang diizinkan untuk modifikasi setelah pembuatan objek:
+ `CKA_LABEL`
+ `CKA_TOKEN`
**catatan**  
Modifikasi hanya diperbolehkan untuk mengubah kunci sesi menjadi kunci token. Gunakan perintah [setAttribute](key_mgmt_util-setAttribute.md) dari key\$1mgmt\$1util untuk mengubah nilai atribut.
+ `CKA_ENCRYPT`
+ `CKA_DECRYPT`
+ `CKA_SIGN`
+ `CKA_VERIFY`
+ `CKA_WRAP`
+ `CKA_UNWRAP`
+ `CKA_LABEL`
+ `CKA_SENSITIVE`
+ `CKA_DERIVE`
**catatan**  
Atribut ini mendukung derivasi kunci. Kunci harus `False` untuk semua kunci publik dan tidak dapat diatur ke `True`. Untuk kunci rahasia dan kunci privat EC, kunci dapat diatur ke `True` atau `False`.
+ `CKA_TRUSTED`
**catatan**  
Atribut ini dapat diatur ke `True` atau `False` oleh Petugas Kripto (CO) saja.
+ `CKA_WRAP_WITH_TRUSTED`
**catatan**  
Terapkan atribut ini ke kunci data yang dapat diekspor untuk menentukan bahwa Anda hanya dapat membungkus kunci ini dengan kunci yang ditandai sebagai `CKA_TRUSTED`. Setelah Anda mengatur `CKA_WRAP_WITH_TRUSTED` menjadi true (benar), atribut menjadi hanya-baca dan Anda tidak dapat mengubah atau menghapus atribut.

# Menafsirkan kode kesalahan pustaka PKCS \$111 untuk AWS CloudHSM SDK Klien 3
<a name="pkcs11-v3-attr-errors"></a>

Menentukan dalam template atribut pustaka PKCS \$111 yang tidak didukung oleh kunci tertentu menghasilkan kesalahan. Tabel berikut berisi kode galat yang dihasilkan ketika Anda melanggar spesifikasi:

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

# Contoh kode untuk pustaka PKCS \$111 untuk SDK AWS CloudHSM Klien 3
<a name="pkcs11-v3-samples"></a>

Contoh kode GitHub menunjukkan kepada Anda cara menyelesaikan tugas dasar menggunakan pustaka PKCS \$111 untuk. AWS CloudHSM

## Contoh prasyarat kode
<a name="pkcs11-v3-samples-prereqs"></a>

Sebelum menjalankan sampel, lakukan langkah-langkah berikut untuk mengatur lingkungan Anda:
+ Instal dan konfigurasikan [pustaka PKCS \$111](install-pkcs11-v3.md) untuk Client SDK 3.
+ Siapkan [pengguna kriptografi (CU)](manage-hsm-users.md). Aplikasi Anda menggunakan akun HSM ini untuk menjalankan sampel kode pada HSM.

## Sampel Kode
<a name="pkcs11-v3-samples-code"></a>

Sampel Kode untuk Perpustakaan Perangkat AWS CloudHSM Lunak untuk PKCS \$111 tersedia di. [GitHub](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples) Repositori ini mencakup contoh tentang bagaimana melakukan operasi umum menggunakan PKCS \$111 termasuk enkripsi, dekripsi, penandatanganan, dan verifikasi.
+ [Hasilkan kunci (AES, RSA, EC)](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate)
+ [Daftar atribut kunci](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/)
+ [Enkripsi dan dekripsi data dengan AES GCM](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/encrypt/aes_gcm.c)
+ [Enkripsi dan dekripsi data dengan AES\$1CTR](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/aes_ctr.c) 
+ [Enkripsi dan dekripsi data dengan 3DES](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/des_ecb.c) 
+ [Tanda tangani dan verifikasi data dengan RSA](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/sign/rsa_sign.c)
+ [Turunkan kunci menggunakan HMAC KDF](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/derivation/hmac_kdf.c)
+ [Bungkus dan buka kunci dengan AES menggunakan padding PKCS \$15](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_wrapping.c)
+ [Bungkus dan buka kunci dengan AES tanpa padding](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_no_padding_wrapping.c)
+ [Bungkus dan buka kunci dengan AES menggunakan bantalan nol](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_zero_padding_wrapping.c)
+ [Bungkus dan buka kunci dengan AES-GCM](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/wrapping/aes_gcm_wrapping.c)
+ [Bungkus dan buka kunci dengan RSA](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/rsa_wrapping.c)

# OpenSSL Dynamic Engine AWS CloudHSM untuk Klien SDK 3
<a name="openssl3-install"></a>

 AWS CloudHSM OpenSSL Dynamic Engine memungkinkan Anda untuk menurunkan operasi kriptografi ke cluster CloudHSM Anda melalui OpenSSL API.

AWS CloudHSM Client SDK 3 memang memerlukan daemon klien untuk terhubung ke cluster. Ini mendukung:
+ Pembuatan kunci RSA untuk kunci 2048, 3072, dan 4096-bit.
+ Tanda tangan/verifikasi RSA.
+ RSA mengenkripsi/mendekripsi.
+ Pembuatan angka acak yang aman secara kriptografis dan divalidasi FIPS.

  Gunakan bagian berikut untuk menginstal dan mengkonfigurasi mesin AWS CloudHSM dinamis untuk OpenSSL.

**Topics**
+ [Prasyarat untuk OpenSSL Dynamic Engine dengan Client SDK 3 AWS CloudHSM](openssl3-install-dyn3-prereqs.md)
+ [Instal OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 3](openssl3-install-openssl-library.md)
+ [Gunakan OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 3](openssl3-use-library.md)

# Prasyarat untuk OpenSSL Dynamic Engine dengan Client SDK 3 AWS CloudHSM
<a name="openssl3-install-dyn3-prereqs"></a>

Untuk informasi tentang dukungan platform, lihat[AWS CloudHSM Platform yang didukung SDK Klien 3](sdk3-support.md).

Sebelum Anda dapat menggunakan mesin AWS CloudHSM dinamis untuk OpenSSL dengan Client SDK 3, Anda memerlukan klien. AWS CloudHSM 

Klien adalah daemon yang membangun komunikasi end-to-end terenkripsi dengan HSMs di cluster Anda, dan mesin OpenSSL berkomunikasi secara lokal dengan klien. Untuk menginstal dan mengkonfigurasi AWS CloudHSM klien, lihat[Instal klien (Linux)](cmu-install-and-configure-client-linux.md). Kemudian gunakan perintah berikut untuk memulainya. 

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

```
$ sudo start cloudhsm-client
```

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

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 6 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 6 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------

# Instal OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 3
<a name="openssl3-install-openssl-library"></a>

Langkah-langkah berikut menjelaskan cara menginstal dan mengkonfigurasi mesin AWS CloudHSM dinamis untuk OpenSSL dengan Client SDK 3. Untuk informasi tentang peningkatan, lihat[Tingkatkan SDK Klien 3](client-upgrade.md).

**Untuk menginstal dan mengatur konfigurasi mesin OpenSSL**

1. Gunakan salah satu perintah berikut untuk mengunduh dan menjalankan mesin OpenSSL.

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

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-dyn-latest.el6.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-client-dyn-latest.el6.x86_64.rpm
   ```

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

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

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

------
#### [ CentOS 6 ]

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-dyn-latest.el6.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-client-dyn-latest.el6.x86_64.rpm
   ```

------
#### [ CentOS 7 ]

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

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

------
#### [ RHEL 6 ]

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-dyn-latest.el6.x86_64.rpm
   ```

   ```
   $ sudo yum install ./cloudhsm-client-dyn-latest.el6.x86_64.rpm
   ```

------
#### [ RHEL 7 ]

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

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

------
#### [ Ubuntu 16.04 LTS ]

   ```
   $ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-dyn_latest_amd64.deb
   ```

   ```
   $ sudo apt install ./cloudhsm-client-dyn_latest_amd64.deb
   ```

------

   Mesin OpenSSL dipasang di. `/opt/cloudhsm/lib/libcloudhsm_openssl.so`

1. Gunakan perintah berikut untuk mengatur variabel lingkungan bernama `n3fips_password` yang berisi kredensial dari pengguna kripto (CU). 

   ```
   $ export n3fips_password=<HSM user name>:<password>
   ```

# Gunakan OpenSSL Dynamic Engine AWS CloudHSM untuk Client SDK 3
<a name="openssl3-use-library"></a>

Untuk menggunakan mesin AWS CloudHSM dinamis untuk OpenSSL dari aplikasi terintegrasi OpenSSL, pastikan bahwa aplikasi Anda menggunakan mesin dinamis OpenSSL bernama. `cloudhsm` Pustaka bersama untuk mesin dinamis terletak di `/opt/cloudhsm/lib/libcloudhsm_openssl.so`.

Untuk menggunakan mesin AWS CloudHSM dinamis untuk OpenSSL dari baris perintah OpenSSL, gunakan `-engine` opsi untuk menentukan mesin dinamis OpenSSL bernama. `cloudhsm` Contoh:

```
$ openssl s_server -cert <server.crt> -key <server.key> -engine cloudhsm
```

# Penyedia JCE untuk AWS CloudHSM Klien SDK 3
<a name="java-library_3"></a>

Penyedia AWS CloudHSM JCE adalah implementasi penyedia yang dibangun dari kerangka penyedia Java Cryptographic Extension (JCE). JCE memungkinkan Anda untuk melakukan operasi kriptografi menggunakan Java Development Kit (JDK). Dalam panduan ini, penyedia AWS CloudHSM JCE kadang-kadang disebut sebagai penyedia JCE. Gunakan penyedia JCE dan JDK untuk membongkar operasi kriptografi ke HSM. 

**Topics**
+ [Instal penyedia JCE untuk AWS CloudHSM Client SDK 3](java-library-install.md)
+ [Dasar-dasar manajemen utama di penyedia JCE untuk AWS CloudHSM Client SDK 3](java-library-key-basics.md)
+ [Mekanisme yang didukung untuk SDK Klien 3 untuk SDK AWS CloudHSM Klien 3](java-lib-supported.md)
+ [Atribut kunci Java yang didukung untuk AWS CloudHSM Klien SDK 3](java-lib-attributes.md)
+ [Contoh kode untuk pustaka AWS CloudHSM perangkat lunak untuk Java untuk Client SDK 3](java-samples_3.md)
+ [AWS CloudHSM KeyStore Kelas Java untuk Client SDK 3](alternative-keystore.md)

# Instal penyedia JCE untuk AWS CloudHSM Client SDK 3
<a name="java-library-install"></a>

Sebelum Anda dapat menggunakan penyedia JCE, Anda memerlukan AWS CloudHSM klien. 

Klien adalah daemon yang membangun komunikasi end-to-end terenkripsi dengan di cluster Anda. HSMs Penyedia JCE berkomunikasi secara lokal dengan klien. Jika Anda belum menginstal dan mengkonfigurasi paket AWS CloudHSM klien, lakukan itu sekarang dengan mengikuti langkah-langkah di[Instal klien (Linux)](cmu-install-and-configure-client-linux.md). Setelah Anda menginstal dan mengatur konfigurasi klien, gunakan perintah berikut untuk memulainya. 

Perhatikan bahwa penyedia JCE hanya didukung pada Linux dan sistem operasi yang kompatibel. 

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

```
$ sudo start cloudhsm-client
```

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

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 20.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------

Gunakan bagian berikut untuk menginstal, memvalidasi, dan memberikan kredensi kepada penyedia.

**Topics**
+ [Langkah 1: Instal penyedia JCE](#install-java-library)
+ [Langkah 2: Validasi instalasi](#validate-install)
+ [Langkah 3: Berikan kredensil ke penyedia JCE](#java-library-credentials)

## Langkah 1: Instal penyedia JCE
<a name="install-java-library"></a>

Gunakan perintah berikut untuk mengunduh dan menginstal penyedia JCE. Penyedia ini didukung hanya di Linux dan sistem operasi yang kompatibel. 

**catatan**  
Untuk meningkatkan, lihat [Tingkatkan SDK Klien 3](client-upgrade.md).

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

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-jce-latest.el6.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-jce-latest.el6.x86_64.rpm
```

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

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

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

------
#### [ CentOS 7 ]

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

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

------
#### [ CentOS 8 ]

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

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

------
#### [ RHEL 7 ]

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

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

------
#### [ RHEL 8 ]

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

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

------
#### [ Ubuntu 16.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-jce_latest_amd64.deb
```

```
$ sudo apt install ./cloudhsm-client-jce_latest_amd64.deb
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client-jce_latest_u18.04_amd64.deb
```

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

------

Setelah Anda menjalankan perintah sebelumnya, Anda dapat menemukan file penyedia JCE berikut:
+ `/opt/cloudhsm/java/cloudhsm-<version>.jar`
+ `/opt/cloudhsm/java/cloudhsm-test-<version>.jar`
+ `/opt/cloudhsm/java/hamcrest-all-1.3.jar`
+ `/opt/cloudhsm/java/junit.jar`
+ `/opt/cloudhsm/java/log4j-api-2.17.1.jar`
+ `/opt/cloudhsm/java/log4j-core-2.17.1.jar`
+ `/opt/cloudhsm/lib/libcaviumjca.so`

## Langkah 2: Validasi instalasi
<a name="validate-install"></a>

Melakukan operasi dasar pada HSM untuk memvalidasi instalasi.

**Untuk memvalidasi instalasi penyedia JCE**

1. (Opsional) Jika Anda belum memiliki Java diinstal di lingkungan Anda, gunakan perintah berikut untuk menginstalnya. 

------
#### [ Linux (and compatible libraries) ]

   ```
   $ sudo yum install java-1.8.0-openjdk
   ```

------
#### [ Ubuntu ]

   ```
   $ sudo apt-get install openjdk-8-jre
   ```

------

1. Gunakan perintah berikut untuk mengatur variabel lingkungan yang diperlukan. Ganti *<HSM user name>* dan *<password>* dengan kredensil pengguna kripto (CU).

   ```
   $ export LD_LIBRARY_PATH=/opt/cloudhsm/lib
   ```

   ```
   $ export HSM_PARTITION=PARTITION_1
   ```

   ```
   $ export HSM_USER=<HSM user name>
   ```

   ```
   $ export HSM_PASSWORD=<password>
   ```

1. Gunakan perintah berikut untuk menjalankan tes fungsionalitas dasar. Jika berhasil, output perintah harus serupa dengan berikut.

   ```
   $ java8 -classpath "/opt/cloudhsm/java/*" org.junit.runner.JUnitCore TestBasicFunctionality
   
   JUnit version 4.11
   .2018-08-20 17:53:48,514 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:33) - Adding provider.
   2018-08-20 17:53:48,612 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:42) - Logging in.
   2018-08-20 17:53:48,612 INFO [main] cfm2.LoginManager (LoginManager.java:104) - Looking for credentials in HsmCredentials.properties
   2018-08-20 17:53:48,612 INFO [main] cfm2.LoginManager (LoginManager.java:122) - Looking for credentials in System.properties
   2018-08-20 17:53:48,613 INFO [main] cfm2.LoginManager (LoginManager.java:130) - Looking for credentials in System.env
    SDK Version: 2.03
   2018-08-20 17:53:48,655 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:54) - Generating AES Key with key size 256.
   2018-08-20 17:53:48,698 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:63) - Encrypting with AES Key.
   2018-08-20 17:53:48,705 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:84) - Deleting AES Key.
   2018-08-20 17:53:48,707 DEBUG [main] TestBasicFunctionality (TestBasicFunctionality.java:92) - Logging out.
   
   Time: 0.205
   
   OK (1 test)
   ```

## Langkah 3: Berikan kredensil ke penyedia JCE
<a name="java-library-credentials"></a>

HSMs perlu mengotentikasi aplikasi Java Anda sebelum aplikasi dapat menggunakannya. Setiap aplikasi dapat menggunakan satu sesi. HSMs mengautentikasi sesi dengan menggunakan login eksplisit atau metode login implisit.

**Login eksplisit** — Metode ini memungkinkan Anda memberikan kredensial CloudHSM langsung dalam aplikasi. Menggunakan metode `LoginManager.login()`, yaitu Anda melewati nama pengguna CU, kata sandi, dan ID partisi HSM. Untuk informasi lebih lanjut menggunakan metode login eksplisit, lihat sampel kode [Login ke HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java). 

**Login implisit** — Metode ini memungkinkan Anda mengatur kredensial CloudHSM baik dalam file properti baru, properti sistem, atau sebagai variabel lingkungan.
+ **Properti baru file** — Membuat file baru dengan nama `HsmCredentials.properties` dan menambahkannya ke `CLASSPATH` aplikasi. File tersebut harus berisi hal berikut:

  ```
  HSM_PARTITION = PARTITION_1
  HSM_USER = <HSM user name>
  HSM_PASSWORD = <password>
  ```
+ **Properti sistem** — Set kredensial melalui properti sistem saat menjalankan aplikasi Anda. Contoh berikut menunjukkan dua cara berbeda yang dapat dilakukan:

  ```
  $ java -DHSM_PARTITION=PARTITION_1 -DHSM_USER=<HSM user name> -DHSM_PASSWORD=<password>
  ```

  ```
  System.setProperty("HSM_PARTITION","PARTITION_1");
  System.setProperty("HSM_USER","<HSM user name>");
  System.setProperty("HSM_PASSWORD","<password>");
  ```
+ **Variabel lingkungan** — Set kredensial sebagai variabel lingkungan.

  ```
  $ export HSM_PARTITION=PARTITION_1
  $ export HSM_USER=<HSM user name>
  $ export HSM_PASSWORD=<password>
  ```

Kredensial mungkin tidak tersedia jika aplikasi tidak menyediakannya atau jika Anda mencoba operasi sebelum HSM mengautentikasi sesi. Dalam kasus tersebut, pustaka perangkat lunak CloudHSM untuk Java mencari kredensialnya dengan urutan sebagai berikut:

1. `HsmCredentials.properties`

1. Properti sistem

1. Variabel lingkungan

**Penanganan kesalahan**  
Penanganan kesalahan lebih mudah dengan login eksplisit dari metode login implisit. Saat Anda menggunakan kelas `LoginManager`, Anda memiliki kontrol lebih atas bagaimana aplikasi Anda menangani kegagalan. Metode login implisit membuat penanganan kesalahan sulit dipahami ketika kredensialnya tidak valid atau mengalami masalah dalam mengautentikasi HSMs sesi.

# Dasar-dasar manajemen utama di penyedia JCE untuk AWS CloudHSM Client SDK 3
<a name="java-library-key-basics"></a>

Dasar-dasar manajemen kunci dalam penyedia JCE melibatkan mengimpor kunci, mengekspor kunci, memuat kunci dengan pegangan, atau menghapus kunci. Untuk informasi lebih lanjut tentang mengelola kunci, lihat sampel kode [Kelola kunci](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java).

Anda juga dapat menemukan lebih banyak contoh kode penyedia JCE di [Sampel Kode](java-samples_3.md).

# Mekanisme yang didukung untuk SDK Klien 3 untuk SDK AWS CloudHSM Klien 3
<a name="java-lib-supported"></a>

Topik ini memberikan informasi tentang mekanisme yang didukung untuk penyedia JCE dengan AWS CloudHSM Client SDK 3. Untuk informasi tentang antarmuka Java Cryptography Architecture (JCA) dan kelas mesin yang didukung oleh AWS CloudHSM, lihat topik berikut. 

**Topics**
+ [Kunci yang didukung](#java-keys)
+ [Cipher yang didukung](#java-ciphers)
+ [Intisari yang didukung](#java-digests)
+ [Algoritma kode otentikasi pesan berbasis hash (HMAC) yang didukung](#java-mac)
+ [sign/verify Mekanisme yang didukung](#java-sign-verify)
+ [Anotasi mekanisme](#w2aac25c23c25c11c17)

## Kunci yang didukung
<a name="java-keys"></a>

Perpustakaan AWS CloudHSM perangkat lunak untuk Java memungkinkan Anda untuk menghasilkan jenis kunci berikut.
+ AES — 128, 192, dan 256-bit kunci AES.
+ DESede - Kunci 3DES 92 bit. Lihat catatan [1](#java-keys-note-1) di bawah untuk perubahan yang akan datang.
+ Pasangan kunci ECC untuk kurva NIST secp256r1 (P-256), secp384r1 (P-384), dan secp256k1 (Rantai blok).
+ RSA — 2048-bit sampai 4096-bit kunci RSA, dengan penambahan 256 bit.

Selain parameter standar, kami mendukung parameter berikut untuk setiap kunci yang dihasilkan.
+ **Label**: Label kunci yang dapat Anda gunakan untuk mencari kunci.
+ **isExtractable**: Menunjukkan apakah kunci dapat diekspor dari HSM.
+ **isPersistent**: Menunjukkan apakah kunci tetap pada HSM ketika sesi saat berakhir.

**catatan**  
 Java library versi 3.1 menyediakan kemampuan untuk menentukan parameter secara lebih detail. Untuk informasi lebih lanjut, lihat [Atribut Java yang Didukung](java-lib-attributes.md).

## Cipher yang didukung
<a name="java-ciphers"></a>

Pustaka AWS CloudHSM perangkat lunak untuk Java mendukung kombinasi algoritma, mode, dan padding berikut.


| Algoritme | Mode | Bantalan | Catatan | 
| --- | --- | --- | --- | 
| AES | CBC |  `AES/CBC/NoPadding` `AES/CBC/PKCS5Padding`  | Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`.  | 
| AES | ECB |  `AES/ECB/NoPadding` `AES/ECB/PKCS5Padding`  | Menerapkan Cipher.ENCRYPT\$1MODE dan Cipher.DECRYPT\$1MODE. Gunakan AES Transformasi. | 
| AES | CTR |  `AES/CTR/NoPadding`  |  Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`.  | 
| AES | GCM | AES/GCM/NoPadding | Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`, `Cipher.WRAP_MODE`, dan `Cipher.UNWRAP_MODE`.Ketika melakukan enkripsi AES-GCM, HSM mengabaikan vektor inisialisasi (IV) dalam permintaan dan menggunakan IV yang dihasilkannya. Saat operasi selesai, Anda harus memanggil `Cipher.getIV()` untuk mendapatkan IV. | 
| AESWrap | ECB |  `AESWrap/ECB/ZeroPadding` `AESWrap/ECB/NoPadding` `AESWrap/ECB/PKCS5Padding`  |  Menerapkan `Cipher.WRAP_MODE` dan `Cipher.UNWRAP_MODE`. Gunakan AES Transformasi.  | 
| DESede (Tiga DES) | CBC |  `DESede/CBC/NoPadding` `DESede/CBC/PKCS5Padding`  |  Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`. Rutinitas pembuatan kunci menerima ukuran 168 atau 192 bit. Namun, secara internal, semua DESede kunci adalah 192 bit. Lihat catatan [1](#java-keys-note-1) di bawah untuk perubahan yang akan datang.  | 
| DESede (Tiga DES) | ECB | `DESede/ECB/NoPadding``DESede/ECB/PKCS5Padding` | Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`. Rutinitas pembuatan kunci menerima ukuran 168 atau 192 bit. Namun, secara internal, semua DESede kunci adalah 192 bit. Lihat catatan [1](#java-keys-note-1) di bawah untuk perubahan yang akan datang.  | 
| RSA | ECB | `RSA/ECB/NoPadding``RSA/ECB/PKCS1Padding` | Menerapkan `Cipher.ENCRYPT_MODE` dan `Cipher.DECRYPT_MODE`. Lihat catatan [1](#java-keys-note-1) di bawah untuk perubahan yang akan datang. | 
| RSA | ECB | `RSA/ECB/OAEPPadding` `RSA/ECB/OAEPWithSHA-1ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-224ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-256ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-384ANDMGF1Padding` `RSA/ECB/OAEPWithSHA-512ANDMGF1Padding`  |  Menerapkan `Cipher.ENCRYPT_MODE`, `Cipher.DECRYPT_MODE`, `Cipher.WRAP_MODE`, dan `Cipher.UNWRAP_MODE`. `OAEPPadding` adalah `OAEP` dengan jenis bantalan `SHA-1`.  | 
| RSAAESWrap | ECB | OAEPPADDING | Menerapkan Cipher.WRAP\$1Mode dan Cipher.UNWRAP\$1MODE.  | 

## Intisari yang didukung
<a name="java-digests"></a>

Pustaka AWS CloudHSM perangkat lunak untuk Java mendukung intisari pesan berikut.
+ `SHA-1`
+ `SHA-224`
+ `SHA-256`
+ `SHA-384`
+ `SHA-512`

**catatan**  
Data dengan panjang di bawah 16 KB di-hash pada HSM, sementara data yang lebih besar di-hash secara lokal dalam perangkat lunak.

## Algoritma kode otentikasi pesan berbasis hash (HMAC) yang didukung
<a name="java-mac"></a>

Perpustakaan AWS CloudHSM perangkat lunak untuk Java mendukung algoritma HMAC berikut.
+ `HmacSHA1`
+ `HmacSHA224`
+ `HmacSHA256`
+ `HmacSHA384`
+ `HmacSHA512`

## sign/verify Mekanisme yang didukung
<a name="java-sign-verify"></a>

Pustaka AWS CloudHSM perangkat lunak untuk Java mendukung jenis tanda tangan dan verifikasi berikut.

**Jenis Tanda Tangan RSA**
+ `NONEwithRSA`
+ `SHA1withRSA`
+ `SHA224withRSA`
+ `SHA256withRSA`
+ `SHA384withRSA`
+ `SHA512withRSA`
+ `SHA1withRSA/PSS`
+ `SHA224withRSA/PSS`
+ `SHA256withRSA/PSS`
+ `SHA384withRSA/PSS`
+ `SHA512withRSA/PSS`

**Jenis Tanda Tangan ECDSA**
+ `NONEwithECDSA`
+ `SHA1withECDSA`
+ `SHA224withECDSA`
+ `SHA256withECDSA`
+ `SHA384withECDSA`
+ `SHA512withECDSA`

## Anotasi mekanisme
<a name="w2aac25c23c25c11c17"></a>

[1] Sesuai dengan panduan NIST, ini tidak diizinkan untuk cluster dalam mode FIPS setelah 2023. Untuk cluster dalam mode non-FIPS, masih diperbolehkan setelah 2023. Lihat [Kepatuhan FIPS 140: Penutupan Mekanisme 2024](compliance-dep-notif.md#compliance-dep-notif-1) untuk rincian selengkapnya.

# Atribut kunci Java yang didukung untuk AWS CloudHSM Klien SDK 3
<a name="java-lib-attributes"></a>

Topik ini menjelaskan cara menggunakan ekstensi proprietary untuk pustaka Java versi 3.1 untuk menetapkan atribut kunci untuk AWS CloudHSM Client SDK 3. Gunakan ekstensi ini untuk mengatur atribut kunci yang didukung dan nilai-nilainya selama operasi ini:
+ Pembuatan kunci
+ Impor kunci
+ Buka kunci

**catatan**  
Ekstensi untuk menetapkan atribut kunci kustom adalah fitur opsional. Jika Anda sudah memiliki kode yang berfungsi di pustaka Java versi 3.0, Anda tidak perlu memodifikasi kode itu. Kunci yang Anda buat akan terus berisi atribut yang sama seperti sebelumnya. 

**Topics**
+ [Memahami atribut](#java-understanding-attributes)
+ [Atribut yang didukung](#java-attributes)
+ [Menyetel atribut untuk kunci](#java-setting-attributes)
+ [Menyatukan semuanya](#java-attributes-summary)

## Memahami atribut
<a name="java-understanding-attributes"></a>

Anda menggunakan atribut kunci untuk menentukan tindakan apa yang diizinkan pada objek kunci, termasuk kunci publik, pribadi atau rahasia. Anda menentukan atribut kunci dan nilai-nilai selama operasi pembuatan objek kunci. 

Namun, Java Cryptography Extension (JCE) tidak menentukan bagaimana Anda harus menetapkan nilai pada atribut kunci, sehingga sebagian besar tindakan diizinkan secara default. Sebaliknya, PKCS \$1 11 standar menentukan satu set lengkap atribut dengan default lebih ketat. Dimulai dengan pustaka Java versi 3.1, CloudHSM menyediakan ekstensi proprietary yang memungkinkan Anda untuk mengatur nilai yang lebih ketat untuk atribut yang umum digunakan. 

## Atribut yang didukung
<a name="java-attributes"></a>

Anda dapat mengatur nilai untuk atribut yang tercantum dalam tabel di bawah ini. Sebagai praktik terbaik, tetapkan hanya nilai untuk atribut yang ingin Anda buat ketat. Jika Anda tidak menentukan nilai, CloudHSM menggunakan nilai default yang ditentukan dalam tabel di bawah ini. Sel kosong di kolom Nilai Default menunjukkan bahwa tidak ada nilai default tertentu yang ditetapkan untuk atribut.


****  

| Atribut | Nilai Default | Catatan | 
| --- | --- | --- | 
|  | Kunci Simetris | Kunci Publik dalam Pasangan Kunci | Kunci Pribadi dalam Pasangan Kunci |  | 
| CKA\$1TOKEN | FALSE | FALSE | FALSE | Kunci permanen yang direplikasi HSMs di semua klaster dan disertakan dalam cadangan. CKA\$1TOKEN = FALSE menyiratkan kunci sesi, yang hanya dimuat ke satu HSM dan secara otomatis dihapus ketika koneksi ke HSM rusak. | 
| CKA\$1LABEL |   |  |  | String yang ditentukan pengguna. Hal ini memungkinkan Anda untuk dengan mudah mengidentifikasi kunci pada HSM Anda.  | 
| CKA\$1EXTRACTABLE | TRUE |  | TRUE | Benar menunjukkan Anda dapat mengekspor kunci ini keluar dari HSM. | 
| CKA\$1ENCRYPT | TRUE | TRUE |  | Benar menunjukkan Anda dapat menggunakan kunci untuk mengenkripsi penyangga apa pun. | 
| CKA\$1DECRYPT | TRUE |  | TRUE | Benar menunjukkan Anda dapat menggunakan kunci untuk mendekripsi penyangga apa pun. Anda umumnya mengatur ini ke FALSE untuk kunci dengan CKA\$1WRAP diatur ke true.  | 
| CKA\$1WRAP | TRUE | TRUE |  | Benar menunjukkan Anda dapat menggunakan kunci untuk membungkus kunci lain. Anda biasanya akan mengatur ini ke FALSE untuk kunci privat. | 
| CKA\$1UNWRAP | TRUE |  | TRUE | Benar menunjukkan Anda dapat menggunakan kunci untuk membungkus kunci lain. | 
| CKA\$1SIGN | TRUE |  | TRUE | Benar menunjukkan Anda dapat menggunakan kunci untuk menandatangani digest pesan. Hal ini umumnya diatur ke FALSE untuk kunci publik dan kunci privat yang telah Anda arsipkan. | 
| CKA\$1VERIFY | TRUE | TRUE |  | Benar menunjukkan Anda dapat menggunakan kunci untuk menandatangani digest pesan. Hal ini umumnya diatur ke FALSE untuk kunci privat. | 
| CKA\$1PRIVATE | TRUE | TRUE | TRUE | Benar menunjukkan bahwa pengguna tidak dapat mengakses kunci sampai pengguna diautentikasi. Untuk kejelasan, pengguna tidak dapat mengakses kunci apa pun di CloudHSM sampai mereka diautentikasi, bahkan jika atribut ini diatur ke FALSE. | 

**catatan**  
Anda mendapatkan dukungan yang lebih luas untuk atribut di pustaka PKCS \$111. Untuk informasi lebih lanjut, lihat [Atribut PKCS \$111 yang Didukung](pkcs11-attributes.md).

## Menyetel atribut untuk kunci
<a name="java-setting-attributes"></a>

`CloudHsmKeyAttributesMap` adalah objek seperti [Peta Java](https://devdocs.io/openjdk~8/java/util/map), yang dapat Anda gunakan untuk mengatur nilai atribut untuk objek kunci. Metode untuk fungsi `CloudHsmKeyAttributesMap` yang mirip dengan metode yang digunakan untuk manipulasi peta Java. 

Untuk mengatur nilai kustom pada atribut, Anda memiliki dua opsi:
+ Gunakan metode yang tercantum dalam tabel berikut
+ Gunakan pola pembangun yang ditunjukkan kemudian dalam dokumen ini

Atribut peta objek mendukung metode berikut untuk mengatur atribut:


****  

| Operasi | Nilai Pengembalian | Metode `CloudHSMKeyAttributesMap` | 
| --- | --- | --- | 
| Dapatkan nilai atribut kunci untuk kunci yang ada | Obyek (berisi nilai) atau nol |  **get**(keyAttribute)  | 
| Isi nilai satu atribut kunci  | Nilai sebelumnya terkait dengan atribut kunci, atau nol jika tidak ada pemetaan untuk atribut kunci |  **put**(keyAttribute, value)  | 
| Isi nilai untuk beberapa atribut kunci | N/A |  **putAll** () keyAttributesMap  | 
| Hapus pasangan nilai kunci dari peta atribut |  Nilai sebelumnya terkait dengan atribut kunci, atau *nol* jika tidak ada pemetaan untuk atribut kunci  |  **remove**(keyAttribute)  | 

**catatan**  
Setiap atribut yang tidak secara eksplisit Anda tentukan diatur ke default yang tercantum dalam tabel sebelumnya di [Atribut yang didukung](#java-attributes). 

### Contoh pola pembangun
<a name="java-setting-attributes-builder-example"></a>

Developer umumnya akan merasa lebih nyaman untuk memanfaatkan kelas melalui pola Builder. Sebagai contoh:

```
import com.amazonaws.cloudhsm.CloudHsmKeyAttributes;
import com.amazonaws.cloudhsm.CloudHsmKeyAttributesMap;
import com.amazonaws.cloudhsm.CloudHsmKeyPairAttributesMap;

CloudHsmKeyAttributesMap keyAttributesSessionDecryptionKey = 
   new CloudHsmKeyAttributesMap.Builder()
      .put(CloudHsmKeyAttributes.CKA_LABEL, "ExtractableSessionKeyEncryptDecrypt")
      .put(CloudHsmKeyAttributes.CKA_WRAP, false)
      .put(CloudHsmKeyAttributes.CKA_UNWRAP, false)
      .put(CloudHsmKeyAttributes.CKA_SIGN, false)
      .put(CloudHsmKeyAttributes.CKA_VERIFY, false)
      .build();

CloudHsmKeyAttributesMap keyAttributesTokenWrappingKey = 
   new CloudHsmKeyAttributesMap.Builder()
      .put(CloudHsmKeyAttributes.CKA_LABEL, "TokenWrappingKey")
      .put(CloudHsmKeyAttributes.CKA_TOKEN, true)
      .put(CloudHsmKeyAttributes.CKA_ENCRYPT, false)
      .put(CloudHsmKeyAttributes.CKA_DECRYPT, false)
      .put(CloudHsmKeyAttributes.CKA_SIGN, false)
      .put(CloudHsmKeyAttributes.CKA_VERIFY, false)
      .build();
```

Developer juga dapat memanfaatkan set atribut yang telah ditetapkan sebagai cara yang mudah untuk menegakkan praktik terbaik dalam templat kunci. Sebagai contoh:

```
//best practice template for wrapping keys

CloudHsmKeyAttributesMap commonKeyAttrs = new CloudHsmKeyAttributesMap.Builder()
    .put(CloudHsmKeyAttributes.CKA_EXTRACTABLE, false)
    .put(CloudHsmKeyAttributes.CKA_DECRYPT, false)
    .build();

// initialize a new instance of CloudHsmKeyAttributesMap by copying commonKeyAttrs
// but with an appropriate label

CloudHsmKeyAttributesMap firstKeyAttrs = new CloudHsmKeyAttributesMap(commonKeyAttrs);
firstKeyAttrs.put(CloudHsmKeyAttributes.CKA_LABEL, "key label");

// alternatively, putAll() will overwrite existing values to enforce conformance

CloudHsmKeyAttributesMap secondKeyAttrs = new CloudHsmKeyAttributesMap();
secondKeyAttrs.put(CloudHsmKeyAttributes.CKA_DECRYPT, true);
secondKeyAttrs.put(CloudHsmKeyAttributes.CKA_ENCRYPT, true);
secondKeyAttrs.put(CloudHsmKeyAttributes.CKA_LABEL, “safe wrapping key”);
secondKeyAttrs.putAll(commonKeyAttrs); // will overwrite CKA_DECRYPT to be FALSE
```

### Menetapkan atribut untuk key pair
<a name="java-setting-attributes-key-pair"></a>

Gunakan kelas Java `CloudHsmKeyPairAttributesMap` untuk menangani atribut kunci untuk pasangan kunci. `CloudHsmKeyPairAttributesMap` merangkum dua objek `CloudHsmKeyAttributesMap`; satu untuk kunci publik dan satu untuk kunci privat.

Untuk mengatur atribut individu untuk kunci publik dan kunci privat secara terpisah, Anda dapat menggunakan metode `put()` pada objek peta `CloudHsmKeyAttributes` yang terkait untuk kunci itu. Gunakan metode `getPublic()` untuk mengambil peta atribut untuk kunci publik, dan gunakan `getPrivate()` untuk mengambil peta atribut untuk kunci privat. Isi nilai dari beberapa atribut kunci bersama-sama untuk kedua pasangan kunci publik dan privat menggunakan `putAll()` dengan peta atribut pasangan kunci sebagai argumen.

### Contoh pola pembangun
<a name="java-setting-attributes-key-pair-builder-example"></a>

Developer umumnya akan merasa lebih nyaman untuk mengatur atribut kunci melalui pola Builder. Contoh:

```
import com.amazonaws.cloudhsm.CloudHsmKeyAttributes;
import com.amazonaws.cloudhsm.CloudHsmKeyAttributesMap;
import com.amazonaws.cloudhsm.CloudHsmKeyPairAttributesMap;

//specify attributes up-front 
CloudHsmKeyAttributesMap keyAttributes = 
    new CloudHsmKeyAttributesMap.Builder()
        .put(CloudHsmKeyAttributes.CKA_SIGN, false)
        .put(CloudHsmKeyAttributes.CKA_LABEL, "PublicCertSerial12345")
        .build();

CloudHsmKeyPairAttributesMap keyPairAttributes =
    new CloudHsmKeyPairAttributesMap.Builder()
        .withPublic(keyAttributes)
        .withPrivate(
            new CloudHsmKeyAttributesMap.Builder() //or specify them inline 
                .put(CloudHsmKeyAttributes.CKA_LABEL, "PrivateCertSerial12345")
                .put (CloudHSMKeyAttributes.CKA_WRAP, FALSE)
                .build()
        )
        .build();
```

**catatan**  
[Untuk informasi selengkapnya tentang ekstensi kepemilikan ini, lihat arsip [Javadoc](https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Docs/CloudHsm_CustomKeyAttributes_Javadoc.zip) dan sampelnya.](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/CustomKeyAttributesRunner.java) GitHub Untuk menjelajahi Javadoc, unduh dan perluas arsip.

## Menyatukan semuanya
<a name="java-attributes-summary"></a>

Untuk menentukan atribut kunci dengan operasi kunci Anda, ikuti langkah berikut:

1. Instantiate `CloudHsmKeyAttributesMap` untuk kunci simetris atau `CloudHsmKeyPairAttributesMap` untuk pasangan kunci.

1. Tentukan objek atribut dari langkah 1 dengan atribut kunci dan nilai-nilai yang diperlukan.

1. Instantiate kelas `Cavium*ParameterSpec`, sesuai dengan jenis kunci tertentu Anda, dan masuk ke konstruktor objek atribut yang dikonfigurasi ini.

1. Masukkan objek `Cavium*ParameterSpec` ke kelas atau metode kripto yang sesuai.

Untuk referensi, tabel berikut berisi kelas dan metode `Cavium*ParameterSpec` yang mendukung atribut kunci kustom.


****  

| Tipe Kunci | Kelas Spesifikasi Parameter | Contoh Konstruktor | 
| --- | --- | --- | 
| Kelas Dasar | CaviumKeyGenAlgorithmParameterSpec | CaviumKeyGenAlgorithmParameterSpec(CloudHsmKeyAttributesMap keyAttributesMap) | 
| DES | CaviumDESKeyGenParameterSpec | CaviumDESKeyGenParameterSpec(int keySize, byte[] iv, CloudHsmKeyAttributesMap keyAttributesMap) | 
| RSA | CaviumRSAKeyGenParameterSpec | CaviumRSAKeyGenParameterSpec(int keysize, BigInteger publicExponent, CloudHsmKeyPairAttributesMap keyPairAttributesMap) | 
| Rahasia | CaviumGenericSecretKeyGenParameterSpec | CaviumGenericSecretKeyGenParameterSpec(int size, CloudHsmKeyAttributesMap keyAttributesMap) | 
| AES | CaviumAESKeyGenParameterSpec | CaviumAESKeyGenParameterSpec(int keySize, byte[] iv, CloudHsmKeyAttributesMap keyAttributesMap) | 
| EC | CaviumECGenParameterSpec | CaviumECGenParameterSpec(String stdName, CloudHsmKeyPairAttributesMap keyPairAttributesMap) | 

### Contoh kode: Buat dan bungkus kunci
<a name="example-generate-wrap-key"></a>

Contoh kode singkat ini menunjukkan langkah-langkah untuk dua operasi yang berbeda: Pembuatan Kunci dan Pembungkusan Kunci:

```
// Set up the desired key attributes

KeyGenerator keyGen = KeyGenerator.getInstance("AES", "Cavium");
CaviumAESKeyGenParameterSpec keyAttributes = new CaviumAESKeyGenParameterSpec(
    256,
    new CloudHsmKeyAttributesMap.Builder()
        .put(CloudHsmKeyAttributes.CKA_LABEL, "MyPersistentAESKey")
        .put(CloudHsmKeyAttributes.CKA_EXTRACTABLE, true)
        .put(CloudHsmKeyAttributes.CKA_TOKEN, true)
        .build()
);

// Assume we already have a handle to the myWrappingKey
// Assume we already have the wrappedBytes to unwrap

// Unwrap a key using Custom Key Attributes

CaviumUnwrapParameterSpec unwrapSpec = new CaviumUnwrapParameterSpec(myInitializationVector, keyAttributes);

Cipher unwrapCipher = Cipher.getInstance("AESWrap", "Cavium");
unwrapCipher.init(Cipher.UNWRAP_MODE, myWrappingKey, unwrapSpec);
Key unwrappedKey = unwrapCipher.unwrap(wrappedBytes, "AES", Cipher.SECRET_KEY);
```

# Contoh kode untuk pustaka AWS CloudHSM perangkat lunak untuk Java untuk Client SDK 3
<a name="java-samples_3"></a>

Topik ini menyediakan sumber daya dan informasi tentang contoh kode Java untuk AWS CloudHSM Client SDK 3.

## Prasyarat
<a name="java-samples-prereqs"></a>

 Sebelum menjalankan sampel, Anda harus mengatur lingkungan Anda:
+ Instal dan konfigurasi [Penyedia Java Cryptographic Extension (JCE)](java-library-install.md#install-java-library) dan [paket klien AWS CloudHSM](cmu-install-and-configure-client-linux.md). 
+ Siapkan [nama pengguna HSM dan kata sandi](manage-hsm-users.md) yang valid. Izin pengguna kriptografi (CU) cukup untuk tugas-tugas ini. Aplikasi Anda menggunakan kredensial ini untuk login ke HSM di setiap contoh.
+ Tentukan cara memberikan kredensial ke [penyedia JCE](java-library-install.md#java-library-credentials).

## Sampel Kode
<a name="java-samples-code"></a>

Sampel kode berikut menunjukkan cara menggunakan [penyedia JCE AWS CloudHSM](java-library.md) untuk melakukan tugas dasar. Lebih banyak contoh kode tersedia di [GitHub](https://github.com/aws-samples/aws-cloudhsm-jce-examples/).
+ [Masuk ke HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java)
+ [Kelola kunci](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/KeyUtilitiesRunner.java)
+ [Hasilkan kunci AES](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/SymmetricKeys.java)
+ [Enkripsi dan dekripsi dengan AES-GCM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/AESGCMEncryptDecryptRunner.java)
+ [Enkripsi dan dekripsi dengan AES-CTR]( https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/AESCTREncryptDecryptRunner.java)
+ [ https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/DESedeECBEncryptDecryptRunner.java]( https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/DESedeECBEncryptDecryptRunner.java)
+ [Bungkus dan buka kunci dengan AES-GCM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/AESGCMWrappingRunner.java)
+ [Bungkus dan buka kunci dengan AES](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/AESWrappingRunner.java)
+ [Bungkus dan buka kunci dengan RSA](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/RSAWrappingRunner.java)
+ [Gunakan atribut kunci yang didukung](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/CustomKeyAttributesRunner.java)
+ [Enumerasi kunci di toko kunci](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/KeyStoreExampleRunner.java)
+ [Gunakan toko kunci CloudHSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/CloudHSMKeyStoreExampleRunner.java)
+ [Menandatangani pesan dalam sampel multi-utas](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/SignThreadedRunner.java)
+ [Masuk dan Verifikasi dengan Kunci EC](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/ECOperationsRunner.java)

[1] Sesuai dengan panduan NIST, ini tidak diizinkan untuk cluster dalam mode FIPS setelah 2023. Untuk cluster dalam mode non-FIPS, masih diperbolehkan setelah 2023. Lihat [Kepatuhan FIPS 140: Penutupan Mekanisme 2024](compliance-dep-notif.md#compliance-dep-notif-1) untuk rincian selengkapnya.

# AWS CloudHSM KeyStore Kelas Java untuk Client SDK 3
<a name="alternative-keystore"></a>

 AWS CloudHSM `KeyStore`**Kelas ini menyediakan penyimpanan PKCS12 kunci tujuan khusus yang memungkinkan akses ke AWS CloudHSM kunci melalui aplikasi seperti **keytool** dan jarsigner.** Penyimpanan kunci ini dapat menyimpan sertifikat bersama dengan data kunci Anda dan menghubungkannya dengan data kunci yang disimpan di AWS CloudHSM. 

**catatan**  
Karena sertifikat adalah informasi publik, dan untuk memaksimalkan kapasitas penyimpanan untuk kunci kriptografi, AWS CloudHSM tidak mendukung penyimpanan sertifikat. HSMs

 AWS CloudHSM `KeyStore`Kelas mengimplementasikan `KeyStore` Service Provider Interface (SPI) dari Java Cryptography Extension (JCE). Untuk informasi selengkapnya tentang penggunaan`KeyStore`, lihat [Kelas KeyStore](https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html).

## Pilih penyimpanan kunci yang sesuai untuk AWS CloudHSM Client SDK 3
<a name="choosing_keystore"></a>

Penyedia AWS CloudHSM Java Cryptographic Extension (JCE) dilengkapi dengan pass-through default, read-only key store yang meneruskan semua transaksi ke HSM. Penyimpanan kunci default ini berbeda dari tujuan khusus AWS CloudHSM KeyStore. Dalam kebanyakan situasi, Anda akan mendapatkan performa waktu aktif yang lebih baik dan throughput dengan menggunakan default. Anda hanya boleh menggunakan AWS CloudHSM KeyStore untuk aplikasi di mana Anda memerlukan dukungan untuk sertifikat dan operasi berbasis sertifikat selain membongkar operasi kunci ke HSM.

Meskipun kedua penyimpanan kunci menggunakan penyedia JCE untuk operasi, keduanya adalah entitas independen dan tidak bertukar informasi satu sama lain. 

Muat penyimpanan kunci default untuk aplikasi Java Anda sebagai berikut:

```
KeyStore ks = KeyStore.getInstance("Cavium");
```

Muat CloudHSM tujuan khusus sebagai berikut: KeyStore 

```
KeyStore ks = KeyStore.getInstance("CloudHSM")
```

## Inisialisasi AWS CloudHSM KeyStore untuk Client SDK 3
<a name="initialize_cloudhsm_keystore"></a>

Masuk ke cara AWS CloudHSM KeyStore yang sama seperti Anda masuk ke penyedia JCE. Anda dapat menggunakan variabel lingkungan atau file properti sistem, dan Anda harus masuk sebelum mulai menggunakan CloudHSM KeyStore. Untuk contoh masuk ke HSM menggunakan penyedia JCE, lihat [Masuk ke HSM](https://github.com/aws-samples/aws-cloudhsm-jce-examples/blob/master/src/main/java/com/amazonaws/cloudhsm/examples/LoginRunner.java).

Jika diinginkan, Anda dapat menentukan kata sandi untuk mengenkripsi PKCS12 file lokal yang menyimpan data penyimpanan kunci. Saat Anda membuat AWS CloudHSM Keystore, Anda mengatur kata sandi dan memberikannya saat menggunakan metode pemuatan, atur, dan dapatkan.

Buat instance objek CloudHSM baru sebagai berikut: KeyStore 

```
ks.load(null, null);
```

Tulis data penyimpanan kunci ke file menggunakan metode `store`. Sejak saat itu, Anda dapat memuat penyimpanan kunci yang ada menggunakan metode `load` dengan file sumber dan kata sandi sebagai berikut: 

```
ks.load(inputStream, password);
```

## Gunakan AWS CloudHSM KeyStore untuk AWS CloudHSM Client SDK 3
<a name="using_cloudhsm_keystore"></a>

[Objek KeyStore CloudHSM umumnya digunakan melalui aplikasi pihak ketiga [seperti](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jarsigner.html) jarsigner atau keytool.](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html) Anda juga dapat mengakses objek secara langsung dengan kode. 

AWS CloudHSM KeyStore sesuai dengan KeyStore spesifikasi JCE [Class](https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html) dan menyediakan fungsi-fungsi berikut.
+ `load`

  Memuat penyimpanan kunci dari pengaliran input yang diberikan. Jika kata sandi ditetapkan saat menyimpan penyimpanan kunci, kata sandi yang sama ini harus disediakan agar pemuatan berhasil. Atur kedua parameter ke null untuk menginisialisasi sebuah penyimpanan kunci kosong baru.

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  ks.load(inputStream, password);
  ```
+ `aliases`

  Mengembalikan penghitungan nama alias dari semua entri dalam contoh instans penyimpanan kunci yang diberikan. Hasil termasuk objek yang disimpan secara lokal dalam PKCS12 file dan objek yang tinggal di HSM. 

  **Contoh kode:**

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  for(Enumeration<String> entry = ks.aliases(); entry.hasMoreElements();) 
  	{    
  		String label = entry.nextElement();    
  		System.out.println(label);
  	}
  ```
+ `ContainsAlias`

  Mengembalikan nilai true jika penyimpanan kunci memiliki akses ke setidaknya satu objek dengan alias yang ditentukan. Toko kunci memeriksa objek yang disimpan secara lokal dalam PKCS12 file dan objek yang tinggal di HSM.
+ `DeleteEntry`

  Menghapus entri sertifikat dari PKCS12 file lokal. Menghapus data kunci yang disimpan dalam HSM tidak didukung menggunakan file. AWS CloudHSM KeyStore Anda dapat menghapus kunci dengan alat [key\$1mgmt\$1util](https://docs.aws.amazon.com/cloudhsm/latest/userguide/key_mgmt_util.html) CloudHSM.
+ `GetCertificate`

  Mengembalikan sertifikat yang terkait dengan alias jika tersedia. Jika alias tidak ada atau mereferensikan objek yang bukan sertifikat, fungsi mengembalikan NULL. 

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  Certificate cert = ks.getCertificate(alias)
  ```
+ `GetCertificateAlias`

  Mengembalikan nama (alias) dari entri penyimpanan kunci pertama yang datanya cocok dengan sertifikat yang diberikan. 

  ```
  KeyStore ks = KeyStore.getInstance("CloudHSM");
  String alias = ks.getCertificateAlias(cert)
  ```
+ `GetCertificateChain`

  Mengembalikan rantai sertifikat yang terkait dengan alias yang diberikan. Jika alias tidak ada atau mereferensikan objek yang bukan sertifikat, fungsi mengembalikan NULL. 
+ `GetCreationDate`

  Mengembalikan tanggal pembuatan entri yang diidentifikasi oleh alias yang diberikan. Jika tanggal pembuatan tidak tersedia, fungsi mengembalikan tanggal saat sertifikat menjadi valid.
+ `GetKey`

  GetKey diteruskan ke HSM dan mengembalikan objek kunci yang sesuai dengan label yang diberikan. Seperti yang `getKey` secara langsung menanyakan HSM, itu dapat digunakan untuk kunci apa pun pada HSM terlepas dari apakah itu dihasilkan oleh. KeyStore 

  ```
  Key key = ks.getKey(keyLabel, null);
  ```
+ `IsCertificateEntry`

  Memeriksa apakah entri dengan alias yang diberikan merupakan entri sertifikat. 
+ `IsKeyEntry`

  Memeriksa apakah entri dengan alias yang diberikan merupakan entri kunci. Tindakan mencari PKCS12 file dan HSM untuk alias. 
+ `SetCertificateEntry`

  Menetapkan sertifikat yang diberikan untuk alias yang diberikan. Jika alias yang diberikan sudah digunakan untuk me ngidentifikasi kunci atau sertifikat,`KeyStoreException`dikeluarkan. Anda dapat menggunakan kode JCE untuk mendapatkan objek kunci dan kemudian menggunakan KeyStore `SetKeyEntry` metode untuk mengaitkan sertifikat ke kunci.
+ `SetKeyEntry` dengan `byte[]` kunci

  **API ini saat ini tidak didukung dengan Client SDK 3.**
+ `SetKeyEntry` dengan objek `Key`

  Menetapkan kunci yang diberikan untuk alias yang diberikan dan menyimpannya di dalam HSM. Jika objek `Key` bukan tipe `CaviumKey`, kunci diimpor ke HSM sebagai kunci sesi yang dapat diekstrak. 

  Jika objek `Key` adalah tipe `PrivateKey`, objek harus disertai dengan rantai sertifikat yang sesuai. 

  Jika alias sudah ada, panggilan `SetKeyEntry` mengeluarkan `KeyStoreException` dan mencegah kunci ditimpa. Jika kunci harus ditimpa, gunakan KMU atau JCE untuk tujuan itu. 
+ `EngineSize`

  Mengembalikan jumlah entri dalam penyimpanan kunci.
+ `Store`

  Menyimpan penyimpanan kunci ke aliran output yang diberikan sebagai PKCS12 file dan mengamankannya dengan kata sandi yang diberikan. Selain itu, semua kunci dimuat tetap ada (yang ditetapkan menggunakan panggilan`setKey`).

# API Kriptografi: Generasi Berikutnya (CNG) dan penyedia penyimpanan kunci (KSP) untuk AWS CloudHSM
<a name="ksp-v3-library"></a>

 AWS CloudHSM Klien untuk Windows termasuk penyedia CNG dan KSP.

*Penyedia penyimpanan kunci* (KSPs) mengaktifkan penyimpanan dan pengambilan kunci. Sebagai contoh, jika Anda menambahkan peran Microsoft Active Directory Certificate Services (AD CS) ke server Windows dan memilih untuk membuat kunci privat baru untuk otoritas sertifikat (CA), Anda dapat memilih KSP yang akan mengelola penyimpanan kunci. Bila Anda mengonfigurasi peran AD CS, Anda dapat memilih KSP ini. Untuk informasi selengkapnya, lihat [Buat Windows Server CA](win-ca-overview-sdk5.md#win-ca-setup-sdk5). 

*API Kriptografi: Next Generation (CNG)* adalah API kriptografi khusus untuk sistem operasi Microsoft Windows. CNG mengizinkan developer untuk menggunakan teknik kriptografi untuk mengamankan aplikasi berbasis Windows. Pada tingkat tinggi, AWS CloudHSM implementasi CNG menyediakan fungsionalitas berikut: 
+ **Primitif Kriptografi** — memungkinkan Anda melakukan operasi kriptografi mendasar.
+ **Kunci Impor dan Ekspor** - memungkinkan Anda untuk mengimpor dan mengekspor kunci asimetris.
+ **Data Protection API (CNG DPAPI)** — memungkinkan Anda untuk dengan mudah mengenkripsi dan mendekripsi data.
+ **Key Storage and Retrieval** -—memungkinkan Anda untuk menyimpan dan mengisolasi kunci pribadi dari symmetric key pair dengan aman.

**Topics**
+ [Verifikasi Penyedia KSP dan CNG untuk AWS CloudHSM](ksp-v3-library-install.md)
+ [Prasyarat untuk menggunakan Klien Windows AWS CloudHSM](ksp-library-prereq.md)
+ [Kaitkan AWS CloudHSM kunci dengan sertifikat](ksp-library-associate-key-certificate.md)
+ [Contoh kode untuk penyedia CNG untuk AWS CloudHSM](ksp-library-sample.md)

# Verifikasi Penyedia KSP dan CNG untuk AWS CloudHSM
<a name="ksp-v3-library-install"></a>

Penyedia KSP dan CNG diinstal ketika Anda menginstal klien Windows AWS CloudHSM . Anda dapat menginstal klien dengan mengikuti langkah-langkah di [Instal klien (Windows)](kmu-install-and-configure-client-win.md). 

Gunakan bagian berikut untuk memverifikasi pemasangan penyedia.

## Konfigurasikan dan jalankan AWS CloudHSM klien Windows
<a name="ksp-configure-client-windows"></a>

Untuk memulai klien CloudHSM Windows, Anda harus terlebih dahulu memenuhi [Prasyarat](ksp-library-prereq.md). Kemudian, perbarui file konfigurasi yang digunakan penyedia dan mulai klien dengan menyelesaikan langkah-langkah di bawah ini. Anda perlu melakukan langkah-langkah ini saat pertama kali Anda menggunakan penyedia KSP dan CNG dan setelah Anda menambah atau menghapus HSMs di cluster Anda. Dengan cara AWS CloudHSM ini, mampu menyinkronkan data dan menjaga konsistensi HSMs di semua cluster.

### Langkah 1: Hentikan AWS CloudHSM klien
<a name="ksp-stop-cloudhsm-client"></a>

Sebelum Anda memperbarui file konfigurasi yang digunakan penyedia, hentikan AWS CloudHSM klien. Jika klien sudah berhenti, menjalankan perintah stop tidak berpengaruh. 
+ Untuk klien Windows 1.1.2\$1:

  ```
  C:\Program Files\Amazon\CloudHSM>net.exe stop AWSCloudHSMClient
  ```
+ Untuk klien Windows 1.1.1 dan yang lebih lama:

  Gunakan ****Ctrl\$1C**** di jendela perintah tempat Anda memulai klien. AWS CloudHSM 

### Langkah 2: Perbarui file AWS CloudHSM konfigurasi
<a name="ksp-config-a"></a>

Langkah ini menggunakan `-a` parameter [alat Configure](configure-tool.md) untuk menambahkan alamat IP elastic network interface (ENI) dari salah satu HSMs di cluster ke file konfigurasi. 

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\configure.exe" -a <HSM ENI IP>
```

Untuk mendapatkan alamat IP ENI dari HSM di cluster Anda, navigasikan ke AWS CloudHSM konsol, pilih **cluster**, dan pilih cluster yang diinginkan. Anda juga dapat menggunakan [DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)operasi, [perintah deskripsi-cluster](https://docs.aws.amazon.com/cli/latest/reference/cloudhsmv2/describe-clusters.html), atau cmdlet. [Get-HSM2Cluster](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-HSM2Cluster.html) PowerShell Ketik hanya satu alamat IP ENI. Apa pun alamat IP ENI yang Anda gunakan. 

### Langkah 3: Mulai AWS CloudHSM klien
<a name="ksp-start-cloudhsm-client"></a>

Selanjutnya, mulai atau mulai ulang AWS CloudHSM klien. Ketika AWS CloudHSM klien mulai, ia menggunakan alamat IP ENI dalam file konfigurasi untuk query cluster. Kemudian menambahkan alamat IP ENI dari semua HSMs di cluster ke file informasi cluster. 
+ Untuk klien Windows 1.1.2\$1:

  ```
  C:\Program Files\Amazon\CloudHSM>net.exe start AWSCloudHSMClient
  ```
+ Untuk klien Windows 1.1.1 dan yang lebih lama:

  ```
  C:\Program Files\Amazon\CloudHSM>start "cloudhsm_client" cloudhsm_client.exe C:\ProgramData\Amazon\CloudHSM\data\cloudhsm_client.cfg
  ```

## Memeriksa penyedia KSP dan CNG
<a name="ksp-check-providers"></a>

Anda dapat menggunakan salah satu dari perintah berikut untuk menentukan penyedia yang diinstal pada sistem Anda. Perintah daftar penyedia KSP dan CNG terdaftar. Parameter klien AWS CloudHSM tidak perlu berjalan. 

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\ksp_config.exe" -enum
```

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\cng_config.exe" -enum
```

Untuk memverifikasi bahwa penyedia KSP dan CNG diinstal pada instans EC2 Windows Server, Anda akan melihat entri berikut dalam daftar:

```
Cavium CNG Provider
Cavium Key Storage Provider
```

Jika penyedia CNG hilang, jalankan perintah berikut. 

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\cng_config.exe" -register
```

Jika penyedia KSP hilang, jalankan perintah berikut.

```
PS C:\> & "C:\Program Files\Amazon\CloudHSM\ksp_config.exe" -register
```

# Prasyarat untuk menggunakan Klien Windows AWS CloudHSM
<a name="ksp-library-prereq"></a>

Sebelum Anda dapat memulai AWS CloudHSM klien Windows dan menggunakan penyedia KSP dan CNG, Anda harus mengatur kredensi login untuk HSM di sistem Anda. Anda dapat mengatur kredensial melalui Windows Credential Manager atau variabel lingkungan sistem. Kami sarankan Anda menggunakan Windows Credential Manager untuk menyimpan kredensial. Opsi ini tersedia dengan versi AWS CloudHSM klien 2.0.4 dan yang lebih baru. Menggunakan variabel lingkungan lebih mudah untuk mengatur, tapi kurang aman daripada menggunakan Windows Credential Manager.

## Pengelola Kredensional Windows
<a name="wcm"></a>

Anda dapat menggunakan utilitas `set_cloudhsm_credentials` atau antarmuka Windows Credentials Manager.
+ **Menggunakan utilitas `set_cloudhsm_credentials`**:

  Utilitas `set_cloudhsm_credentials` disertakan dalam penginstal Windows Anda. Anda dapat menggunakan utilitas ini untuk dengan mudah melewati kredensial login HSM ke Windows Credential Manager. Jika Anda ingin mengompilasi utilitas ini dari sumber, Anda dapat menggunakan kode Python yang disertakan dalam installer.

  1. Pergi ke folder `C:\Program Files\Amazon\CloudHSM\tools\`.

  1. Jalankan file `set_cloudhsm_credentials.exe` dengan parameter nama pengguna dan kata sandi CU.

     ```
     set_cloudhsm_credentials.exe --username <CU USER> --password <CU PASSWORD>
     ```
+ **Menggunakan antarmuka Credential Manager**:

  Anda dapat menggunakan antarmuka Credential Manager untuk mengelola kredensial Anda secara manual.

  1. Untuk membuka Credential Manager, ketik `credential manager` di kotak pencarian pada bilah tugas dan pilih**Credential Manager**.

  1. Pilih **Kredensial Windows** untuk mengelola kredensial Windows.

  1. Pilih **Tambah kredensial generik** dan isi detail sebagai berikut:
     + Di **Alamat Internet atau Jaringan**, masukkan nama target sebagai `cloudhsm_client`.
     + Di **Nama pengguna** dan **Kata Sandi**, masukkan kredensial CU.
     + Klik **OK**.

## Variabel lingkungan sistem
<a name="enviorn-var"></a>

Anda dapat mengatur variabel lingkungan sistem yang mengidentifikasi HSM dan [pengguna kripto](understanding-users-cmu.md#crypto-user-cmu) (CU) untuk aplikasi Windows Anda. Anda dapat menggunakan [perintah **setx**](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx) untuk mengatur variabel lingkungan sistem, atau mengatur variabel lingkungan sistem permanen [secara terprogram](https://msdn.microsoft.com/en-us/library/system.environment.setenvironmentvariable(v=vs.110).aspx) atau di tab **Lanjutan** dari Panel Kontrol Windows **Properti Sistem**. 

**Awas**  
Ketika Anda mengatur kredensial melalui variabel lingkungan sistem, kata sandi tersedia dalam teks terang pada sistem pengguna. Untuk mengatasi masalah ini, gunakan Windows Credential Manager.

Atur variabel lingkungan sistem berikut:

**`n3fips_password=<CU USERNAME>:<CU PASSWORD>`**  
Mengidentifikasi [pengguna kripto](understanding-users-cmu.md#crypto-user-cmu) (CU) di HSM dan menyediakan semua informasi login yang diperlukan. Aplikasi Anda mengautentikasi dan berjalan sebagai CU ini. Aplikasi memiliki izin CU ini dan dapat melihat dan mengelola hanya kunci yang CU miliki dan bagikan. Untuk membuat CU baru, gunakan [createUser](cloudhsm_mgmt_util-createUser.md). Untuk menemukan yang ada CUs, gunakan [ListUsers](cloudhsm_mgmt_util-listUsers.md).  
Contoh:  

```
setx /m n3fips_password test_user:password123
```

# Kaitkan AWS CloudHSM kunci dengan sertifikat
<a name="ksp-library-associate-key-certificate"></a>

Sebelum Anda dapat menggunakan AWS CloudHSM kunci dengan alat pihak ketiga, seperti Microsoft [SignTool](https://docs.microsoft.com/en-us/windows/win32/seccrypto/signtool), Anda harus mengimpor metadata kunci ke toko sertifikat lokal dan mengaitkan metadata dengan sertifikat. Untuk mengimpor metadata kunci, gunakan utilitas import\$1key.exe yang termasuk dalam CloudHSM versi 3.0 dan lebih tinggi. Langkah-langkah berikut memberikan informasi tambahan, dan contoh output.

## Langkah 1: Impor sertifikat Anda
<a name="import-cert"></a>

Pada Windows, Anda akan dapat mengeklik dua kali sertifikat untuk mengimpornya ke penyimpanan sertifikat lokal Anda. 

Namun, jika klik dua kali tidak bekerja, gunakan [alat Microsoft Certreq](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn296456%28v%3dws.11%29) untuk mengimpor sertifikat ke certificate manager. Sebagai contoh: 

```
certreq -accept <certificatename>
```

Jika tindakan ini gagal dan Anda menerima kesalahan, `Key not found`, lanjutkan ke Langkah 2. Jika sertifikat muncul di penyimpanan kunci Anda, Anda telah menyelesaikan tugas dan tidak diperlukan tindakan lebih lanjut.

## Langkah 2: Kumpulkan informasi pengenal sertifikat
<a name="cert-identifier"></a>

Jika langkah sebelumnya tidak berhasil, Anda harus mengaitkan kunci privat Anda dengan sertifikat. Namun, sebelum Anda dapat membuat kaitan, Anda harus terlebih dahulu menemukan Nama Kontainer Unik dan Nomor Seri sertifikat . Gunakan utilitas, seperti**certutil**, untuk menampilkan informasi sertifikat yang diperlukan. Output sampel berikut dari **certutil** menunjukkan nama wadah dan nomor seri.

```
================ Certificate 1 ================ Serial Number:
			72000000047f7f7a9d41851b4e000000000004Issuer: CN=Enterprise-CANotBefore: 10/8/2019 11:50
			AM NotAfter: 11/8/2020 12:00 PMSubject: CN=www.example.com, OU=Certificate Management,
			O=Information Technology, L=Seattle, S=Washington, C=USNon-root CertificateCert
			Hash(sha1): 7f d8 5c 00 27 bf 37 74 3d 71 5b 54 4e c0 94 20 45 75 bc 65No key provider
			information Simple container name: CertReq-39c04db0-6aa9-4310-93db-db0d9669f42c Unique
			container name: CertReq-39c04db0-6aa9-4310-93db-db0d9669f42c
```



## Langkah 3: Kaitkan kunci AWS CloudHSM pribadi dengan sertifikat
<a name="associate-key-certificate"></a>

Untuk mengaitkan kunci dengan sertifikat, pertama-tama pastikan untuk [memulai daemon AWS CloudHSM klien](key_mgmt_util-setup.md#key_mgmt_util-start-cloudhsm-client). Kemudian, gunakan import\$1key.exe (yang termasuk dalam CloudHSM versi 3.0 dan lebih tinggi) untuk mengaitkan kunci privat dengan sertifikat. Saat menentukan sertifikat, gunakan nama kontainernya yang sederhana. Contoh berikut menunjukkan perintah dan respons. Tindakan ini hanya menyalin metadata kunci; kunci tetap pada HSM.

```
$> import_key.exe –RSA CertReq-39c04db0-6aa9-4310-93db-db0d9669f42c

Successfully opened Microsoft Software Key Storage Provider : 0NCryptOpenKey failed : 80090016
```

## Langkah 4: Perbarui penyimpanan sertifikat
<a name="update-certificate-store"></a>

Pastikan daemon AWS CloudHSM klien masih berjalan. Kemudian, gunakan **certutil** kata kerja,**-repairstore**, untuk memperbarui nomor seri sertifikat. Sampel berikut menunjukkan perintah dan output. Lihat dokumentasi Microsoft untuk informasi tentang [**-repairstore**kata kerja](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc732443(v=ws.11)?redirectedfrom=MSDN#-repairstore).

```
C:\Program Files\Amazon\CloudHSM>certutil -f -csp "Cavium Key Storage Provider"-repairstore my "72000000047f7f7a9d41851b4e000000000004"
my "Personal"
================ Certificate 1 ================
Serial Number: 72000000047f7f7a9d41851b4e000000000004
Issuer: CN=Enterprise-CA
NotBefore: 10/8/2019 11:50 AM
NotAfter: 11/8/2020 12:00 PM
Subject: CN=www.example.com, OU=Certificate Management, O=Information Technology, L=Seattle, S=Washington, C=US
Non-root CertificateCert Hash(sha1): 7f d8 5c 00 27 bf 37 74 3d 71 5b 54 4e c0 94 20 45 75 bc 65       
SDK Version: 3.0 
Key Container = CertReq-39c04db0-6aa9-4310-93db-db0d9669f42c 
Provider = "Cavium Key Storage Provider"
Private key is NOT exportableEncryption test passedCertUtil: -repairstore command completed successfully.
```

Setelah memperbarui nomor seri sertifikat, Anda dapat menggunakan sertifikat ini dan kunci AWS CloudHSM pribadi yang sesuai dengan alat penandatanganan pihak ketiga di Windows.

# Contoh kode untuk penyedia CNG untuk AWS CloudHSM
<a name="ksp-library-sample"></a>

****  
\$1\$1 Contoh kode saja - Tidak untuk penggunaan produksi\$1\$1  
Kode contoh hanya untuk tujuan ilustrasi. Jangan jalankan kode ini dalam produksi.

Contoh berikut menunjukkan cara menghitung penyedia kriptografi terdaftar pada sistem Anda untuk menemukan penyedia CNG yang diinstal dengan klien CloudHSM untuk Windows. Sampel juga menunjukkan cara membuat pasangan kunci asimetris dan bagaimana menggunakan pasangan kunci untuk menandatangani data. 

**penting**  
Sebelum Anda menjalankan contoh ini, Anda harus mengatur kredensial HSM seperti yang dijelaskan dalam prasyarat. Untuk detailnya, lihat [Prasyarat untuk menggunakan Klien Windows AWS CloudHSM](ksp-library-prereq.md). 

```
// CloudHsmCngExampleConsole.cpp : Console application that demonstrates CNG capabilities.
// This example contains the following functions.
//
//   VerifyProvider()          - Enumerate the registered providers and retrieve Cavium KSP and CNG providers.
//   GenerateKeyPair()         - Create an RSA key pair.
//   SignData()                - Sign and verify data.
//

#include "stdafx.h"
#include <Windows.h>

#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#endif

#define CAVIUM_CNG_PROVIDER L"Cavium CNG Provider"
#define CAVIUM_KEYSTORE_PROVIDER L"Cavium Key Storage Provider"

// Enumerate the registered providers and determine whether the Cavium CNG provider
// and the Cavium KSP provider exist.
//
bool VerifyProvider()
{
  NTSTATUS status;
  ULONG cbBuffer = 0;
  PCRYPT_PROVIDERS pBuffer = NULL;
  bool foundCng = false;
  bool foundKeystore = false;

  // Retrieve information about the registered providers.
  //   cbBuffer - the size, in bytes, of the buffer pointed to by pBuffer.
  //   pBuffer - pointer to a buffer that contains a CRYPT_PROVIDERS structure.
  status = BCryptEnumRegisteredProviders(&cbBuffer, &pBuffer);

  // If registered providers exist, enumerate them and determine whether the
  // Cavium CNG provider and Cavium KSP provider have been registered.
  if (NT_SUCCESS(status))
  {
    if (pBuffer != NULL)
    {
      for (ULONG i = 0; i < pBuffer->cProviders; i++)
      {
        // Determine whether the Cavium CNG provider exists.
        if (wcscmp(CAVIUM_CNG_PROVIDER, pBuffer->rgpszProviders[i]) == 0)
        {
          printf("Found %S\n", CAVIUM_CNG_PROVIDER);
          foundCng = true;
        }

        // Determine whether the Cavium KSP provider exists.
        else if (wcscmp(CAVIUM_KEYSTORE_PROVIDER, pBuffer->rgpszProviders[i]) == 0)
        {
          printf("Found %S\n", CAVIUM_KEYSTORE_PROVIDER);
          foundKeystore = true;
        }
      }
    }
  }
  else
  {
    printf("BCryptEnumRegisteredProviders failed with error code 0x%08x\n", status);
  }

  // Free memory allocated for the CRYPT_PROVIDERS structure.
  if (NULL != pBuffer)
  {
    BCryptFreeBuffer(pBuffer);
  }

  return foundCng == foundKeystore == true;
}

// Generate an asymmetric key pair. As used here, this example generates an RSA key pair 
// and returns a handle. The handle is used in subsequent operations that use the key pair. 
// The key material is not available.
//
// The key pair is used in the SignData function.
//
NTSTATUS GenerateKeyPair(BCRYPT_ALG_HANDLE hAlgorithm, BCRYPT_KEY_HANDLE *hKey)
{
  NTSTATUS status;

  // Generate the key pair.
  status = BCryptGenerateKeyPair(hAlgorithm, hKey, 2048, 0);
  if (!NT_SUCCESS(status))
  {
    printf("BCryptGenerateKeyPair failed with code 0x%08x\n", status);
    return status;
  }

  // Finalize the key pair. The public/private key pair cannot be used until this 
  // function is called.
  status = BCryptFinalizeKeyPair(*hKey, 0);
  if (!NT_SUCCESS(status))
  {
    printf("BCryptFinalizeKeyPair failed with code 0x%08x\n", status);
    return status;
  }

  return status;
}

// Sign and verify data using the RSA key pair. The data in this function is hardcoded
// and is for example purposes only.
//
NTSTATUS SignData(BCRYPT_KEY_HANDLE hKey)
{
  NTSTATUS status;
  PBYTE sig;
  ULONG sigLen;
  ULONG resLen;
  BCRYPT_PKCS1_PADDING_INFO pInfo;

  // Hardcode the data to be signed (for demonstration purposes only).
  PBYTE message = (PBYTE)"d83e7716bed8a20343d8dc6845e57447";
  ULONG messageLen = strlen((char*)message);

  // Retrieve the size of the buffer needed for the signature.
  status = BCryptSignHash(hKey, NULL, message, messageLen, NULL, 0, &sigLen, 0);
  if (!NT_SUCCESS(status))
  {
    printf("BCryptSignHash failed with code 0x%08x\n", status);
    return status;
  }

  // Allocate a buffer for the signature.
  sig = (PBYTE)HeapAlloc(GetProcessHeap(), 0, sigLen);
  if (sig == NULL)
  {
    return -1;
  }

  // Use the SHA256 algorithm to create padding information.
  pInfo.pszAlgId = BCRYPT_SHA256_ALGORITHM;

  // Create a signature.
  status = BCryptSignHash(hKey, &pInfo, message, messageLen, sig, sigLen, &resLen, BCRYPT_PAD_PKCS1);
  if (!NT_SUCCESS(status))
  {
    printf("BCryptSignHash failed with code 0x%08x\n", status);
    return status;
  }

  // Verify the signature.
  status = BCryptVerifySignature(hKey, &pInfo, message, messageLen, sig, sigLen, BCRYPT_PAD_PKCS1);
  if (!NT_SUCCESS(status))
  {
    printf("BCryptVerifySignature failed with code 0x%08x\n", status);
    return status;
  }

  // Free the memory allocated for the signature.
  if (sig != NULL)
  {
    HeapFree(GetProcessHeap(), 0, sig);
    sig = NULL;
  }

  return 0;
}

// Main function.
//
int main()
{
  NTSTATUS status;
  BCRYPT_ALG_HANDLE hRsaAlg;
  BCRYPT_KEY_HANDLE hKey = NULL;

  // Enumerate the registered providers.
  printf("Searching for Cavium providers...\n");
  if (VerifyProvider() == false) {
    printf("Could not find the CNG and Keystore providers\n");
    return 1;
  }

  // Get the RSA algorithm provider from the Cavium CNG provider.
  printf("Opening RSA algorithm\n");
  status = BCryptOpenAlgorithmProvider(&hRsaAlg, BCRYPT_RSA_ALGORITHM, CAVIUM_CNG_PROVIDER, 0);
  if (!NT_SUCCESS(status))
  {
    printf("BCryptOpenAlgorithmProvider RSA failed with code 0x%08x\n", status);
    return status;
  }

  // Generate an asymmetric key pair using the RSA algorithm.
  printf("Generating RSA Keypair\n");
  GenerateKeyPair(hRsaAlg, &hKey);
  if (hKey == NULL)
  {
    printf("Invalid key handle returned\n");
    return 0;
  }
  printf("Done!\n");

  // Sign and verify [hardcoded] data using the RSA key pair.
  printf("Sign/Verify data with key\n");
  SignData(hKey);
  printf("Done!\n");

  // Remove the key handle from memory.
  status = BCryptDestroyKey(hKey);
  if (!NT_SUCCESS(status))
  {
    printf("BCryptDestroyKey failed with code 0x%08x\n", status);
    return status;
  }

  // Close the RSA algorithm provider.
  status = BCryptCloseAlgorithmProvider(hRsaAlg, NULL);
  if (!NT_SUCCESS(status))
  {
    printf("BCryptCloseAlgorithmProvider RSA failed with code 0x%08x\n", status);
    return status;
  }

  return 0;
}
```