Dedicated KMS SDK untuk Java memungkinkan Anda memanggil operasi API dari Dedicated Key Management Service (KMS) dengan mudah. SDK ini cocok untuk skenario bisnis seperti enkripsi data, dekripsi data, pembuatan tanda tangan, verifikasi tanda tangan, dan kueri nilai rahasia. Topik ini menjelaskan cara menginisialisasi SDK dan memanggil operasi API untuk mengenkripsi serta mendekripsi data, menghasilkan dan memverifikasi tanda tangan, serta memperoleh informasi rahasia.
Informasi latar belakang
Anda dapat mengunjungi repositori kode sumber terbuka untuk melihat kode sumber dan contoh kode dari Dedicated KMS SDK. Anda dipersilakan untuk berbagi komentar atau memberikan contoh kode Anda.
Prasyarat
Instans Dedicated KMS telah dibeli dan dihubungkan ke kluster modul keamanan perangkat keras (HSM). Kunci master pelanggan (CMK) dan titik akhir aplikasi (AAP) telah dibuat untuk instans tersebut, serta kunci klien dan sertifikat otoritas sertifikat (CA) telah disimpan. Untuk informasi lebih lanjut, lihat Menghubungkan aplikasi ke instans Dedicated KMS edisi Standar.
CatatanSertifikat CA yang diunduh diberi nama dalam format PrivateKmsCA_kst-******.pem, dan file kunci klien yang diunduh diberi nama dalam format ClientKey_******.json.
Alamat virtual private cloud (VPC) yang digunakan untuk mengakses instans Dedicated KMS telah diperoleh. Alamat VPC harus memenuhi persyaratan berikut:
Alamat VPC ditentukan saat kluster HSM diaktifkan.
Alamat VPC dapat diakses dari komputer Anda.
Untuk informasi lebih lanjut, lihat Memeriksa instans Dedicated KMS edisi Standar.
Instalasi Dedicated KMS SDK
Tambahkan dependensi alibabacloud-dkms-gcs-sdk ke proyek Anda. Paket Java yang diterbitkan dari Dedicated KMS SDK akan otomatis diunduh dari repositori Maven.
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-dkms-gcs-sdk</artifactId>
<version>x.x.x</version>
</dependency>Untuk mendapatkan versi terbaru dari Dedicated KMS SDK, kunjungi Dedicated KMS SDK untuk Java.
Inisialisasi Dedicated KMS SDK
Buat klien Java untuk instans Dedicated KMS untuk memanggil sumber daya yang dikelola oleh instans tersebut. Sebagai contoh, Anda dapat menggunakan klien untuk melakukan operasi kriptografi dan memperoleh informasi rahasia. Sebelum menggunakan Dedicated KMS SDK untuk Java untuk mengirim permintaan API, Anda harus membuat klien.
Dedicated KMS SDK untuk Java 0.2.7 dan yang lebih baru (direkomendasikan)
Buat klien.
import com.aliyun.dkms.gcs.openapi.models.Config;
import com.aliyun.dkms.gcs.sdk.Client;
// Protokol koneksi antara instans Dedicated KMS dan klien. Atur nilainya menjadi https.
String protocol = "https";
// Alamat VPC dari instans Dedicated KMS. Alamat VPC tidak termasuk skema https.
String endpoint = "<service_id>.cryptoservice.kms.aliyuncs.com";
// DKMS Client Key
String clientKeyFilePath = "<your client key file path>";
//String clientKey = "<your client key>";
// Kata sandi yang digunakan untuk mendekripsi kunci klien dari instans Dedicated KMS.
String clientKeyPass = "<your client key password>";
String caCertPath = "<path/to/DKMSInstanceCACertificates>";
//String caCert = "<The DKMS instance CA certificates content>";
Client client = new Client(new Config()
.setProtocol(protocol)
.setEndpoint(endpoint)
.setCaFilePath(caCertPath) // Jalur ke file sertifikat CA atau konten sertifikat CA. Konfigurasikan parameter ini sesuai dengan kebutuhan bisnis Anda.
//.setCa(caCert) // Konten sertifikat CA.
.setClientKeyFile(clientKeyFilePath)// Jalur ke file kunci klien atau konten file kunci klien. Konfigurasikan parameter ini sesuai dengan kebutuhan bisnis Anda.
//.setClientKeyContent(clientKey)// Konten file kunci klien.
.setPassword(clientKeyPass));Dalam lingkungan pengembangan, Anda dapat menggunakan RuntimeOptions untuk sementara mengabaikan verifikasi sertifikat tepercaya. Contoh kode:
import com.aliyun.dkms.gcs.openapi.util.models.RuntimeOptions;
RuntimeOptions runtimeOptions = new RuntimeOptions();
runtimeOptions.setIgnoreSSL(true);
...
client.encryptWithOptions(encryptRequest, runtimeOptions);Dedicated KMS SDK untuk Java 0.2.6 dan yang lebih lama
Konfigurasikan sertifikat CA.
Untuk memastikan bahwa koneksi aman didirikan dalam lingkungan produksi, konfigurasikan sertifikat tepercaya Java.
Pisahkan file sertifikat CA menjadi dua file.
Sertifikat CA terdiri dari dua file, masing-masing dimulai dengan
------BEGIN CERTIFICATE --------dan diakhiri dengan------END CERTIFICATE --------. Secara default, file pertama berisi konten rootca.pem dan file kedua berisi konten subca.pem.File 1:
rootca.pem-----BEGIN CERTIFICATE----- <Root CA Certificate BASE64 Content> -----END CERTIFICATE-----File 2:
subca.pem-----BEGIN CERTIFICATE----- <Sub CA Certificate BASE64 Content> -----END CERTIFICATE-----
Impor kedua file ke direktori
JAVA_HOME/jre/lib/security/cacertsmenggunakan perintah keytool.Impor File 1:
rootca.pemkeytool -importcert -alias PrivateKmsCA_RootCA -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file rootca.pemImpor File 2:
subca.pemkeytool -importcert -alias PrivateKmsCA_SubCA -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file subca.pem
Verifikasi kode.
URL serviceUrl = new URL("https://<service_id>.cryptoservice.kms.aliyuncs.com"); serviceUrl.openConnection().connect();CatatanJika
javax.net.ssl.SSLHandshakeExceptiontidak dilaporkan, konfigurasi valid.Dalam lingkungan pengembangan, Anda dapat menggunakan
RuntimeOptionsuntuk sementara mengabaikan verifikasi sertifikat tepercaya. Contoh kode:import com.aliyun.dkms.gcs.openapi.util.models.RuntimeOptions; RuntimeOptions runtimeOptions = new RuntimeOptions(); runtimeOptions.setIgnoreSSL(true); ... client.encryptWithOptions(encryptRequest, runtimeOptions);
Buat klien untuk instans Dedicated KMS.
import com.aliyun.dkms.gcs.openapi.models.Config; import com.aliyun.dkms.gcs.sdk.Client; // Protokol koneksi antara instans Dedicated KMS dan klien. Atur nilainya menjadi https. String protocol = "https"; // Alamat VPC dari instans Dedicated KMS. Alamat VPC tidak termasuk skema https. String endpoint = "<service_id>.cryptoservice.kms.aliyuncs.com"; // Kunci klien dari instans Dedicated KMS. String clientKey = "<your client key>"; // Kata sandi yang digunakan untuk mendekripsi kunci klien dari instans Dedicated KMS. String clientKeyPass = "<your client key password>"; Client client = new Client(new Config() .setProtocol(protocol) .setEndpoint(endpoint) .setClientKeyContent(clientKey) .setPassword(clientKeyPass));
Contoh
Gunakan klien dari instans Dedicated KMS untuk memanggil operasi Enkripsi guna mengenkripsi data menggunakan CMK simetris.
Untuk informasi lebih lanjut tentang kode contoh, lihat Kode sumber.
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; // ID atau alias dari CMK simetris dari instans Dedicated KMS. String cipherKeyId = "<your cipher key id>"; // Data yang ingin Anda enkripsi. byte[] originData = <your origin data to encrypt>; EncryptRequest encryptRequest = new EncryptRequest(); encryptRequest.setKeyId(cipherKeyId); encryptRequest.setPlaintext(originData); EncryptResponse encryptResponse = client.encrypt(encryptRequest); // Teks sandi. byte[] cipherData = encryptResponse.getCiphertextBlob(); // Vektor awal Cipher yang digunakan untuk mendekripsi data. byte[] iv = encryptResponse.getIv(); // ID permintaan. String requestId = encryptResponse.getRequestId();Gunakan klien dari instans Dedicated KMS untuk memanggil operasi Dekripsi guna mendekripsi teks sandi menggunakan CMK simetris.
Untuk informasi lebih lanjut tentang kode contoh, lihat Kode sumber.
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; // ID atau alias dari CMK simetris dari instans Dedicated KMS. String cipherKeyId = "<your cipher key id>"; // Teks sandi yang ingin Anda dekripsi. byte[] cipherData = <your cipher data to decrypt>; // Vektor awal Cipher. Vektor awal harus sama dengan vektor awal yang ditentukan untuk enkripsi. byte[] iv = <IV value>; DecryptRequest decryptRequest = new DecryptRequest(); decryptRequest.setKeyId(cipherKeyId); decryptRequest.setCiphertextBlob(cipherData); decryptRequest.setIv(iv); DecryptResponse decryptResponse = client.decrypt(decryptRequest); // Teks biasa. byte[] originData = decryptResponse.getPlaintext(); // ID permintaan. String requestId = decryptResponse.getRequestId();Gunakan klien dari instans Dedicated KMS untuk memanggil operasi Sign guna menghasilkan tanda tangan menggunakan CMK asimetris.
Untuk informasi lebih lanjut tentang kode contoh, lihat Kode sumber.
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; // ID atau alias dari CMK simetris dari instans Dedicated KMS. String signerKeyId = "<the signer key id>"; // Data untuk ditandatangani. byte[] message = <the data to sign>; SignRequest signRequest = new SignRequest(); signRequest.setKeyId(signKeyId); signRequest.setMessage(message); SignResponse signResponse = client.sign(signRequest); // Nilai tanda tangan. byte[] signature = signResponse.getSignature(); // ID permintaan. String requestId = signResponse.getRequestId();Gunakan klien dari instans Dedicated KMS untuk memanggil operasi Verify guna memverifikasi tanda tangan menggunakan CMK asimetris.
Untuk informasi lebih lanjut tentang kode contoh, lihat Kode sumber.
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; // ID atau alias dari CMK simetris dari instans Dedicated KMS. String signerKeyId = "<the signer key id>"; // Data untuk mana Anda ingin memverifikasi tanda tangan. byte[] message = <the data to sign>; VerifyRequest verifyRequest = new VerifyRequest(); verifyRequest.setKeyId(signerKeyId); verifyRequest.setMessage(message); verifyRequest.setSignature(signature); VerifyResponse verifyResponse = client.verify(verifyRequest); // Hasil verifikasi. boolean valid = verifyResponse.getValue(); // ID permintaan. String requestId = verifyResponse.getRequestId();Gunakan klien dari instans Dedicated KMS untuk memanggil operasi GetSecretValue guna menanyakan nilai rahasia.
Untuk informasi lebih lanjut tentang kode contoh, lihat Kode sumber.
CatatanDedicated KMS SDK untuk Java 0.2.6 dan yang lebih baru mendukung operasi GetSecretValue.
import com.aliyun.dkms.gcs.sdk.Client; import com.aliyun.dkms.gcs.sdk.models.*; // Nama rahasia. String secretName = "<your-secret-name>"; GetSecretValueRequest request = new GetSecretValueRequest() .setSecretName(secretName); GetSecretValueResponse getSecretValueResponse = client.getSecretValue(request); // Nilai rahasia. String secretData = getSecretValueResponse.getSecretData(); // ID permintaan. String requestId = getSecretValueResponse.getRequestId();