全部产品
Search
文档中心

Key Management Service:Menggunakan klaster instans HSM

更新时间:Oct 16, 2025

Cloud Hardware Security Module (CloudHSM) menyediakan fitur klaster instans HSM yang memungkinkan Anda mengelompokkan instans HSM dari wilayah yang sama tetapi zona berbeda. Jika instans ini digunakan untuk bisnis yang sama, aplikasi Anda dapat menggunakan algoritma polling untuk memilih HSM guna menjalankan operasi kriptografi dengan kunci yang sama. Arsitektur ini mendukung kelangsungan bisnis, ketersediaan tinggi untuk komputasi kriptografi, penyeimbangan beban, dan skalabilitas horizontal untuk aplikasi Anda. Topik ini menjelaskan cara menggunakan klaster instans HSM.

Catatan

Untuk informasi lebih lanjut tentang cara membuat klaster HSM untuk instans manajemen kunci perangkat keras KMS, lihat Konfigurasikan klaster HSM untuk instans manajemen kunci perangkat keras KMS.

Metode sinkronisasi klaster

Sinkronisasi klaster menyalin data seperti kunci, Sertifikat SSL yang dikonfigurasi, dan informasi pengguna dari HSM utama ke HSM anak. Metode sinkronisasi tergantung pada waktu pembelian HSM:

  • Untuk HSM yang dibeli pada atau setelah 9 Januari 2025: Saat membuat klaster, metode sinkronisasi defaultnya adalah otomatis sinkronisasi. Anda tidak perlu secara manual menyinkronkan data klaster setelah data pada HSM utama berubah.

  • Untuk HSM yang dibeli sebelum 9 Januari 2025: Saat membuat klaster, metode sinkronisasi defaultnya adalah manual sinkronisasi. Anda harus secara manual menyinkronkan klaster setelah data pada HSM utama berubah. Untuk meningkatkan klaster ke sinkronisasi otomatis, hubungi kami.

    Peringatan

    Peningkatan ini tidak dapat dikembalikan. Risiko berikut mungkin terjadi selama peningkatan. Kami sarankan Anda melakukan peningkatan selama jam-jam sepi.

    • Untuk pengguna instans manajemen kunci perangkat keras KMS:

      • Operasi bidang kontrol: Operasi seperti membuat dan menghapus kunci tidak didukung selama peningkatan. Operasi ini akan dilanjutkan secara otomatis setelah peningkatan selesai.

      • Operasi bidang data: Operasi seperti enkripsi dan dekripsi tidak terpengaruh selama peningkatan.

    • Untuk pengguna lainnya: Anda perlu meningkatkan versi kit pengembangan perangkat lunak (SDK) HSM yang aplikasi Anda gunakan.

      • Operasi bidang kontrol: Operasi seperti membuat dan menghapus kunci tidak didukung selama peningkatan. Operasi ini akan dilanjutkan secara otomatis setelah peningkatan selesai.

      • Operasi bidang data: Dalam beberapa arsitektur bisnis, ada risiko gangguan layanan selama peningkatan.

Prasyarat

  • Modul keamanan perangkat keras (HSM) telah dibeli. Untuk informasi lebih lanjut, lihat Beli instans HSM.

  • Instans Elastic Compute Service (ECS) Windows telah dibeli. Instans ECS dan HSM berada dalam VPC yang sama. Untuk informasi lebih lanjut, lihat Memulai dengan instans Windows.

    Catatan

    Instans ECS digunakan untuk menginstal alat manajemen HSM, bukan sebagai server bisnis.

Langkah 1: Buat dan aktifkan klaster

Klaster terdiri dari satu HSM utama dan beberapa HSM anak. Semua HSM dalam klaster harus berbagi VPC yang sama, tetapi mereka dapat ditempatkan di subnet yang sama atau berbeda.

Catatan

Jika Anda mengonfigurasi informasi klaster saat membeli instans GVSM, CloudHSM secara otomatis membuat klaster. Anda dapat melewati langkah ini.

  1. Aktifkan instans HSM utama.

    1. Buka halaman Audit Keamanan dari konsol Cloud Hardware Security Module. Di bilah navigasi atas, pilih wilayah.

    2. Di halaman VSMs, temukan HSM yang dibuat dan klik Enable di kolom Actions.

  2. Buat klaster HSM.

    1. Temukan instans HSM utama dan klik Create Cluster di kolom Actions.

    2. Di panel Create and Activate Cluster, buat klaster.

      Parameter

      Deskripsi

      Cluster Name

      Nama klaster. Nama tersebut harus unik dan tidak boleh melebihi 24 karakter panjangnya.

      Configure Whitelist

      Rentang alamat IP yang diizinkan untuk mengakses klaster. Jika Anda tidak mengonfigurasi daftar putih, semua alamat IP diizinkan untuk mengakses klaster. Jika Anda mengonfigurasi daftar putih, hanya alamat IP dalam daftar putih yang diizinkan untuk mengakses klaster.

      Alamat IP dan blok CIDR didukung. Anda dapat menentukan satu alamat IP atau satu blok CIDR di setiap baris. Anda dapat menentukan hingga 10 baris secara total.

      Penting
      • Daftar putih klaster memiliki prioritas lebih tinggi daripada daftar putih HSM dalam klaster. Sebagai contoh, jika Anda menambahkan 10.10.10.10 ke daftar putih HSM dan menambahkan 172.16.0.1 ke daftar putih klaster yang mencakup HSM tersebut, Anda hanya dapat mengakses HSM dari 172.16.0.1.

      • Konfigurasi daftar putih 0.0.0.0/0 tidak didukung. Jika Anda memasukkan 0.0.0.0/0, permintaan dari semua alamat IP diizinkan.

        Untuk alasan keamanan, kami sarankan Anda tidak mengizinkan permintaan dari semua alamat IP. Jika Anda perlu mengizinkan permintaan dari semua alamat IP, jangan konfigurasikan daftar putih.

      Specify vSwitches

      vSwitches yang perlu Anda pilih berdasarkan kebutuhan bisnis Anda.

      Dalam klaster HSM, Anda harus mengonfigurasi setidaknya dua vSwitches untuk membuat dan mengaktifkan klaster.

    3. Inisialisasi instans HSM, lalu klik Next.

      Anda hanya dapat mengaktifkan klaster ketika status HSM utama adalah Initialized. Untuk menginisialisasi HSM utama, lakukan operasi berikut:

    4. Ikuti petunjuk di halaman untuk menambahkan HSM anak ke klaster, lalu klik Complete.

(Opsional) Langkah 2: Hasilkan sertifikat dan konfigurasikan autentikasi TLS bersama

Skenario 1: HSM secara otomatis menghasilkan sertifikat saat pembelian

Hanya instans GVSM yang mendukung pembuatan sertifikat otomatis saat pembelian. Dalam skenario ini, CloudHSM secara otomatis menghasilkan sertifikat. Anda hanya perlu mengonfigurasi sertifikat pada SDK klien karena CloudHSM secara otomatis menerapkan sertifikat ke HSM sisi server.

  1. Terapkan sertifikat di klien.

    Unduh sertifikat klien dari konsol dan terapkan ke klien Anda.

    1. Di halaman detail HSM, klik Get Cluster Certificate. Folder yang diunduh berisi file berikut:

      certs/
      ├── client.p12 (Sertifikat klien dalam format PKCS12, termasuk sertifikat klien dan kunci privat)
      ├── client.pem (Sertifikat klien dalam format PEM)
      ├── rootca.key (Kunci privat CA)
      ├── rootca.pem (Sertifikat CA dalam format PEM)
      ├── server.p12 (Sertifikat server dalam format PKCS12)
      └── passphrase (Kata sandi untuk file sertifikat format PKCS12 dengan ekstensi .p12)
    2. Terapkan client.p12 dan rootca.pem ke klien. Dalam file konfigurasi klien, Anda juga harus mengonfigurasi jalur file untuk client.p12 dan rootca.pem, serta kata sandi. Untuk informasi lebih lanjut, lihat dokumen dalam paket yang Anda unduh dari konsol.

  2. Terapkan sertifikat di server.

    CloudHSM secara otomatis menerapkan sertifikat ke HSM. Tidak diperlukan tindakan dari Anda.

Penting

Sertifikat berlaku selama 10 tahun secara default. Sebelum kedaluwarsa, CloudHSM secara otomatis menghasilkan sertifikat baru dan memutar sertifikat sisi server. Kami sarankan Anda tidak menggunakan alat manajemen HSM untuk membuat administrator UKEY, karena ini akan menyebabkan rotasi sertifikat gagal.

Skema 2: HSM tidak secara otomatis menghasilkan sertifikat saat pembelian

GVSM mendukung pembuatan sertifikat otomatis oleh CloudHSM. Namun, jika Anda tidak mengaktifkan opsi ini saat pembelian, ikuti langkah-langkah berikut untuk secara manual menghasilkan dan menerapkan sertifikat.

  1. Hasilkan sertifikat.

    1. Unduh alat pembuatan sertifikat (dkms_cert_tool).

    2. Ekstrak file yang diunduh dan jalankan alat pembuatan sertifikat untuk menghasilkan sertifikat CA, sertifikat klien, dan sertifikat server.

      Catatan
      • Tidak ada batasan pada lingkungan operasi alat ini. Anda dapat menjalankannya di komputer lokal, instans ECS, atau lingkungan lain yang memenuhi kondisi operasi alat ini.

      • Alibaba Cloud menyediakan alat ini sebagai alat bantu. Jika Anda memiliki kemampuan teknis untuk menghasilkan file sertifikat ini, Anda tidak perlu menggunakan alat ini.

      Windows

      • Metode 1: Di folder Windows, klik dua kali file hsm_certificate_generate.exe untuk menjalankan alat. File sertifikat dihasilkan di folder certs.

        Catatan

        Dengan metode ini, kata sandi untuk file sertifikat PKCS12 (.p12) dan file kunci privat CA (.key) adalah nilai default 12345678. Untuk menentukan kata sandi, gunakan Metode 2.

      • Metode 2: Beralihlah ke direktori yang berisi folder Windows dan jalankan perintah berikut. File sertifikat dihasilkan di folder certs.

        ./hsm_certificate_generate -dir ./certs -pswd 12345678

        -dir menentukan jalur untuk menyimpan file sertifikat yang dihasilkan. -pswd menentukan kata sandi untuk file sertifikat PKCS12 yang dihasilkan (.p12) dan file kunci privat CA (.key).

      Linux

      Beralihlah ke direktori yang berisi folder Linux dan jalankan perintah berikut. File sertifikat dihasilkan di folder certs.

      ./hsm_certificate_generate -dir ./certs -pswd 12345678

      -dir menentukan jalur untuk menyimpan file sertifikat yang dihasilkan. -pswd menentukan kata sandi untuk file sertifikat PKCS12 yang dihasilkan (.p12) dan file kunci privat CA (.key).

      macOS

      Beralihlah ke direktori yang berisi folder darwin dan jalankan perintah berikut. File sertifikat dihasilkan di folder certs.

      ./hsm_certificate_generate -dir ./certs -pswd 12345678

      -dir menentukan jalur untuk menyimpan file sertifikat yang dihasilkan. -pswd menentukan kata sandi untuk file sertifikat PKCS12 yang dihasilkan (.p12) dan file kunci privat CA (.key).

      Setelah perintah berhasil dijalankan, file-file berikut akan dihasilkan di folder certs:

      certs/
      ├── client.p12 (Sertifikat klien dalam format PKCS12, termasuk sertifikat klien dan kunci privat)
      ├── client.pem (Sertifikat klien dalam format PEM)
      ├── rootca.key (kunci privat CA)
      ├── rootca.pem (Sertifikat CA dalam format PEM)
      ├── server.p12 (Sertifikat server dalam format PKCS12)
      └── server.pem (Sertifikat server dalam format PEM)
  2. Terapkan sertifikat di klien.

    Terapkan client.p12 dan rootca.pem ke klien. Dalam file konfigurasi klien, Anda juga harus mengonfigurasi jalur file untuk client.p12 dan rootca.pem, serta kata sandi yang Anda tentukan saat menghasilkan sertifikat. Untuk informasi lebih lanjut, lihat dokumen dalam paket yang Anda unduh dari konsol.

  3. Terapkan sertifikat di server.

    1. Instal alat manajemen instans HSM di instans ECS.

      Penting

      Alat manajemen instans HSM berjalan di Windows saja.

      1. Klik ikon unduhan image di kolom Spesifikasi instans HSM utama untuk mengunduh alat manajemen instans HSM.image

      2. Ekstrak paket HSM yang diunduh, temukan PKIManager-X.X.X.X.exe, dan unggah ke instans ECS. Untuk informasi lebih lanjut, lihat Transfer file ke instans Windows menggunakan Remote Desktop Connection.

    2. Gunakan alat manajemen instans HSM untuk mengonfigurasi HSM utama.

      1. Gunakan alat manajemen instans HSM di instans ECS untuk terhubung ke master GVSM.

        1. Klik dua kali PKIManager-X.X.X.X.exe untuk membuka alat manajemen instans HSM. Pilih System > TCP/IP Connection.

        2. Di kotak dialog TCP/IP Connection, masukkan IP Address dan Port HSM utama. Portnya adalah 8020.

          Anda dapat menemukan alamat IP di konsol.image

        3. Klik Connect. Di kotak dialog PKIManager yang muncul, klik OK, lalu klik Logon.

          Catatan

          Setelah berhasil masuk, kami sarankan Anda mendaftarkan akun administrator dan menggunakannya untuk masuk demi keamanan yang lebih tinggi. Untuk informasi lebih lanjut, lihat 2.1.3. Register Administrator dan 2.1.2. Administrator Logon di GVSM User Management Manual yang disertakan dengan alat manajemen instans HSM.

      2. Gunakan alat manajemen instans HSM untuk menyelesaikan konfigurasi berikut.

        Item Konfigurasi

        Prosedur

        Konfigurasikan sertifikat klien (client.pem)

        1. Pilih Key Management > Client Management.

        2. Di kotak dialog Client Certificate Management, klik Import Certificate.

        3. Di kotak dialog Import Certificate, atur Certificate Type menjadi International TLS Client RSA Certificate [pem]. Pilih sertifikat klien (client.pem) yang dihasilkan oleh alat pembuatan sertifikat, dan klik Import.

        Konfigurasikan sertifikat server (server.p12)

        1. Pilih Key Management > Server Management.

        2. Di kotak dialog Server P12 Certificate Management, klik Import Certificate.

        3. Di kotak dialog Import Certificate, atur Certificate Type menjadi International TLS Server RSA Certificate [p12]. Pilih sertifikat server (server.p12) yang dihasilkan oleh alat pembuatan sertifikat, dan masukkan Certificate Password (kata sandi yang Anda atur saat membuat file sertifikat; jika tidak diatur, defaultnya adalah 12345678).

        4. Klik Import.

        Konfigurasikan properti port perangkat GVSM untuk HSM utama

        1. Pilih Device Management > Host Port Properties.

        2. Di kotak dialog Host Port Properties, konfigurasikan parameter berikut:

          • Socket KeepAlive Time: 60.

          • Message Header Length: 0.

          • Message Encoding Format: ASCII.

          • Host Service Communication Mode: Komunikasi Dua Arah.

          • Host Service Communication Protocol: TLSv1.2.

        3. Klik Reset.

        4. Klik Restart Now, lalu klik OK.

Langkah 3: Sinkronkan data klaster

  • Jika Cluster Type adalah Manual Sync Cluster: Anda harus menyinkronkan klaster setelah membuat dan mengaktifkannya untuk pertama kali, atau setelah data pada HSM utama berubah. Anda tidak perlu menyinkronkan klaster saat melakukan peningkatan skala.

  • Jika Cluster Type adalah Auto Sync Cluster: Anda tidak perlu menyinkronkan klaster. Kunci baru, Sertifikat SSL yang dikonfigurasi, dan informasi pengguna pada HSM utama secara otomatis disinkronkan ke HSM anak.

Peringatan

Sinkronisasi klaster memakan waktu sekitar 5 menit. Lakukan sinkronisasi selama jam-jam sepi untuk menghindari memengaruhi bisnis Anda.

  1. Di halaman Instances, temukan instans HSM utama target dan periksa metode sinkronisasi klaster.

    Jika tipe klaster adalah Klaster Sinkronisasi Manual, lakukan sinkronisasi.

    image

  2. Di kolom Actions, klik Synchronize Cluster. Di kotak dialog yang muncul, klik Synchronize Cluster lagi.

Langkah 4: Buat dan gunakan kunci untuk enkripsi dan dekripsi

Paket perangkat lunak HSM mencakup panduan pengembang dan program uji SDK. Anda dapat memanggil operasi API untuk menggunakan HSM berdasarkan panduan pengembang.

Catatan

Anda dapat membuka halaman VSMs dari konsol Cloud Hardware Security Module, temukan HSM yang diperlukan, klik image di samping kolom Spesifikasi untuk mengunduh paket, dan ekstrak paket untuk mendapatkan paket perangkat lunak HSM.

Dalam contoh ini, GVSM digunakan. Ekstrak paket, pilih Paket Perangkat Lunak Alibaba Cloud GVSM > SDK > JAVA > Direktori Antarmuka Server HSM > Kasus Uji APITest.java, lalu gunakan kasus uji untuk menguji GVSM.

Kode Contoh

Catatan

Ganti 192.168.XX.XX dalam contoh dengan alamat IP privat yang ditetapkan untuk HSM.

package cn.tass.hsm;

import cn.tass.SJJ1507.devices.RasKeyUtils;
import cn.tass.common.kits.Padding;
import cn.tass.exceptions.TAException;
import cn.tass.hsm.GHSMAPI;
import cn.tass.kits.Forms;
import cn.tass.hsm.Host;
import cn.tass.hsm.LogConfig;
import cn.tass.util.encoders.Base64;
import org.junit.Test;

import javax.naming.ConfigurationException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class APITest {
    LogConfig logConfig = new LogConfig("error", "./");
    Host host1 = new Host("GHSM", -3, "192.168.XX.XX", 8019, 5);
    List<Host> hosts = new ArrayList<Host>() {{
        add(host1);
    }};

    String config =
            "{"
                    + "[LOGGER];"
                    + "logsw=debug,error;logPath=./;"
                    + "[HOST 1];"
                    + "hsmModel=GHSM;"
                    + "host=192.168.XX.XX;linkNum=-3;"
                    + "port=8019;"
                    + "timeout=5;"
                    + "}";

//    GHSMAPI api = GHSMAPI.getInstance(hosts, logConfig);
    GHSMAPI api = GHSMAPI.getInstance(config);

    /**
     * Kunci simetris yang dienkripsi oleh LMK lokal
     */
    byte[] symmetricKey = Forms.hexStringToByteArray("669C1CEDDAFA267CC5D727EA727558B5");
    byte[] verifyValue = Forms.hexStringToByteArray("BD8596C22E5A4D88");

    byte[] symmetricKey1 = Forms.hexStringToByteArray("93EF12C95813586FEC3EFDBC7B37642D");
    byte[] verifyValue1 = Forms.hexStringToByteArray("78306FD68851B8E6");
    /**
     * Ciphertext sesi kunci yang dienkripsi oleh LMK
     */
    byte[] symmetricKeyKEK = Forms.hexStringToByteArray("2E80A42018F186BCCBCF639F644629E8");
    /**
     * Nilai checksum kunci sesi
     */
    byte[] verifyValueMAC = Forms.hexStringToByteArray("734D092CD8C23E38");
    /**
     * Ciphertext yang dilindungi oleh kunci proteksi
     */
    byte[] protectionKey = Forms.hexStringToByteArray("2EACE685C5EB2638D1208742F3BE60CD44210B43C894A77C");
    /**
     * MAC ciphertext yang dilindungi oleh kunci proteksi
     */
    byte[] protectionMAC = Forms.hexStringToByteArray("0CB8702D41CBE487");

    /**
     * Kunci publik RSA yang dikodekan DER
     */
    byte[] publicKeyRSA = Forms.hexStringToByteArray("308186028180E14CAAFFCEC6D014457D7CA3E943DBABA1299BDBC17690C8E70F7BFA10EA02450805DA4C6CDC38BFBF1349C95B81A88177BA31C08E366EF965CA41EB36A2DACE611B80A752615A094B8291AAB6F8BB3A5894E72842371F34FA04C10DF42C2FEA95C51B9D49BE8B795E10474954FE01BAAC63532520069465FA62EDB266AADEBB020103");
    /**
     * Kunci privat RSA yang dienkripsi oleh LMK
     */
    byte[] privateKeyRSA = Forms.hexStringToByteArray("000202703D0652C7027B7D94B45A896646A9DC7CA89825FB12121B3CC00E37BE933055D5C00E37BE933055D54718ADDAA677519BD9C054CA249B43888FE000B8AAC33BA87A2C326985704335EA54D7F171CABCAD5531B3ADF33255A24075EFFF62691D4375E6280A9442CA36AA46AC59FAB16D9A9A7A283440BB14BAB1E78DBE887AE93A2C94C547779190D3FA801379BA948537281EFEFE567FD963E5D6E5D442D908A68BB6E26F3776EA30B1136A3804844035E26308E9B44BE154E1D09382E5A72BD711A6936373A8C32B62AF88134690C30D8B5505004F3BA01D11D0D791C8FF53D0E0786ED192CF1105FCF82160921EEF23E7BD72F13587B316BD9A771CEABBD0186B45E09C86E718AD4E5444EFFE747FE0C39E85D6190F3347656E72F486C321D5EA0D42127149C99F4F799A31F91E5826B74FF720A6E3CC2BCBBF645DD3D4A6A7D0BC953B4CFEE4E0D2BABFD606292F9F2395464484C306FBD60E4DD293E5F56C60BF1482A05775F0EEBAFBF9B70841DDDCFC974DD4D87E54D6A6A7A1A585EF0F42B0763D5DD7B5ECA83AFE610C26C9EF559B7883AC4716240BDFDC91C6EA19A0C01BB9C053F2A9C7EBCAE7D0AA8FB0DB88EFCF9C50A134E04649DAFF21D724E5C3CC043DE950C2CF246392DC4CA592D28C5A959BEB80B304E3BD949AD33178C06209FE6EB7130A381DFFD80F916AE0E0DD8FFDD9C8C9895BC483993D6011754FAD3C9F83A59C31F47810F8B2B22E5F25EF13671DFF34ECB65DE71D5B13DC5880595BC60B18D4711AE4613C739E2A48B516F6233E9AA9834075CE58975907F06FBA3B85C97E2E90B60BFEF0F23527E770798B571BC7CE29B67920538D509C58B1D8F966AF7E5321CDB2386164844D2BCB");
    /**
     * Kunci privat RSA yang dienkripsi oleh kunci proteksi RSA
     */
    byte[] privateKeyRSAKEK = Forms.hexStringToByteArray("6B2FB2BCC75604ABF5761FFA1027FF16324E3038B580C9F63AD3B57BD89059D5799974B4E5E9453763D94E682C629C4617C4E5393E9DDBFB0CFA2A4EA0E832F5C6A30F3EE63C327F6E044F3CB630D0C7DD96D93581835AA529797EB11CF3535650E431181717FDD1D7BBD9FB675FB027134BBF7F10F65245D9A82251A9171DAA439C175895904A2BB74F31BD94FF550023F6245C01DF83B2FCEDDF241307DDC831162AD2203BA3EBC4FD99EAE93C3208F16B0AAF85146ACE5FF06B11D7C81215708AA5C2651D380573F0EDA0984A73F5CE38E21541D50AACF5C5BCD42B6C94D064065ECAED4684E7A40C15904A73A801F2697AF6F3E32C3D7E156A1D1085CA32C7A002FA4AEAD439271E6E5904FC9AC3E65EEBAC51399F60DF3C61AF82BDA04D5E28B587382F8EB751096BC970B7A7DF26D997324F2D002D01A4C8F77C37BB65DBD1DED3B4545323DAE9489A08351507224574A2206FA7EAF8EF0A120D23D6B34E84645E95C3B58187BC91B8F6C04EF15075D6AF38B7E7DD77F6D2B8E66F11960C401BCE56BB4C157DAA26234678A37ACCFC7729CB5018449F7B6A23C0B16CA0B6A5FBE9FC7C8F9A3801A4159822DDDE8D9D7B7233CC3F77E7391DE720A2BFC69F6B938B565A28EBC6B4B665C553A9E1F32A17CC66CB8A2D7FE3EF6CB5112815D562F18EB34987B57DCFF064C7C24E97C3DCF3FD9BD50B351A2DD7CF03DA1F2DDA7A1BD2013C8339AFC4D22C135C49859C9C4CA4C9F730D2EE09A779D244C13FB5C3835F2FF04EE12537B01795D0ABE2D9695208542DC2FF8161AFD6F774E8D524B1DE6096530783");
    /**
     * MAC RSA
     */
    byte[] privateKeyRSAKEKMAC = Forms.hexStringToByteArray("701A4D3572D09760");

    /**
     * Kunci privat SM2 yang dienkripsi oleh KEK
     */
    byte[] privateKeySM2KEK = Forms.hexStringToByteArray("D3C5F579038C8BF3469879DD7F79C2E1B7FF47D7F2D5EFF5B01EFCE51C081D8067E06C0290F8EF6044210B43C894A77C");
    /**
     * MAC kunci privat SM2 yang dienkripsi oleh KEK
     */
    byte[] privateKeySM2MAC = Forms.hexStringToByteArray("83E413861F0C0D15");


    /**
     * Kunci publik SM2 yang dikodekan DER
     */
    byte[] privateKeySM2DER = Forms.hexStringToByteArray("3059301306072A8648CE3D020106082A811CCF5501822D03420004B33D8A2F9E1E1FCA2E8CECCFFB166F52CC2ED0589C25464D0EF85DC87E0537DC16C0D542A53790967A1368B7084F6EFED51FC848D1E3B5370A99BDCB64D17C2F");
    /**
     * Kunci privat SM2 yang dienkripsi oleh LMK
     */
    byte[] privateKeySM2 = Forms.hexStringToByteArray("66C9DDB0D6400EE059474F5C7339A296D5AA88F02AF031174F212EB6538C21908C4F5CA6457B435F");
    /**
     * Kunci privat SM2 yang dilindungi oleh kunci proteksi SM2
     */
    byte[] privateKeyKEKSM2 = Forms.hexStringToByteArray("D3C5F579038C8BF3A1624E7DC142A863240A42642337355921C70A7547001B21A0C59D4E0800F99644210B43C894A77C");
    /**
     * MAC SM2
     */
    byte[] privateKeyKEKSM2MAC = Forms.hexStringToByteArray("B9827812C2E18232");

    /**
     * Kunci SM2 acak 1002
     */
    byte[] publicSM2 = Forms.hexStringToByteArray("3059301306072A8648CE3D020106082A811CCF5501822D03420004D93204DF6335BEF43A90F8566CFB6FB5F7B10BE8082E9C0D9A5AA731F994AF07990FCB6913D902C4C9B8A84A3F96ADDD7BEF537D61404D56E58A68C756AEFD40");
    byte[] privateSM2 = Forms.hexStringToByteArray("6F26783DCE6D45B84D3FF39FFBDB365FE93B94EF15C39E00A09DE07212472FA68D1A3B721C09BB28");

    /**
     * Digest data yang dihasilkan MD5
     */
    byte[] md5 = Forms.hexStringToByte("D41D8CD98F00B204E9800998ECF8427E");
    /**
     * Digest data yang dihasilkan SM3
     */
    byte[] sm3 = Forms.hexStringToByte("E559D3DE421E81967DD68B28B55E0C26B03FCE10B8A8E5C4E6067497729D40D3");

    /**
     *
     */
    byte[] b = Forms.hexStringToByteArray("00000000000000000000000000000000");

    public APITest() throws TAException, ConfigurationException {
    }


    /**
     * Pembuatan kunci simetris
     *
     * @throws TAException
     */
    @Test
    public void genSymmKey() throws TAException {
        ArrayList<byte[]> bytes = api.genSymmKey(3);
        System.out.println("Kunci simetris yang dienkripsi oleh LMK:"  + Forms.byteToHexString(bytes.get(0)));
        System.out.println("Nilai checksum kunci simetris:"  + Forms.byteToHexString(bytes.get(1)));

    }

    ///////////////////////////////////////////////////////////////////////////
    // Data uji 1015
    ///////////////////////////////////////////////////////////////////////////

    byte[] sm4Key = Forms.hexStringToByte("EE828FCCFAC494756468B1FECCE81192");
    byte[] sm4CV = Forms.hexStringToByte("BCC22E39C9B72764");

    byte[] sm4ProKeyCipher = Forms.hexStringToByte("2E80A42018F186BCCBCF639F644629E8");
    byte[] sm4ProKeyCipherCV = Forms.hexStringToByte("8849C862448CFB73");

    byte[] newSM4 = Forms.hexStringToByte("AE62E4E90FA741090AECE0AC9923B885");
    byte[] newSM4KeyMAC = Forms.hexStringToByte("F7EBEA9FD38EBBD324E7EAAC9B7BE362");
    byte[] newSM4KeyTag = Forms.hexStringToByte("7C05A01A54B63CB90E0C8597DBED6D6D");

    byte[] sm4Key2 = Forms.hexStringToByte("40F7B1FA358855610EB13491B119A4AB");
    byte[] sm4Key2CV = Forms.hexStringToByte("955C2B5828299C51");

    /**
     * Kunci simetris yang dihasilkan dan dilindungi oleh kunci proteksi 
     *
     * @throws TAException
     */
    @Test
    public void generateProtectionKey() throws TAException {
        /**
         * SM4
         * Kunci simetris yang dienkripsi oleh LMK: B36847D6E86EAB69E4EEB65558A2626C
         * Nilai checksum kunci simetris: 713CA557C1FE2AAB
         */
        ArrayList<byte[]> bytes = api.proGenSymmKey(Forms.hexStringToByteArray("B36847D6E86EAB69E4EEB65558A2626C"),
                TACryptConst.KEY_ALG_SM4, Forms.hexStringToByteArray("713CA557C1FE2AAB"), TACryptConst.KEY_ALG_SM4, b,
                TACryptConst.ENC_MODE_GCM,b, b);
        System.out.println("Ciphertext kunci sesi yang dienkripsi oleh LMK:" + Forms.byteToHexString(bytes.get(0)));
        System.out.println("Nilai checksum kunci sesi:" + Forms.byteToHexString(bytes.get(1)));
        System.out.println("Ciphertext kunci sesi yang dienkripsi oleh kunci proteksi:" + Forms.byteToHexString(bytes.get(2)));
        System.out.println("MAC kunci sesi:" + Forms.byteToHexString(bytes.get(3)));
        System.out.println("Tags:" + Forms.byteToHexString(bytes.get(4)));

    }

    /**
     * Enkripsi dan dekripsi data oleh kunci simetris
     *
     * @throws TAException
     */
    @Test
    public void generalDataEnc() throws TAException {
//        byte[] bytes = api.symmKeyDataEnc(sm4Key,TACryptConst.ENC_MODE_ECB,TACryptConst.KEY_TYPE_RULE, TACryptConst.KEY_ALG_SM4,
//                "0000000000000000".getBytes(), b);
//        System.out.println("Hasil enkripsi SM4:" + Forms.byteToHexString(bytes));
//        byte[] bytes1 = api.generalDataDec(sm4Key,TACryptConst.ENC_MODE_ECB, TACryptConst.KEY_TYPE_RULE, TACryptConst.KEY_ALG_SM4, bytes, b);
//        System.out.println("Hasil dekripsi SM4:" + new String(bytes1));
//        byte[] paddingData = Padding.PKCS5Padding(Forms.hexStringToByte("30820122300D06092A864886F70D01010105000382010F003082010A0282010100A636C484374F9F039EB4318952B6BA5ABBE096F2B37B12DBC71A09F3B7BEEB83EB4A4BBBBDBBCC9332168E336981C919EF8BB734B3671DFEDCB79459401F95DDAA4EACECB36599451F9F77F5B01BF6B6AA1F94DE8BE5ED8B7BD52CA94929F7B0D3E8F5FDAFA322538AE32F89D7E3C1E4203120EDE6F213A3848F8ECF9E6836BE369A4658B6EB14D2FD3681488A3207CE0A5A9088011B2DA893C7F2C674843BB5254C30CB67D9C8182FEF284BB5CD8A239D6411EA199AD8B93EBE3442716FDAB44FB3932248C076C8794725CEEB5B76674B2B6DC605DC0F9835C6CCBBE4807A4F925065E02C65CAFE2D80A275BF5D096D2E07BA9ED5A75A10D425B03B84BB5799020103");
    byte[] srcRSACipher = Forms.hexStringToByte("83E265207D4566C7704DF9E6170181378CA028FB1EAA0BCB771DFD188CF5BEA899ECEF9213CA98D6D698CCE6072237768F514B04D68DA6B01400F69F93601976DCDFAE8F2EDDAA4F01BA8CE5E76A77AEB01BAB9D6E59A32B4E30B2B8D21D13B5C3510A1622190621BD3B0B5838A2CCBE423F4D3A7613CB69BBC9857E4BF5D08AAD77DDB96ECDD88989B885D44B909F502DC53A2FB4200FA714ECCFF100E7E986D76B68BD0BEFF5CA33CA698DA42F8B74FFBC09FB8F30483E416D0D2EAC6AF2B2A309F6762B5D292DA619C92428D1AB11A6931C81A859C79D8C01B441B1902ABE001BFF501DEE0E1E241E4567ECC74F9D4665AEA77C4F93AC312347A5087B686DC8361415A85197DB69CEEFD6D00CE94C34C290B8F79F10CC27A79D7C4D8F43736223576649E93457C75BA8C637927EC780A56B45163142DE1483777B4C8222C92B3C82AB372B3B0223D4EE246938EB85A7EC536DC77A291E152CF94E02465137DF2F25140669071913F868E58F379472235564F125B6C71C2705FE895ABEEFE33C656ACA7D489AD5C432B80AB9D8F732C03519F2E99F0DEAC4A7312FC351C059877BA09FB6455EFCB0D0DFE9F597416A5E1D88A7326C64D5539D91519935FADD5BE76EBB4D60FC57103CB8960890B4B1EC822C8D9781CF67B6DD1BE15E87406A0B0B5C06A69F6B07991C95B13CC0C4DBEA91589425E7C8D4E7CFE2CBBEC34D7705E8B52939D2E154B3435B7B4B8E41CD4DCEDF3892EF0F3352C8467CA46DB08A7DC93969E18B405F44508F919F4C0B3F2F7C0B79E661001B79FB0F0205A97CECFBE25DC4C711EA");

    byte[] srcRSACipherMAC = Forms.hexStringToByte("948D9944793CAFAB372E54468349B3E5");

    byte[] srcRSACipherTag = Forms.hexStringToByte("9C8A7CB4C6D1AE08775F0681ED497EDF");

    byte[] srcRSApublicKey = Forms.hexStringToByteArray("308186028180E14CAAFFCEC6D014457D7CA3E943DBABA1299BDBC17690C8E70F7BFA10EA02450805DA4C6CDC38BFBF1349C95B81A88177BA31C08E366EF965CA41EB36A2DACE611B80A752615A094B8291AAB6F8BB3A5894E72842371F34FA04C10DF42C2FEA95C51B9D49BE8B795E10474954FE01BAAC63532520069465FA62EDB266AADEBB020103");
    /**
     * Kunci privat RSA yang dienkripsi oleh LMK
     */
    byte[] srcRSAprivateKey = Forms.hexStringToByteArray("000202703D0652C7027B7D94B45A896646A9DC7CA89825FB12121B3CC00E37BE933055D5C00E37BE933055D54718ADDAA677519BD9C054CA249B43888FE000B8AAC33BA87A2C326985704335EA54D7F171CABCAD5531B3ADF33255A24075EFFF62691D4375E6280A9442CA36AA46AC59FAB16D9A9A7A283440BB14BAB1E78DBE887AE93A2C94C547779190D3FA801379BA948537281EFEFE567FD963E5D6E5D442D908A68BB6E26F3776EA30B1136A3804844035E26308E9B44BE154E1D09382E5A72BD711A6936373A8C32B62AF88134690C30D8B5505004F3BA01D11D0D791C8FF53D0E0786ED192CF1105FCF82160921EEF23E7BD72F13587B316BD9A771CEABBD0186B45E09C86E718AD4E5444EFFE747FE0C39E85D6190F3347656E72F486C321D5EA0D42127149C99F4F799A31F91E5826B74FF720A6E3CC2BCBBF645DD3D4A6A7D0BC953B4CFEE4E0D2BABFD606292F9F2395464484C306FBD60E4DD293E5F56C60BF1482A05775F0EEBAFBF9B70841DDDCFC974DD4D87E54D6A6A7A1A585EF0F42B0763D5DD7B5ECA83AFE610C26C9EF559B7883AC4716240BDFDC91C6EA19A0C01BB9C053F2A9C7EBCAE7D0AA8FB0DB88EFCF9C50A134E04649DAFF21D724E5C3CC043DE950C2CF246392DC4CA592D28C5A959BEB80B304E3BD949AD33178C06209FE6EB7130A381DFFD80F916AE0E0DD8FFDD9C8C9895BC483993D6011754FAD3C9F83A59C31F47810F8B2B22E5F25EF13671DFF34ECB65DE71D5B13DC5880595BC60B18D4711AE4613C739E2A48B516F6233E9AA9834075CE58975907F06FBA3B85C97E2E90B60BFEF0F23527E770798B571BC7CE29B67920538D509C58B1D8F966AF7E5321CDB2386164844D2BCB");


    byte[] srcSM2Cipher = Forms.hexStringToByte("83E260209C09CEF21E1AD68B09EC5FA762164497DB6D7C6EEA5D58D14F7C0B8D670537112DFB030F");

    byte[] srcSM2CipherMAC = Forms.hexStringToByte("7DF725131F3E67547F029550F2F073E9");

    byte[] srcSM2CipherTag = Forms.hexStringToByte("A2181C58228D7A32AE37C072987D1B7E");

    byte[] srcSM2publicKey = Forms.hexStringToByteArray("3059301306072A8648CE3D020106082A811CCF5501822D03420004549EAF3A09B4F486171FF320B81C4037286FC68026AA6E0101D3108C0573CFB0FF431DF8D3F9E5A31C7DE80940637E036B2D6FD36A0F586D4CDC3A610A269E89");

    byte[] srcSM2privateKey = Forms.hexStringToByteArray("79E62264C314D1D3279D9B7752CD137AD4095864801607EB52B6AB9C6ADBF2BC777F8CBE7EC55699");


    /**
     * Enkripsi dan dekripsi paket data besar
     */
    @Test
    public void bigDataEnc() throws TAException {
        byte[] enc = api.bigDataEnc(Forms.hexStringToByteArray("6DF7292D86B674B6B81F7C94DDC967A0"), "AES/ECB/PKCS5Padding", "demaxiyazhili".getBytes(), new byte[0]);
        System.out.println(Forms.byteToHexString(enc));
        byte[] dec = api.bigDataDec(Forms.hexStringToByteArray("6DF7292D86B674B6B81F7C94DDC967A0"), "AES/ECB/PKCS5Padding", enc, new byte[0]);
        System.out.println(new String(dec));

    }

    /**
     * Komputasi MAC dan verifikasi
     */
    @Test
    public void mac() throws TAException {
        byte[] bytes = api.calMac(1, 0, 2, sm4Key, 7, "1111111111111111".getBytes(),
                new byte[16]);
        System.out.println("Hasil komputasi MAC:" + Forms.byteToHexString(bytes));
        boolean b = api.verifyMAC(1, 0, 2, sm4Key, 7, "1111111111111111".getBytes(),
                new byte[16], bytes);
        System.out.println("Hasil verifikasi MAC:" + b);
    }

    /**
     * Komputasi Hash-based Message Authentication Code (HMAC)
     */
    @Test
    public void hmac() throws TAException {
        ArrayList<byte[]> hmac = api.hmac(20, 0, 2, sm4Key, new byte[0], "shuyaojisuandeshuju".getBytes());
        for (int i = 0; i < hmac.size(); i++) {
            System.out.println(Forms.byteToHexString(hmac.get(i)));
        }
    }

    /**
     * Pasangan kunci RSA yang dihasilkan dan kunci privat yang dienkripsi oleh LMK
     */
    @Test
    public void generateRSAKeyPair() throws TAException, IOException {
        ArrayList<byte[]> bytes = api.genRSAKey(2048, 65537);

        System.out.println("Kunci publik yang dikodekan DER:" + Forms.byteToHexString(bytes.get(0)));
        System.out.println("Kunci privat yang dienkripsi oleh LMK:" + Forms.byteToHexString(bytes.get(1)));
    }


    /**
     * Pasangan kunci RSA yang dihasilkan dan dienkripsi oleh kunci proteksi
     */
    @Test
    public void protectionKeyRSA() throws TAException, IOException {
        ArrayList<byte[]> bytes = api.proGenRSAKey (sm4Key, TACryptConst.KEY_ALG_SM4, sm4CV, 2048, 3,
                b, TACryptConst.ENC_MODE_ECB, b, new byte[2]);
        System.out.println("Kunci publik yang dikodekan DER:" + Forms.byteToHexString(bytes.get(0)));
        System.out.println("Kunci privat yang dienkripsi oleh LMK:" + Forms.byteToHexString(bytes.get(1)));
        System.out.println("Ciphertext kunci privat yang dienkripsi oleh kunci proteksi:" + Forms.byteToHexString(bytes.get(2)));
        System.out.println("Panjang MAC kunci asimetris privat:" + Forms.byteToHexString(bytes.get(3)));
    }

    /**
     * Pembuatan dan verifikasi tanda tangan oleh kunci privat RSA
     */
    byte[] privateRSA = Forms.hexStringToByte("000202703D0652C7027B7D94B45A896646A9DC7CA89825FB12121B3CC00E37BE933055D5C00E37BE933055D54718ADDAA677519BD9C054CA249B43888FE000B8AAC33BA87A2C326985704335EA54D7F171CABCAD5531B3ADF33255A24075EFFF62691D4375E6280A9442CA36AA46AC59FAB16D9A9A7A283440BB14BAB1E78DBE887AE93A2C94C547779190D3FA801379BA948537281EFEFE567FD963E5D6E5D442D908A68BB6E26F3776EA30B1136A3804844035E26308E9B44BE154E1D09382E5A72BD711A6936373A8C32B62AF88134690C30D8B5505004F3BA01D11D0D791C8FF53D0E0786ED192CF1105FCF82160921EEF23E7BD72F13587B316BD9A771CEABBD0186B45E09C86E718AD4E5444EFFE747FE0C39E85D6190F3347656E72F486C321D5EA0D42127149C99F4F799A31F91E5826B74FF720A6E3CC2BCBBF645DD3D4A6A7D0BC953B4CFEE4E0D2BABFD606292F9F2395464484C306FBD60E4DD293E5F56C60BF1482A05775F0EEBAFBF9B70841DDDCFC974DD4D87E54D6A6A7A1A585EF0F42B0763D5DD7B5ECA83AFE610C26C9EF559B7883AC4716240BDFDC91C6EA19A0C01BB9C053F2A9C7EBCAE7D0AA8FB0DB88EFCF9C50A134E04649DAFF21D724E5C3CC043DE950C2CF246392DC4CA592D28C5A959BEB80B304E3BD949AD33178C06209FE6EB7130A381DFFD80F916AE0E0DD8FFDD9C8C9895BC483993D6011754FAD3C9F83A59C31F47810F8B2B22E5F25EF13671DFF34ECB65DE71D5B13DC5880595BC60B18D4711AE4613C739E2A48B516F6233E9AA9834075CE58975907F06FBA3B85C97E2E90B60BFEF0F23527E770798B571BC7CE29B67920538D509C58B1D8F966AF7E5321CDB2386164844D2BCB");


    byte[] srcSM2Cipher = Forms.hexStringToByte("83E260209C09CC3F010349772852D7CD2C3C77DAEBA956791067754DA7FCFD8880E68AC28BFFF0F3");
    byte[] srcSM2CipherMAC = Forms.hexStringToByte("8184BE3669B2D12AEB673814E59E7700");
    byte[] srcSM2CipherTag = Forms.hexStringToByte("8FD638CA4D7640BDE213F5777253D192");
    byte[] srcSM2PriKey = Forms.hexStringToByte("4F23C664B68C8A38B31F52727C856211D8D21B1AC76F300D2CD027E5AFD566976CEA234A749F031D");


    /**
     * Dekripsi oleh kunci privat ECC dan SM2 yang dilindungi oleh kunci proteksi
     */
    @Test
    public void protectionPrivateKeyDecrypt() throws TAException {
        byte[] bytes = api.proPriKeyDec(sm4Key, TACryptConst.KEY_ALG_SM4, sm4CV, srcRSACipher, b, srcRSACipherMAC, TACryptConst.ENC_MODE_GCM,
                b, new byte[2], srcRSACipherTag, Forms.hexStringToByteArray("E9C17D82604F992BB3AB8FE0F766441DACC05EB779D1D1CC9C5FEFF671739A87274713242CBBA04161C3994EA264C30D82BB6DAF8E688D3BADC8768A18226D8EAEB984E5EA739C2E8792921F02AA612F5AB732FACEC8316B880499E6E70260333E9F29CEBCF3F8E10C151F79445276F6"));
        System.out.println("Plaintext setelah dekripsi: " + Forms.byteToHexString(bytes));
    }

    /**
     * Pembuatan tanda tangan oleh kunci privat ECC dan SM2 yang dilindungi oleh kunci proteksi
     */
    @Test
    public void privateSignSM2() throws TAException {
        byte[] bytes = api.proPriKeySign(sm4Key,TACryptConst.KEY_ALG_SM4 , sm4CV, srcRSACipher, b, srcRSACipherMAC, TACryptConst.ENC_MODE_GCM,
                b, new byte[2], srcRSACipherTag, Forms.hexStringToByteArray("20D90A83A4654FB89AD97E7FF9B178BAA58E12CE8E5C16DE0371B374F76DEFA5"));
        System.out.println("Hasil pembuatan tanda tangan oleh kunci privat ECC dan SM2 yang dilindungi oleh kunci proteksi: " + Forms.byteToHexString(bytes));

        boolean b = api.pubKeyVerify(7, srcSM2Key, Forms.hexStringToByteArray("20D90A83A4654FB89AD97E7FF9B178BAA58E12CE8E5C16DE0371B374F76DEFA5"), bytes);
        System.out.println("Hasil verifikasi tanda tangan oleh kunci publik ECC dan SM2 (kunci privat dilindungi oleh kunci proteksi): " + b);
    }

    /**
     * Impor kunci simetris untuk melindungi kunci asimetris SM2.
     */
    @Test
    public void SM2ImplKEK() throws TAException {
        ArrayList<byte[]> bytes = api.SM2ImplKEK(srcSM2PriKey, 300, TACryptConst.KEY_ALG_SM4, Forms.hexStringToByteArray("9A9161F87BCBD3E9BC8866B8706E8F75B682DA2712E7E32A5D0E4867700D8233284BF4EA98E352BE74817D240D92347F969809BA54626192102086000756E2CFD98A3CC8923513B3BF72FA33B39CB999E15613440F2DAD9AE786E3D73349D78FA7915B3CB633EFD9A88E638D93297934"), "914-zjl".getBytes());
        System.out.println("Kunci simetris yang dienkripsi oleh LMK: " + Forms.byteToHexString(bytes.get(0)));
        System.out.println("Nilai checksum kunci simetris: " + Forms.byteToHexString(bytes.get(1)));
    }

    /**
     * Kunci enkripsi kunci asimetris SM2 dan ECC diubah
     */
    @Test
    public void conversionEncryption() throws TAException {
        ArrayList<byte[]> bytes = api.conversionEncryption(0, TACryptConst.KEY_ALG_SM4, sm4Key, sm4CV, 2,
                -1, srcSM2Cipher, b, srcSM2CipherMAC, TACryptConst.ENC_MODE_GCM, b, new byte[2], srcSM2CipherTag, 0,
                TACryptConst.KEY_ALG_SM4, sm4Key2, sm4Key2CV, b, TACryptConst.ENC_MODE_CBC, b, new byte[2]);
        for (int i = 0; i < bytes.size(); i++) {
            System.out.println("No.:" + i + "===" + Forms.byteToHexString(bytes.get(i)));
        }
    }

    /**
     * Dapatkan detail kunci simetris berdasarkan indeks kunci.
     */
    @Test
    public void getKeyInfo() throws TAException {
        String[] keyInfo = api.getKeyInfo(66);
        System.out.println(keyInfo[0]);
    }
    /**
     * Dapatkan kunci publik RSA berdasarkan indeks kunci.
     */
    @Test
    public void exportRSAPublicKey() throws TAException, IOException {
        ArrayList<byte[]> keyInfo = api.exportRSAPublicKey(77,0);
        System.out.println(Forms.byteToHexString(keyInfo.get(0)));
    }
    /**
     * Dapatkan kunci publik ECC berdasarkan indeks kunci.
     */
    @Test
    public void ExportEncPublicKey() throws TAException {
        byte[] keyInfo = api.exportECCPublicKey(66,0);
        System.out.println(Forms.byteToHexString(keyInfo));
    }

    @Test
    public void generateAndSaveKey() throws Exception {
        ArrayList<byte[]> symmKey = api.generateSymmKey(7, 32);
        for (int i = 0; i < symmKey.size(); i++) {
            System.out.println(Forms.byteToHexString(symmKey.get(i)));
        }
        boolean b = api.generateRSAKey(2048, 65537, 13);
        System.out.println("Pasangan kunci RSA dihasilkan dan disimpan" + (b ? "Berhasil":"Gagal"));
        boolean b1 = api.generateECCKey(0x019F, 8);
        System.out.println("Pasangan kunci ECC dihasilkan dan disimpan" + (b1 ? "Berhasil":"Gagal"));

    }


}

Operasi lainnya

Tambah kapasitas klaster

Anda dapat menambahkan HSM dari zona berbeda ke klaster yang sama dan mengelola HSM secara terpusat. Ini membantu memastikan ketersediaan tinggi Cloud Hardware Security Module. HSM hanya dapat ditambahkan ke klaster jika memenuhi persyaratan berikut:

  • HSM belum diinisialisasi.

  • HSM dalam status Enabled atau New.

  • HSM memiliki tipe yang sama dengan HSM utama klaster.

  • Tidak ada vSwitches yang dikonfigurasi untuk HSM, atau HSM menggunakan vSwitch yang sama dengan HSM utama.

Penting
  • Jika daftar putih dikonfigurasikan untuk HSM, daftar putih klaster akan berlaku setelah HSM ditambahkan ke klaster. Daftar putih HSM akan dihapus.

  • Jika Anda ingin menambah kapasitas klaster HSM untuk instans KMS tipe manajemen kunci perangkat keras, pastikan sinkronisasi data klaster otomatis. Jika sinkronisasi data klaster manual, hubungi dukungan teknis Alibaba Cloud untuk meningkatkan metode sinkronisasi ke sinkronisasi otomatis.

  1. Di halaman VSMs, temukan instans HSM utama target dan klik Expand Cluster di kolom Actions.

  2. Tambahkan HSM ke klaster dengan salah satu metode berikut.

    • Jika tidak ada HSM yang tersedia, klik Purchase an HSM instance di kotak dialog Add HSM untuk membeli HSM.

      HSM yang dibeli secara otomatis ditambahkan ke klaster. Cloud Hardware Security Module secara otomatis menetapkan alamat IP ke HSM dan menyinkronkan data dalam klaster.

    • Jika HSM tersedia, lakukan operasi berikut: Di kotak dialog Add HSM, pilih HSM yang ingin Anda tambahkan, klik ikon 添加, lalu klik OK.

Hapus instans dari klaster

Untuk menghapus instans HSM dari klaster, hapus instans anak terlebih dahulu, lalu hapus instans utama. Jika klaster hanya berisi instans utama, Anda dapat langsung menghapusnya. Klaster secara otomatis dihapus setelah instans utama dihapus.

  1. Nonaktifkan HSM. Anda harus menonaktifkan HSM sebelum dapat menghapusnya dari klaster.

    1. Di halaman VSMs, temukan instans HSM target dan klik Disable di kolom Actions.

    2. Di kotak dialog yang muncul, klik Disable lagi.

  2. Di halaman VSMs, temukan instans HSM target dan klik Remove from Cluster di kolom Actions.

  3. Di kotak dialog yang muncul, klik Remove from Cluster lagi.

Ubah nama klaster dan daftar putih akses

Jika tidak ada daftar putih yang diatur, semua alamat IP dapat mengakses klaster. Jika daftar putih diatur, permintaan akses dari alamat IP yang tidak terdaftar dalam daftar putih akan ditolak.

  1. Di halaman VSMs, klik ID instans HSM utama atau anak.

  2. Di tab Details, edit nama klaster dan daftar putih akses.

    Anda dapat memasukkan satu alamat IP atau blok CIDR. Masukkan satu entri per baris. Anda dapat memasukkan hingga 10 entri.

    Penting
    • Daftar putih klaster memiliki prioritas lebih tinggi daripada daftar putih HSM dalam klaster. Sebagai contoh, jika Anda menambahkan 10.10.10.10 ke daftar putih HSM dan menambahkan 172.16.0.1 ke daftar putih klaster yang mencakup HSM tersebut, Anda hanya dapat mengakses HSM dari 172.16.0.1.

    • Konfigurasi daftar putih 0.0.0.0/0 tidak didukung. Jika Anda memasukkan 0.0.0.0/0, permintaan dari semua alamat IP diizinkan.

      Untuk alasan keamanan, kami sarankan Anda tidak mengizinkan permintaan dari semua alamat IP. Jika Anda perlu mengizinkan permintaan dari semua alamat IP, jangan konfigurasikan daftar putih.

Ganti HSM utama dan anak

Anda dapat secara manual mengganti HSM anak menjadi HSM utama dalam klaster. Operasi ini hanya didukung ketika metode sinkronisasi klaster adalah sinkronisasi manual.

  1. Di halaman VSMs, temukan instans HSM anak target dan klik Switch to Master di kolom Actions.

  2. Di kotak dialog yang muncul, klik Switch.