Dedicated KMS SDK for Go memungkinkan Anda memanggil API Dedicated Key Management Service (KMS) langsung dari aplikasi Go. SDK ini mendukung operasi berikut:
Mengenkripsi data menggunakan kunci master pelanggan (CMK) simetris
Mendekripsi ciphertext menggunakan CMK simetris
Menghasilkan tanda tangan digital menggunakan CMK asimetris
Memverifikasi tanda tangan digital menggunakan CMK asimetris
Mengambil nilai rahasia
Kode sumber dan contoh tambahan tersedia di repositori open source.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membeli instans Dedicated KMS dan menghubungkannya ke kluster hardware security module (HSM), serta membuat CMK dan application access endpoint (AAP). Untuk petunjuk penyiapan, lihat Hubungkan aplikasi ke instans Dedicated KMS edisi Standard.
File kunci klien (
ClientKey_****.json) dan Sertifikat CA (PrivateKmsCA_kst-****.pem) diunduh dan disimpan secara lokal.Memiliki titik akhir virtual private cloud (VPC) untuk instans Dedicated KMS. Alamat VPC ditentukan saat kluster HSM diaktifkan dan harus dapat dijangkau dari lingkungan Anda. Untuk mencari alamat tersebut, lihat Kueri instans Dedicated KMS edisi Standard.
Instal SDK
Opsi 1: go.mod (disarankan)
Tambahkan baris berikut ke file go.mod Anda:
require (
github.com/aliyun/alibabacloud-dkms-gcs-go-sdk <version>
)Untuk versi terbaru, lihat repositori open source.
Opsi 2: go get
go get -u github.com/aliyun/alibabacloud-dkms-gcs-go-sdkInisialisasi SDK
Inisialisasi SDK melibatkan dua langkah: konfigurasikan sertifikat CA untuk verifikasi TLS, lalu buat klien untuk instans Dedicated KMS.
Langkah 1: Konfigurasikan sertifikat CA
Semua permintaan ke instans Dedicated KMS menggunakan mTLS. Atur bidang Verify dalam RuntimeOptions ke konten sertifikat CA Anda.
import (
dedicatedkmsopenapiutil "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi-util"
"github.com/alibabacloud-go/tea/tea"
"io/ioutil"
)
// Baca sertifikat CA dari disk.
ca, err := ioutil.ReadFile("path/to/PrivateKmsCA_kst-******.pem")
if err != nil {
log.Fatalf("failed to read CA certificate: %v", err)
}
runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
Verify: tea.String(string(ca)),
}Jangan atur IgnoreSSL: tea.Bool(true) di lingkungan produksi. Flag ini menonaktifkan verifikasi sertifikat TLS dan hanya boleh digunakan di lingkungan pengembangan lokal.
// Hanya untuk lingkungan pengembangan — menonaktifkan verifikasi TLS.
runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
IgnoreSSL: tea.Bool(true),
}Langkah 2: Buat client
Buat klien dengan menyediakan konten client key, kata sandi dekripsinya, dan titik akhir instans Dedicated KMS Anda. Titik akhir tidak mencakup skema https://.
import (
dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi"
dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
"github.com/alibabacloud-go/tea/tea"
)
config := &dedicatedkmsopenapi.Config{
// Protokol koneksi. Harus https.
Protocol: tea.String("https"),
// Konten file client key (ClientKey_******.json).
ClientKeyContent: tea.String("<your-client-key-content>"),
// Password yang digunakan untuk mendekripsi client key.
Password: tea.String("<your-client-key-password>"),
// Titik akhir instans Dedicated KMS, tanpa skema https://.
Endpoint: tea.String("<service_id>.cryptoservice.kms.aliyuncs.com"),
}
client, err := dedicatedkmssdk.NewClient(config)
if err != nil {
log.Fatalf("failed to create Dedicated KMS client: %v", err)
}Ganti placeholder berikut:
| Placeholder | Deskripsi |
|---|---|
<your-client-key-content> | Konten file ClientKey_******.json |
<your-client-key-password> | Password yang ditetapkan saat client key dibuat |
<service_id>.cryptoservice.kms.aliyuncs.com | Titik akhir yang ditampilkan di detail instans Dedicated KMS |
Contoh
Semua contoh menggunakan client dan runtimeOptions yang telah diinisialisasi di atas.
Enkripsi data
Enkripsi data dengan CMK simetris menggunakan EncryptWithOptions. Respons mencakup CiphertextBlob dan Iv (vektor inisialisasi). Simpan Iv bersama ciphertext — Anda harus memberikan nilai yang sama saat mendekripsi.
Untuk contoh lengkap, lihat Kode sumber.
import (
dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
"github.com/alibabacloud-go/tea/tea"
)
plaintext := []byte("your plaintext data")
// ID atau alias CMK simetris.
keyId := "<your-cmk-id>"
encryptRequest := &dedicatedkmssdk.EncryptRequest{
KeyId: tea.String(keyId),
Plaintext: plaintext,
}
encryptResponse, err := client.EncryptWithOptions(encryptRequest, runtimeOptions)
if err != nil {
log.Fatalf("encrypt failed: %v", err)
}
// Simpan kedua nilai ini — keduanya diperlukan untuk dekripsi.
ciphertextBlob := encryptResponse.CiphertextBlob
iv := encryptResponse.Iv
requestId := tea.StringValue(encryptResponse.RequestId)Dekripsi data
Berikan CiphertextBlob dan Iv yang dikembalikan oleh Encrypt ke DecryptWithOptions. Iv harus persis sama.
Untuk contoh lengkap, lihat Kode sumber.
import (
dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
"github.com/alibabacloud-go/tea/tea"
)
// ID atau alias CMK simetris yang digunakan saat enkripsi.
keyId := "<your-cmk-id>"
// Ciphertext dan IV dari respons enkripsi.
ciphertextBlob := []byte("<ciphertext-blob>")
iv := []byte("<iv-from-encrypt-response>")
decryptRequest := &dedicatedkmssdk.DecryptRequest{
KeyId: tea.String(keyId),
CiphertextBlob: ciphertextBlob,
Iv: iv,
}
decryptResponse, err := client.DecryptWithOptions(decryptRequest, runtimeOptions)
if err != nil {
log.Fatalf("decrypt failed: %v", err)
}
plaintext := decryptResponse.Plaintext
requestId := tea.StringValue(decryptResponse.RequestId)Sign data
Hasilkan tanda tangan digital menggunakan CMK asimetris dengan SignWithOptions.
Untuk contoh lengkap, lihat Kode sumber.
import (
dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
"github.com/alibabacloud-go/tea/tea"
)
// ID atau alias CMK asimetris.
signerKeyId := "<your-asymmetric-cmk-id>"
message := []byte("<data-to-sign>")
// Jenis pesan. Untuk nilai yang valid, lihat repositori open source.
messageType := "<message-type>"
signRequest := &dedicatedkmssdk.SignRequest{
KeyId: tea.String(signerKeyId),
Message: message,
MessageType: tea.String(messageType),
}
signResponse, err := client.SignWithOptions(signRequest, runtimeOptions)
if err != nil {
log.Fatalf("sign failed: %v", err)
}
signature := signResponse.Signature
requestId := tea.StringValue(signResponse.RequestId)Verifikasi signature
Verifikasi signature terhadap pesan aslinya menggunakan VerifyWithOptions. Bidang Value dalam respons menunjukkan apakah signature valid.
Untuk contoh lengkap, lihat Kode sumber.
import (
dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
"github.com/alibabacloud-go/tea/tea"
)
// ID atau alias CMK asimetris yang digunakan saat signing.
signerKeyId := "<your-asymmetric-cmk-id>"
message := []byte("<original-data>")
signature := []byte("<signature-to-verify>")
// Harus sesuai dengan messageType yang digunakan saat signing.
messageType := "<message-type>"
verifyRequest := &dedicatedkmssdk.VerifyRequest{
KeyId: tea.String(signerKeyId),
Message: message,
MessageType: tea.String(messageType),
Signature: signature,
}
verifyResponse, err := client.VerifyWithOptions(verifyRequest, runtimeOptions)
if err != nil {
log.Fatalf("verify failed: %v", err)
}
// true jika signature valid, false jika tidak.
isValid := tea.BoolValue(verifyResponse.Value)
requestId := tea.StringValue(verifyResponse.RequestId)Ambil nilai rahasia
GetSecretValue memerlukan Dedicated KMS SDK for Go v0.2.1 atau yang lebih baru.
Untuk contoh lengkap, lihat Kode sumber.
import (
dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
"github.com/alibabacloud-go/tea/tea"
)
secretName := "<your-secret-name>"
getSecretValueRequest := &dedicatedkmssdk.GetSecretValueRequest{
SecretName: tea.String(secretName),
}
response, err := client.GetSecretValueWithOptions(getSecretValueRequest, runtimeOptions)
if err != nil {
log.Fatalf("GetSecretValue failed: %v", err)
}
secretData := tea.StringValue(response.SecretData)
requestId := tea.StringValue(response.RequestId)