

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

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

------