Setelah menginisialisasi SDK client instance KMS, Anda dapat menggunakannya untuk memanggil API Sign dan Verify guna melakukan penandatanganan dan verifikasi. Topik ini menyediakan contoh kode terkait.
Contoh lengkap
Penjelasan contoh
Inisialisasi client
Anda dapat membuat objek client SDK instance KMS menggunakan konten ClientKey atau jalur file ClientKey.
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"
)
// Gunakan konten ClientKey untuk membuat objek client SDK instance KMS.
func getDkmsClientByClientKeyContent() *dedicatedkmssdk.Client {
// Buat konfigurasi client SDK instance KMS.
config := &dedicatedkmsopenapi.Config{
// Setel protokol koneksi ke "https". Layanan instance KMS hanya mengizinkan akses melalui protokol HTTPS.
Protocol: tea.String("https"),
// Ganti dengan konten file ClientKey.
ClientKeyContent: tea.String("<CLIENT_KEY_CONTENT>"),
// Ganti dengan kata sandi enkripsi yang dimasukkan saat membuat ClientKey.
Password: tea.String("<CLIENT_KEY_PASSWORD>"),
// Setel titik akhir ke <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com.
Endpoint: tea.String("<ENDPOINT>"),
}
// Buat objek client SDK instance KMS.
client, err := dedicatedkmssdk.NewClient(config)
if err != nil {
// Penanganan abnormal.
panic(err)
}
return client
}
// Gunakan jalur file ClientKey untuk membuat objek client SDK instance KMS.
func getDkmsClientByClientKeyFile() *dedicatedkmssdk.Client {
// Buat konfigurasi client DKMS.
config := &dedicatedkmsopenapi.Config{
// Setel protokol koneksi ke "https". Layanan instance KMS hanya mengizinkan akses melalui protokol HTTPS.
Protocol: tea.String("https"),
// Ganti dengan jalur file ClientKey.
ClientKeyFile: tea.String("<CLIENT_KEY_FILE>"),
// Ganti dengan kata sandi enkripsi yang dimasukkan saat membuat ClientKey.
Password: tea.String("<CLIENT_KEY_PASSWORD>"),
// Setel titik akhir ke <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com.
Endpoint: tea.String("ENDPOINT"),
}
// Buat objek client SDK instance KMS.
client, err := dedicatedkmssdk.NewClient(config)
if err != nil {
// Penanganan abnormal.
panic(err)
}
return client
}Panggil API Sign untuk melakukan penandatanganan digital menggunakan kunci asimetris
// Contoh penandatanganan
func signSample(client *dedicatedkmssdk.Client, keyId string, message []byte, messageType string) *SignatureContext {
signRequest := &dedicatedkmssdk.SignRequest{
KeyId: tea.String(keyId),
Message: message,
MessageType: tea.String(messageType),
}
// Verifikasi sertifikat server.
ca, err := ioutil.ReadFile("path/to/caCert.pem")
if err != nil {
panic(err)
}
runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
Verify: tea.String(string(ca)),
}
// Atau, abaikan sertifikat.
//runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
// IgnoreSSL: tea.Bool(true),
//}
// Panggil API penandatanganan untuk penandatanganan.
signResponse, err := client.SignWithOptions(signRequest, runtimeOptions)
if err != nil {
panic(err)
}
// ID Kunci.
_keyId := tea.StringValue(signResponse.KeyId)
// Nilai tanda tangan.
_signature := signResponse.Signature
// Jenis pesan.
_messageType := tea.StringValue(signResponse.MessageType)
// Algoritma tanda tangan.
_algorithm := tea.StringValue(signResponse.Algorithm)
fmt.Println("KeyId:", _keyId)
fmt.Println("Signature:", _signature)
fmt.Println("MessageType:", _messageType)
fmt.Println("RequestId:", tea.StringValue(signResponse.RequestId))
return &SignatureContext{
KeyId: _keyId,
Signature: _signature,
MessageType: messageType,
Algorithm: _algorithm,
}
}Panggil API Verify untuk memverifikasi tanda tangan digital menggunakan kunci asimetris
// Contoh verifikasi tanda tangan.
func verifySample(client *dedicatedkmssdk.Client, message []byte, ctx *SignatureContext) (_value bool) {
verifyRequest := &dedicatedkmssdk.VerifyRequest{
KeyId: tea.String(ctx.KeyId),
Message: message,
MessageType: tea.String(ctx.MessageType),
Signature: ctx.Signature,
Algorithm: tea.String(ctx.Algorithm),
}
// Verifikasi sertifikat server.
ca, err := ioutil.ReadFile("path/to/caCert.pem")
if err != nil {
panic(err)
}
runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
Verify: tea.String(string(ca)),
}
// Atau, abaikan sertifikat.
//runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
// IgnoreSSL: tea.Bool(true),
//}
// Panggil API verifikasi tanda tangan untuk verifikasi tanda tangan.
verifyResponse, err := client.VerifyWithOptions(verifyRequest, runtimeOptions)
if err != nil {
panic(err)
}
// Hasil verifikasi tanda tangan.
_value = tea.BoolValue(verifyResponse.Value)
// Jenis pesan
_messageType := verifyResponse.MessageType
fmt.Println("KeyId:", tea.StringValue(verifyResponse.KeyId))
fmt.Println("Value:", _value)
fmt.Println("MessageType:", tea.StringValue(_messageType))
fmt.Println("RequestId:", tea.StringValue(verifyResponse.RequestId))
return tea.BoolValue(verifyResponse.Value)
}