Todos los productos
Search
Centro de documentos

:Request signatures

Última actualización: Sep 03, 2026

Toda solicitud a la API de KMS debe incluir una firma válida. Alibaba Cloud utiliza esta firma para verificar la identidad del solicitante, detectar alteraciones durante la transmisión y rechazar solicitudes repetidas.

Importante

Si utiliza un SDK o la CLI de Alibaba Cloud, el proceso de firma se gestiona automáticamente. Este tema aplica únicamente a desarrolladores que construyen un cliente HTTP personalizado o que realizan llamadas directas a la API sin usar un SDK.

Funcionamiento de la firma

El proceso para firmar una solicitud de KMS consta de dos pasos:

  1. Construir la cadena por firmar: ordene y codifique en porcentaje todos los parámetros de la solicitud para formar una cadena de consulta canónica; después, anteponga el método HTTP y una barra diagonal codificada en porcentaje.

  2. Calcular la firma: calcule un hash HMAC-SHA1 de la cadena por firmar mediante su AccessKey secret como clave, codifique el resultado en Base64 y añádalo a la solicitud como el parámetro Signature.

La fórmula de la firma es la siguiente:

Signature = Base64( HMAC-SHA1( AccessKey Secret, UTF-8-Encoding-Of(StringToSign)) )

La URL final de la solicitud tiene esta estructura:

https://<endpoint>/?Action=<operation>&SignatureVersion=1.0&SignatureMethod=HMAC-SHA1&Signature=<encoded-signature>&...

Parámetros de la firma

Parámetro

Valor

Descripción

SignatureMethod

HMAC-SHA1

Algoritmo de firma

SignatureVersion

1.0

Versión del algoritmo de firma

Signature

<calculated>

Cadena de la firma, codificada según RFC 3986

Funciones obligatorias

Para implementar la firma, necesita las siguientes funciones:

Función

Descripción

percentEncode()

Codificación en porcentaje basada en UTF-8; consulte las reglas de codificación y la implementación en Java en el paso 1.1

HMAC-SHA1()

Función de hash con clave definida en RFC 2104

Base64()

Codificación Base64 estándar

Paso 1: Construir la cadena por firmar

Paso 1.1: Crear la cadena de consulta canónica

  1. Recopile todos los parámetros de la solicitud excepto Signature. Esto incluye tanto los parámetros comunes (como Action, Version, AccessKeyId, SignatureMethod, SignatureVersion, Timestamp y Format) como cualquier parámetro específico de la operación.

  2. Ordene los parámetros alfabéticamente por nombre.

  3. Codifique en porcentaje cada nombre y valor de parámetro mediante UTF-8. Las reglas de codificación son las siguientes:

    Este proceso difiere de application/x-www-form-urlencoded (codificación MIME). Si utiliza java.net.URLEncoder de Java, aplique primero la codificación MIME y luego reemplace + por %20 , * por %2A y %7E por ~ . El siguiente método percentEncode implementa esta lógica: `` java private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING) .replace("+", "%20") .replace("*", "%2A") .replace("%7E", "~") : null; } ``

    Tipo de carácter

    Regla de codificación

    Letras mayúsculas y minúsculas, dígitos, -, _, ., ~

    No requieren codificación

    Todos los demás caracteres

    Formato %XY, donde XY es el código ASCII en hexadecimal (por ejemplo, " → %22)

    Caracteres UTF-8 extendidos

    Formato %XY%ZA…

    Espacios

    %20 — no utilice +

  4. Una cada nombre y valor codificados con = y luego una todos los pares con & siguiendo el orden de clasificación. El resultado es su cadena de consulta canónica.

Paso 1.2: Construir StringToSign

Construya StringToSign con el siguiente formato:

StringToSign =
    HTTPMethod + "&" +
    percentEncode("/") + "&" +
    percentEncode(CanonicalizedQueryString)

Componente

Descripción

HTTPMethod

Método HTTP utilizado para la solicitud, como GET

percentEncode("/")

Barra diagonal codificada en porcentaje, cuyo valor es %2F

percentEncode(CanonicalizedQueryString)

Cadena de consulta canónica obtenida en el paso 1.1, codificada en porcentaje por segunda vez

Paso 2: Calcular la firma

  1. Calcule el código de autenticación de mensajes basado en hash (HMAC) de StringToSign mediante el algoritmo SHA1 (RFC 2104). La clave HMAC se forma con su AccessKey secret seguida de un ampersand (&, ASCII 38):

    key = AccessKey Secret + "&"
  2. Codifique la salida HMAC en Base64 para obtener la cadena de la firma.

  3. Codifique la cadena de la firma según RFC 3986 y agréguela a la solicitud como el parámetro Signature.

Ejemplo

A continuación se muestra cómo firmar una solicitud de CreateKey.

Parámetros de la solicitud (antes de firmar)

https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=testid
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z

Construcción de StringToSign

Tras ordenar alfabéticamente y codificar en porcentaje, la cadena de consulta canónica queda así:

AccessKeyId%3Dtestid%26Action%3DCreateKey%26Format%3Djson%26SignatureMethod%3DHMAC-SHA1%26SignatureVersion%3D1.0%26Timestamp%3D2016-03-28T03%253A13%253A08Z%26Version%3D2016-01-20

La cadena completa de StringToSign es:

GET&%2F&AccessKeyId%3Dtestid%26Action%3DCreateKey%26Format%3Djson%26SignatureMethod%3DHMAC-SHA1%26SignatureVersion%3D1.0%26Timestamp%3D2016-03-28T03%253A13%253A08Z%26Version%3D2016-01-20

Cada componente corresponde a:

Componente

Valor

HTTPMethod

GET

percentEncode("/")

%2F

percentEncode(CanonicalizedQueryString)

La cadena codificada mostrada anteriormente

Cálculo de la firma

Entrada

Valor

AccessKey ID

testid

AccessKey secret

testsecret

Clave HMAC

testsecret&

Valor de la firma

41wk2SSX1GJh7fwnc5eqOfiJPF****

URL de la solicitud firmada

https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=testid
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z
&Signature=41wk2SSX1GJh7fwnc5eqOfiJPF****