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
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 |
|
|
ID da chave que gerou a assinatura |
|
|
A assinatura digital (bytes) |
|
|
O algoritmo de assinatura usado |
|
|
O tipo de mensagem ( |
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)