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

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

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

Prasyarat

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

Langkah 1: Instal JCE

Untuk menginstal JCE, termasuk prasyarat klien AWS CloudHSM, ikuti langkah-langkah untuk menginstal pustaka 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 CloudHSMJCE menawarkan berbagai pilihan login. Untuk menggunakan penyimpanan kunci AWS CloudHSM 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 penyimpanan kunci AWS CloudHSM. Untuk informasi tambahan, lihat artikel tentang Menggunakan penyimpanan kunci AWS CloudHSM.

Langkah 3: Mendaftarkan penyedia JCE

Untuk mendaftarkan penyedia JCE CloudProvider , ikuti langkah-langkah berikut:

  1. Buka filejava.security konfigurasi di instalasi Java Anda untuk mengedit.

  2. Dalam filejava.security konfigurasi, tambahkancom.amazonaws.cloudhsm.jce.provider.CloudHsmProvider sebagai penyedia terakhir. Misalnya, jika ada sembilan penyedia dalamjava.security file, tambahkan penyedia berikut sebagai penyedia terakhir di bagian tersebut:

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

catatan

MenambahkanAWS CloudHSM penyedia sebagai prioritas yang lebih tinggi dapat berdampak negatif terhadap performa sistem Anda karenaAWS 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 operasi, apakah ituAWS 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 tokoAWS CloudHSM kunci dengan keytool

Keytool adalah utilitas baris perintah populer untuk kunci umum dan sertifikat tugas. 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 root kepercayaan melalui penyimpanan kunci AWS CloudHSM.

Saat menggunakan keytool dengan penyimpanan kunci AWS CloudHSM, tentukan argumen berikut untuk setiap perintah keytool:

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 penyimpanan kunci AWS CloudHSM, lihat MenggunakanAWS CloudHSMKeystore. 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, penyimpanan kunci AWS CloudHSM menciptakan file penyimpanan kunci baru.

Buat kunci baru dengan keytool

Anda dapat menggunakan keytool untuk menghasilkan jenis kunci RSA, dan DeSede, dan DeseDe yang didukung olehAWS CloudHSM JCE.

penting

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

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 ekstrak melalui keytool dan Jarsigner, penyedia mengekspor kunci dariAWS CloudHSM dan kemudian menggunakan kunci lokal untuk menandatangani operasi.

Jika Anda memiliki beberapa instans klien yang tersambung keAWS CloudHSM klaster, perhatikan bahwa mengimpor sertifikat pada satu penyimpanan kunci instans klien tidak akan secara otomatis membuat sertifikat tersebut tersedia pada instans klien lainnya. Untuk mendaftarkan kunci dan sertifikat terkait pada setiap instans klien, Anda perlu menjalankan aplikasi Java seperti yang dijelaskan dalamBuat 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 penyimpanan kunci 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.

Menghapus kunci menggunakan keytool

Penyimpanan kunci AWS CloudHSM tidak mendukung penghapusan kunci. Anda dapat menghapus kunci menggunakan metode menghancurkan antarmuka Destroyable.

((Destroyable) key).destroy();

Buat 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 lihatMenggunakan keytool untuk mengimpor sertifikat perantara dan root ke penyimpananAWS CloudHSM kunci .

Menggunakan keytool untuk mengimpor sertifikat perantara dan root ke penyimpananAWS 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 instans klien ke klaster AWS CloudHSM, mengimpor sertifikat pada satu penyimpanan kunci instans klien tidak akan secara otomatis membuat sertifikat tersebut tersedia pada instans klien lainnya. Anda harus mengimpor sertifikat pada setiap instans klien.

Menggunakan keytool untuk menghapus sertifikat dari tokoAWS CloudHSM kunci

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

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

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

Mengimpor sertifikat kerja ke tokoAWS 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 tokoAWS CloudHSM kunci dengan Jarsigner

Jarsigner adalah utilitas baris perintah populer untuk menandatangani file JAR menggunakan kunci yang disimpan dengan aman pada 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 dengan AWS CloudHSM sebagai root 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 petunjuk di Prasyarat penyimpananAWS CloudHSM kunci.

  2. Atur kunci penandatanganan Anda dan sertifikat terkait dan rantai sertifikat yang harus disimpan dalam penyimpanan kunci AWS CloudHSM dari server atau instans klien saat ini. Buat kunci pada AWS CloudHSM lalu impor metadata terkait ke penyimpanan kunci AWS CloudHSM. 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 untuk penyimpanan kunci AWS CloudHSM. Lihat cuplikan kode diTandatangani file JAR menggunakan AWS CloudHSM dan Jarsigner untuk menggunakan kode Java untuk memverifikasi rantai sertifikat. Jika mau, Anda dapat menggunakan keytool untuk mengimpor sertifikat. Untuk petunjuk tentang menggunakan keytool, lihatMenggunakan keytool untuk mengimpor sertifikat perantara dan root ke penyimpananAWS CloudHSM kunci .

Tandatangani file JAR menggunakan AWS CloudHSM dan Jarsigner

Gunakan perintah berikut untuk menandatangani file JAR:

Amazon Linux

Untuk OpenJDK8

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 OpenJDK11

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 OpenJDK11

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:

Amazon 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 OpenJDK11

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 OpenJDK8

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 OpenJDK11

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 diketahui

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