Menggunakan Client SDK 5 untuk berintegrasi dengan Java Keytool dan Jarsigner - AWS CloudHSM

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

Menggunakan Client SDK 5 untuk berintegrasi dengan Java Keytool dan Jarsigner

AWS CloudHSM key store adalah toko kunci JCE tujuan khusus yang menggunakan sertifikat yang terkait dengan kunci pada HSM Anda melalui alat pihak ketiga seperti dan. keytool jarsigner AWS CloudHSM tidak menyimpan sertifikat di HSM, karena sertifikat bersifat publik, data non-rahasia. Toko AWS CloudHSM kunci menyimpan sertifikat dalam file lokal dan memetakan sertifikat ke kunci yang sesuai di HSM Anda.

Saat Anda menggunakan toko AWS CloudHSM kunci untuk menghasilkan kunci baru, tidak ada entri yang dihasilkan di file penyimpanan kunci lokal — kunci dibuat di HSM. Demikian pula, ketika Anda menggunakan penyimpanan kunci AWS CloudHSM untuk mencari kunci, pencarian diteruskan ke HSM. Ketika Anda menyimpan sertifikat di toko AWS CloudHSM kunci, penyedia memverifikasi bahwa key pair dengan alias yang sesuai ada di HSM, dan kemudian mengaitkan sertifikat yang disediakan dengan key pair yang sesuai.

Prasyarat

Untuk menggunakan penyimpanan AWS CloudHSM kunci, Anda harus terlebih dahulu menginisialisasi dan mengkonfigurasi AWS CloudHSM JCE SDK.

Langkah 1: Instal JCE

Untuk menginstal JCE, termasuk prasyarat AWS CloudHSM klien, ikuti langkah-langkah untuk menginstal perpustakaan Java.

Langkah 2: Tambahkan kredensial login HSM ke variabel lingkungan

Atur variabel lingkungan berisi kredensial login HSM Anda.

Linux
$ export HSM_USER=<HSM user name>
$ export HSM_PASSWORD=<HSM password>
Windows
PS C:\> $Env:HSM_USER=<HSM user name>
PS C:\> $Env:HSM_PASSWORD=<HSM password>
catatan

AWS CloudHSM JCE menawarkan berbagai opsi login. Untuk menggunakan penyimpanan AWS CloudHSM kunci dengan aplikasi pihak ketiga, Anda harus menggunakan login implisit dengan variabel lingkungan. Jika Anda ingin menggunakan login eksplisit melalui kode aplikasi, Anda harus membangun aplikasi Anda sendiri menggunakan toko AWS CloudHSM kunci. Untuk informasi tambahan, lihat artikel tentang Menggunakan AWS CloudHSM Key Store.

Langkah 3: Mendaftarkan penyedia JCE

Untuk mendaftarkan penyedia JCE dalam CloudProvider konfigurasi Java, ikuti langkah-langkah berikut:

  1. Buka file java.security konfigurasi di instalasi Java Anda untuk diedit.

  2. Dalam file java.security konfigurasi, tambahkan com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider sebagai penyedia terakhir. Misalnya, jika ada sembilan penyedia dalam java.security file, tambahkan penyedia berikut sebagai penyedia terakhir di bagian:

    security.provider.10=com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider

catatan

Menambahkan AWS CloudHSM penyedia sebagai prioritas yang lebih tinggi dapat berdampak negatif pada kinerja sistem Anda karena AWS CloudHSM penyedia akan diprioritaskan untuk operasi yang dapat diturunkan dengan aman ke perangkat lunak. Sebagai praktik terbaik, selalu tentukan penyedia yang ingin Anda gunakan untuk suatu operasi, apakah itu AWS CloudHSM atau penyedia berbasis perangkat lunak.

catatan

Menentukan-providerName,-providerclass, dan opsi baris -providerpath perintah saat membuat kunci menggunakan keytool dengan penyimpanan kunci AWS CloudHSM dapat menyebabkan kesalahan.

Menggunakan AWS CloudHSM key store dengan keytool

Keytool adalah utilitas baris perintah populer untuk tugas kunci dan sertifikat umum. Tutorial lengkap tentang keytool ada di luar lingkup dokumentasi AWS CloudHSM . Artikel ini menjelaskan parameter spesifik yang harus Anda gunakan dengan berbagai fungsi keytool saat memanfaatkan AWS CloudHSM sebagai akar kepercayaan melalui toko AWS CloudHSM kunci.

Saat menggunakan keytool dengan penyimpanan AWS CloudHSM kunci, tentukan argumen berikut ke perintah keytool apa pun:

Linux
-storetype CLOUDHSM -J-classpath< '-J/opt/cloudhsm/java/*'>
Windows
-storetype CLOUDHSM -J-classpath<'-J"C:\Program Files\Amazon\CloudHSM\java\*"'>

Jika Anda ingin membuat file penyimpanan kunci baru menggunakan toko AWS CloudHSM kunci, lihatMenggunakan AWS CloudHSM KeyStore. Untuk menggunakan penyimpanan kunci yang ada, tentukan namanya (termasuk jalur) menggunakan argumen penyimpanan kunci pada keytool. Jika Anda menentukan file penyimpanan kunci yang tidak ada dalam perintah keytool, toko AWS CloudHSM kunci akan membuat file penyimpanan kunci baru.

Buat kunci baru dengan keytool

Anda dapat menggunakan keytool untuk menghasilkan jenis kunci RSA, AES, dan DeSede yang didukung oleh JCE SDK. AWS CloudHSM

penting

Kunci yang dihasilkan melalui keytool dihasilkan dalam perangkat lunak, dan kemudian diimpor AWS CloudHSM sebagai kunci persisten yang dapat diekstraksi.

Kami sangat menyarankan untuk membuat bukti kunci non-ekspor di luar keytool, dan kemudian mengimpor sertifikat yang sesuai ke penyimpanan kunci. Jika Anda menggunakan kunci RSA atau EC yang dapat diekstraksi melalui keytool dan Jarsigner, penyedia mengekspor kunci dari AWS CloudHSM dan kemudian menggunakan kunci secara lokal untuk operasi penandatanganan.

Jika Anda memiliki beberapa instance klien yang terhubung ke AWS CloudHSM klaster Anda, ketahuilah bahwa mengimpor sertifikat di penyimpanan kunci satu instans klien tidak akan secara otomatis membuat sertifikat tersedia pada instance klien lainnya. Untuk mendaftarkan kunci dan sertifikat terkait pada setiap instance klien, Anda perlu menjalankan aplikasi Java seperti yang dijelaskan dalamMenghasilkan CSR menggunakan keytool. Atau, Anda dapat membuat perubahan yang diperlukan pada satu klien dan menyalin file penyimpanan kunci yang dihasilkan untuk setiap instans klien lainnya.

Contoh 1: Untuk menghasilkan kunci AES-256 simetris dan menyimpannya dalam file penyimpanan kunci bernama, “my_keystore.store”, di direktori kerja. Ganti <secret label>dengan label unik.

Linux
$ keytool -genseckey -alias <secret label> -keyalg aes \ -keysize 256 -keystore my_keystore.store \ -storetype CloudHSM -J-classpath '-J/opt/cloudhsm/java/*' \
Windows
PS C:\> keytool -genseckey -alias <secret label> -keyalg aes ` -keysize 256 -keystore my_keystore.store ` -storetype CloudHSM -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Contoh 2: Untuk menghasilkan key pair RSA 2048 dan menyimpannya dalam file key store bernama, “my_keystore.store” di direktori kerja. Ganti <RSA key pair label>dengan label unik.

Linux
$ keytool -genkeypair -alias <RSA key pair label> \ -keyalg rsa -keysize 2048 \ -sigalg sha512withrsa \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -genkeypair -alias <RSA key pair label> ` -keyalg rsa -keysize 2048 ` -sigalg sha512withrsa ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Anda dapat menemukan daftar algoritme tanda tangan yang didukung di pustaka Java.

Hapus kunci menggunakan keytool

Toko AWS CloudHSM kunci tidak mendukung penghapusan kunci. Anda dapat menghapus kunci menggunakan metode penghancuran antarmuka Destroyable.

((Destroyable) key).destroy();

Menghasilkan CSR menggunakan keytool

Anda menerima fleksibilitas terbesar dalam membuat permintaan penandatanganan sertifikat (CSR) jika menggunakan OpenSSL Dynamic Engine. Perintah berikut menggunakan keytool untuk menghasilkan CSR untuk pasangan kunci dengan alias, my-key-pair.

Linux
$ keytool -certreq -alias <key pair label> \ -file my_csr.csr \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -certreq -alias <key pair label> ` -file my_csr.csr ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
catatan

Untuk menggunakan pasangan kunci dari keytool, pasangan kunci itu harus memiliki entri dalam file penyimpanan kunci tertentu. Jika Anda ingin menggunakan pasangan kunci yang dihasilkan di luar keytool, Anda harus mengimpor kunci dan metadata sertifikat ke penyimpanan kunci. Untuk petunjuk tentang mengimpor data keystore, lihat. Menggunakan keytool untuk mengimpor sertifikat perantara dan root ke dalam penyimpanan AWS CloudHSM kunci

Menggunakan keytool untuk mengimpor sertifikat perantara dan root ke dalam penyimpanan AWS CloudHSM kunci

Untuk mengimpor sertifikat CA, Anda harus mengaktifkan verifikasi rantai sertifikat penuh pada sertifikat yang baru diimpor. Perintah berikut menunjukkan sebuah contoh.

Linux
$ keytool -import -trustcacerts -alias rootCAcert \ -file rootCAcert.cert -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -import -trustcacerts -alias rootCAcert ` -file rootCAcert.cert -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Jika Anda menghubungkan beberapa instance klien ke AWS CloudHSM klaster Anda, mengimpor sertifikat pada penyimpanan kunci satu instans klien tidak akan secara otomatis membuat sertifikat tersedia pada instance klien lainnya. Anda harus mengimpor sertifikat pada setiap instans klien.

Menggunakan keytool untuk menghapus sertifikat dari toko AWS CloudHSM kunci

Perintah berikut menunjukkan contoh bagaimana untuk menghapus sertifikat dari penyimpanan kunci keytool Java.

Linux
$ keytool -delete -alias mydomain \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -delete -alias mydomain ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Jika Anda menghubungkan beberapa instance klien ke AWS CloudHSM klaster Anda, menghapus sertifikat pada penyimpanan kunci satu instans klien tidak akan secara otomatis menghapus sertifikat dari instance klien lainnya. Anda harus menghapus sertifikat pada setiap instans klien.

Mengimpor sertifikat kerja ke toko AWS CloudHSM kunci menggunakan keytool

Setelah permintaan penandatanganan sertifikat (CSR) ditandatangani, Anda dapat mengimpornya ke penyimpanan kunci AWS CloudHSM dan mengaitkannya dengan pasangan kunci yang sesuai. Perintah berikut memberikan sebuah contoh.

Linux
$ keytool -importcert -noprompt -alias <key pair label> \ -file my_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -importcert -noprompt -alias <key pair label> ` -file my_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Alias harus menjadi pasangan kunci dengan sertifikat terkait di penyimpanan kunci. Jika kunci yang dihasilkan di luar keytool, atau dihasilkan pada instans klien yang berbeda, Anda harus terlebih dahulu mengimpor kunci dan metadata sertifikat ke penyimpanan kunci.

Rantai sertifikat harus dapat diverifikasi. Jika Anda tidak dapat memverifikasi sertifikat, Anda mungkin perlu mengimpor sertifikat tanda tangan (otoritas sertifikat) ke penyimpanan kunci sehingga rantai dapat diverifikasi.

Mengekspor sertifikat menggunakan keytool

Contoh berikut menghasilkan sertifikat dalam format X.509 biner. Untuk mengekspor sertifikat yang dapat dibaca manusia, tambahkan -rfc ke perintah -exportcert.

Linux
$ keytool -exportcert -alias <key pair label> \ -file my_exported_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -exportcert -alias <key pair label> ` -file my_exported_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Menggunakan toko AWS CloudHSM kunci dengan Jarsigner

Jarsigner adalah utilitas baris perintah populer untuk menandatangani file JAR menggunakan kunci yang disimpan dengan aman di HSM. Tutorial lengkap tentang Jarsigner ada di luar lingkup dokumentasi AWS CloudHSM . Bagian ini menjelaskan parameter Jarsigner yang harus Anda gunakan untuk menandatangani dan memverifikasi tanda tangan AWS CloudHSM sebagai akar kepercayaan melalui penyimpanan kunci. AWS CloudHSM

Menyiapkan kunci dan sertifikat

Sebelum Anda dapat menandatangani file JAR dengan Jarsigner, pastikan Anda telah mengatur atau menyelesaikan langkah-langkah berikut:

  1. Ikuti panduan di prasyarat toko AWS CloudHSM utama.

  2. Siapkan kunci penandatanganan Anda dan sertifikat terkait serta rantai sertifikat yang harus disimpan di penyimpanan AWS CloudHSM kunci server atau instance klien saat ini. Buat kunci pada AWS CloudHSM dan kemudian impor metadata terkait ke toko AWS CloudHSM kunci Anda. Jika Anda ingin menggunakan keytool untuk mengatur kunci dan sertifikat, lihat Buat kunci baru dengan keytool. Jika Anda menggunakan beberapa instans klien untuk menandatangani JAR Anda, buat kunci dan impor rantai sertifikat. Kemudian, salin file penyimpanan kunci yang dihasilkan ke setiap instans klien. Jika Anda sering membuat kunci baru, Anda mungkin merasa lebih mudah untuk secara individual mengimpor sertifikat ke setiap instans klien.

  3. Seluruh rantai sertifikat harus dapat diverifikasi. Agar rantai sertifikat dapat diverifikasi, Anda mungkin perlu menambahkan sertifikat CA dan sertifikat perantara ke toko AWS CloudHSM kunci. Lihat cuplikan kode Tandatangani file JAR menggunakan AWS CloudHSM dan Jarsigner untuk instruksi tentang penggunaan kode Java untuk memverifikasi rantai sertifikat. Jika mau, Anda dapat menggunakan keytool untuk mengimpor sertifikat. Untuk petunjuk tentang penggunaan keytool, lihatMenggunakan keytool untuk mengimpor sertifikat perantara dan root ke dalam penyimpanan AWS CloudHSM kunci .

Tandatangani file JAR menggunakan AWS CloudHSM dan Jarsigner

Gunakan perintah berikut untuk menandatangani file JAR:

Linux;

Untuk OpenJDK 8

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>

Untuk OpenJDK 11, OpenJDK 17, dan OpenJDK 21

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>
Windows

Untuk OpenJDK8

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

Untuk OpenJDK 11, OpenJDK 17, dan OpenJDK 21

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*'` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

Gunakan perintah berikut untuk memverifikasi JAR yang ditandatangani:

Linux

Untuk OpenJDK8

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>

Untuk OpenJDK 11, OpenJDK 17, dan OpenJDK 21

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>
Windows

Untuk OpenJDK 8

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

Untuk OpenJDK 11, OpenJDK 17, dan OpenJDK 21

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

Masalah yang diketahui

  1. Kami tidak mendukung kunci EC dengan Keytool dan Jarsigner.