Todos os produtos
Search
Central de documentação

Key Management Service:Código de exemplo para assinatura e verificação

Última atualização: Jun 27, 2026

Use o cliente Python do SDK de instância do KMS para assinar dados e verificar assinaturas digitais com uma chave assimétrica. Esta página apresenta um exemplo funcional completo, seguido de uma explicação passo a passo.

Todos os exemplos usam sign_with_options e verify_with_options para enviar solicitações por meio de um cliente configurado.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Inicializado o cliente do SDK de instância do KMS. Consulte Inicializar o cliente

  • Um ID de chave assimétrica (key_id) e um algoritmo de assinatura compatível

Exemplo completo

# -*- coding: utf-8 -*-
import os

from openapi.models import Config
from openapi_util.models import RuntimeOptions
from sdk.client import Client
from sdk.models import SignRequest, VerifyRequest

config = Config()
# KMS instance service only allows HTTPS access.
config.protocol = "https"
# Path to the Client Key file.
config.client_key_file = "<CLIENT_KEY_FILE>"
# Client Key decryption password, loaded from an environment variable.
config.password = os.getenv('CLIENT_KEY_PASSWORD')
# Endpoint format: <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com
config.endpoint = "<ENDPOINT>"
client = Client(config)

class SignContext(object):
    """Stores sign response fields needed for subsequent verification."""

    def __init__(self, key_id, message_type, signature, algorithm):
        self.key_id = key_id
        self.message_type = message_type
        self.signature = signature
        # If algorithm is not set, the default value is used.
        self.algorithm = algorithm

def sign(key_id, message, message_type, algorithm):
    request = SignRequest()
    request.key_id = key_id
    request.message = message
    request.message_type = message_type
    request.algorithm = algorithm
    runtime_options = RuntimeOptions()
    # Uncomment the line below to skip server certificate verification.
    # runtime_options.ignore_ssl = True
    # Path to the instance CA certificate.
    runtime_options.verify = "<CA_CERTIFICATE_FILE_PATH>"
    resp = client.sign_with_options(request, runtime_options)
    print(resp)
    return SignContext(resp.key_id, resp.message_type, resp.signature, resp.algorithm)

def verify(context, message):
    request = VerifyRequest()
    request.key_id = context.key_id
    request.message_type = context.message_type
    request.signature = context.signature
    request.algorithm = context.algorithm
    request.message = message
    runtime_options = RuntimeOptions()
    # Uncomment the line below to skip server certificate verification.
    # runtime_options.ignore_ssl = True
    # Path to the instance CA certificate.
    runtime_options.verify = "<CA_CERTIFICATE_FILE_PATH>"
    resp = client.verify_with_options(request, runtime_options)
    print(resp)

key_id = "<KEY_ID>"
algorithm = "<ALGORITHM>"
message = "<MESSAGE>".encode("utf-8")
# RAW: pass the raw message. DIGEST: pass the digest of the message.
message_type = "RAW"
context = sign(key_id, message, message_type, algorithm)
verify(context, message)

Substitua os seguintes espaços reservados antes de executar o código:

Espaço reservado

Descrição

Exemplo

<CLIENT_KEY_FILE>

Caminho para o arquivo da Client Key

/path/to/clientKey.json

<ENDPOINT>

Endpoint da instância do KMS

kst-example.cryptoservice.kms.aliyuncs.com

<CA_CERTIFICATE_FILE_PATH>

Caminho para o certificado CA da instância

/path/to/ca.pem

<KEY_ID>

ID da chave assimétrica

key-12345abcde

<ALGORITHM>

Algoritmo de assinatura compatível com a chave

RSA_PKCS1_SHA_256

<MESSAGE>

Dados a serem assinados

hello

Explicação passo a passo

Inicializar o cliente

Consulte Inicializar o cliente para obter as instruções completas de configuração. Defina config.protocol como "https", pois o serviço de instância do KMS aceita apenas conexões HTTPS.

# -*- coding: utf-8 -*-
import os

from openapi.models import Config
from sdk.client import Client

config = Config()
config.protocol = "https"
config.client_key_file = "<CLIENT_KEY_FILE>"
config.password = os.getenv('CLIENT_KEY_PASSWORD')
# Format: <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com
config.endpoint = "<ENDPOINT>"
client = Client(config)

Assinar dados com uma chave assimétrica

Chame a API Sign para gerar uma assinatura digital.

Defina message_type como "RAW" para assinar a mensagem original ou como "DIGEST" para assinar um resumo de mensagem pré-calculado.

def sign(key_id, message, message_type, algorithm):
    request = SignRequest()
    request.key_id = key_id          # ID of the asymmetric key to use
    request.message = message        # Data to sign (bytes)
    request.message_type = message_type  # "RAW" or "DIGEST"
    request.algorithm = algorithm    # Signing algorithm the key supports
    runtime_options = RuntimeOptions()
    # runtime_options.ignore_ssl = True  # Uncomment to skip certificate verification
    runtime_options.verify = "<CA_CERTIFICATE_FILE_PATH>"
    resp = client.sign_with_options(request, runtime_options)
    print(resp)
    return SignContext(resp.key_id, resp.message_type, resp.signature, resp.algorithm)

A resposta da operação Sign inclui:

Campo

Descrição

resp.key_id

ID da chave que gerou a assinatura

resp.signature

A assinatura digital (bytes)

resp.algorithm

O algoritmo de assinatura usado

resp.message_type

O tipo de mensagem (RAW ou DIGEST)

O objeto SignContext armazena esses campos para permitir sua passagem direta para verify().

Verificar uma assinatura digital

Chame a API Verify para validar uma assinatura em relação à mensagem original.

def verify(context, message):
    request = VerifyRequest()
    request.key_id = context.key_id          # Must match the key used to sign
    request.message_type = context.message_type
    request.signature = context.signature    # Signature from the Sign response
    request.algorithm = context.algorithm    # Must match the algorithm used to sign
    request.message = message                # Original data (same as what was signed)
    runtime_options = RuntimeOptions()
    # runtime_options.ignore_ssl = True  # Uncomment to skip certificate verification
    runtime_options.verify = "<CA_CERTIFICATE_FILE_PATH>"
    resp = client.verify_with_options(request, runtime_options)
    print(resp)

Próximos passos