

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

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

------

