Asimetrik bir anahtar kullanarak verileri imzalamak ve dijital imzaları doğrulamak için KMS instance SDK Python istemcisini kullanın. Bu sayfada eksiksiz bir çalışan örnek ve adım adım açıklama sunulmaktadır.
Tüm örneklerde yapılandırılmış bir istemci aracılığıyla istek göndermek için sign_with_options ve verify_with_options yöntemlerini kullanır.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
KMS instance SDK istemcisini başlattınız. Bkz. İstemciyi başlatma
Bir asimetrik anahtar kimliği (
key_id) ve desteklenen bir imzalama algoritması
Eksiksiz örnek
Adım adım açıklama
İstemciyi başlatma
Tam kurulum talimatları için İstemciyi başlatma bölümüne bakın. config.protocol değerini "https" olarak ayarlayın; KMS instance hizmeti yalnızca HTTPS bağlantılarını kabul eder.
# -*- 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)
Asimetrik anahtarla verileri imzalama
Dijital imza oluşturmak için Sign API'sini çağırın.
Ham mesajı imzalamak için message_type değerini "RAW" olarak, önceden hesaplanmış mesaj özetini imzalamak için ise "DIGEST" olarak ayarlayın.
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)
Sign yanıtı şunları içerir:
| Alan | Açıklama |
|---|---|
resp.key_id |
İmzayı oluşturan anahtarın kimliği |
resp.signature |
Dijital imza (bayt cinsinden) |
resp.algorithm |
Kullanılan imzalama algoritması |
resp.message_type |
Mesaj türü (RAW veya DIGEST) |
SignContext bu alanları saklar; böylece bunları doğrudan verify() yöntemine iletebilirsiniz.
Dijital imzayı doğrulama
Bir imzayı orijinal mesaja karşı doğrulamak için Verify API'sini çağırın.
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)