View a markdown version of this page

Cálculos de firmas para los encabezados finales (cargas fragmentadas) (AWS Signature Version 4) - Amazon Simple Storage Service

Cálculos de firmas para los encabezados finales (cargas fragmentadas) (AWS Signature Version 4)

Al autenticar las solicitudes mediante el encabezado Authorization, también puede cargar la carga útil en fragmentos. Cuando envía los datos del objeto en fragmentos, también tiene la opción de incluir los encabezados finales. (Para obtener más información, consulte ). Cálculos de firma para el encabezado de Authorization: transferencia de la carga útil en varios fragmentos (carga fragmentada) (AWS Signature Version 4).) En esta sección, se describen los pasos que debe seguir si quiere incluir un encabezado final al final de la carga de varios fragmentos.

importante

Cuando incluya los encabezados finales, debe enviar lo siguiente en el encabezado inicial:

Los encabezados finales solo se envían después de cargar los fragmentos. Los fragmentos anteriores se envían de forma normal y se firman como se describe en las secciones anteriores, incluido el envío del último fragmento con una carga útil de 0 bytes. Los encabezados finales se incluyen como su propio fragmento y se envían después del último fragmento con una carga útil de 0 bytes. Por ejemplo, si los datos terminan en un fragmento de 100 KB, debe enviar lo siguiente:

  • Fragmentos de datos anteriores

  • Fragmento final de 100 KB del objeto

  • Un fragmento de 0 bytes que indica el final del objeto

  • Fragmento de encabezados finales

Ejemplos: comprobación de los cálculos de firmas

Puede utilizar los ejemplos en esta sección como referencia para comprobar los cálculos de firma en el código. Antes de revisar los ejemplos, tenga en cuenta lo siguiente:

  • Los cálculos de firma de estos ejemplos utilizan las siguientes credenciales de seguridad de ejemplo.

    Parámetro Valor
    AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
    AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  • Todos los ejemplos utilizan la marca temporal de la solicitud 20130524T000000Z (Fri, 24 May 2013 00:00:00 GMT).

  • Todos los ejemplos utilizan examplebucket como nombre del bucket.

  • Se supone que el bucket está en la región Este de EE. UU. (Norte de Virginia) y la credencial Scope y los cálculos de Signing Key utilizan us-east-1 como especificador de región. Para obtener más información, consulte Regiones y puntos de enlace en la Referencia general de Amazon Web Services.

  • Puede utilizar solicitudes de tipo ruta o de alojamiento virtual. Los ejemplos siguientes usan solicitudes de tipo de alojamiento virtual, por ejemplo:

    https://examplebucket.s3.amazonaws.com/photos/photo1.jpg

    Para obtener más información, consulte Alojamiento virtual de buckets en la Guía del usuario de Amazon Simple Storage Service.

En el siguiente ejemplo, se envía una solicitud PUT para cargar un objeto. Los cálculos de firma suponen lo siguiente:

  • Está cargando un archivo de texto de 65 KB y el contenido del archivo es una cadena de un carácter compuesta por la letra “а”.

  • El tamaño del fragmento es 64 KB. Como resultado, la carga útil se carga en tres fragmentos: 64 KB, 1 KB y el fragmento final con 0 bytes de datos de fragmento.

  • El objeto resultante tiene el nombre de clave chunkObject.txt.

  • Para solicitar REDUCED_REDUNDANCY como clase de almacenamiento, agregue el encabezado de solicitud x-amz-storage-class.

  • La transferencia incluye un valor de suma de comprobación CRC32C como encabezado final.

Para obtener información acerca de la acción de la API, consulte PutObject. La sintaxis de solicitud general es la siguiente:

PUT /examplebucket/chunkObject.txt HTTP/1.1 Host: s3.amazonaws.com x-amz-date: 20130524T000000Z x-amz-storage-class: REDUCED_REDUNDANCY Authorization: SignatureToBeCalculated x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER Content-Encoding: aws-chunked x-amz-decoded-content-length: 66560 x-amz-trailer: x-amz-checksum-crc32c Content-Length: 66946 <Payload>

Los pasos siguientes muestran cálculos de firma.

  1. Firma inicial: cree una cadena para firmar
    1. CanonicalRequest

      PUT /examplebucket/chunkObject.txt content-encoding:aws-chunked host:s3.amazonaws.com x-amz-content-sha256:STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER x-amz-date:20130524T000000Z x-amz-decoded-content-length:66560 x-amz-storage-class:REDUCED_REDUNDANCY x-amz-trailer:x-amz-checksum-crc32c content-encoding;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class;x-amz-trailer STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER

      En la solicitud canónica, la tercera línea se encuentra vacía porque no hay parámetros de consulta en la solicitud. La última línea es la cadena constante proporcionada como valor de la carga útil con hash, que debe ser igual al valor de x-amz-content-sha256 header.

    2. StringToSign

      AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 44d48b8c2f70eae815a0198cc73d7a546a73a93359c070abbaa5e6c7de112559

      nota

      Para obtener información sobre cada una de las líneas de la cadena que se va a firmar, consulte el diagrama que explica el cálculo de la firma inicial.

  2. SigningKey

    signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request")

  3. Firma inicial

    106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e

  4. Encabezado Authorization

    El encabezado de Authorization resultante es el siguiente:

    AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=content-encoding;content-length;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class,Signature=106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e

  5. Fragmento 1: (65 536 bytes, con un valor de 97 para la letra “a”)
    1. Cadena de fragmentos para firmar:

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 bf718b6f653bebc184e1479f1935b8da974d701b893afcf49e701f3e2f9f9c5a

      nota

      Para obtener información sobre cada línea de la cadena que se va a firmar, consulte el diagrama en el tema anterior (Cálculo de la firma inicial) que muestra los distintos componentes de la cadena que se va a firmar. Por ejemplo, las tres últimas líneas constan de lo siguiente:

      • previous-signature

      • hash("")

      • hash(current-chunk-data)

    2. Firma de fragmentos:

      b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2
    3. Datos de fragmentos enviados:

      10000;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 <65536-bytes>
  6. Fragmento 2: (1024 bytes, con un valor de 97 para la letra “a”)
    1. Cadena de fragmentos para firmar:

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 2edc986847e209b4016e141a6dc8716d3207350f416969382d431539bf292e4a
    2. Firma de fragmentos:

      1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7
    3. Datos de fragmentos enviados:

      400;chunk-signature=1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 <1024-bytes>
  7. Fragmento 3: (datos de 0 bytes)
    1. Cadena de fragmentos para firmar:

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    2. Firma de fragmentos:

      2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
    3. Datos de fragmentos enviados:

      0;chunk-signature=2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
  8. Fragmento 4: encabezados finales
    1. Cadena de fragmento final que se va a firmar:

      AWS4-HMAC-SHA256-TRAILER 20130524T000000Z 20130524/us-east-1/s3/aws4_request 2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992 1e376db7e1a34a8ef1c4bcee131a2d60a1cb62503747488624e10995f448d774
      nota

      Las dos últimas líneas son previous-signature (la firma del fragmento de datos de 0 bytes), hash(trailing-checksum-header-name:base64-encoded-trailing-checksum-value\n).

      El hash se calcula de la siguiente manera sin espacios en blanco:

      • El nombre del encabezado de la suma de comprobación final

      • Un símbolo de dos puntos (:)

      • El valor final de suma de comprobación codificado en base64

      • Un carácter de nueva línea (\n).

      En este ejemplo, donde utilizamos el algoritmo hash crc32c, con el valor de la suma de comprobación codificado en base64 sOO8/Q==, podemos representar el cálculo de la siguiente manera: hash('x-amz-checksum-crc32c:sOO8/Q==\n').

    2. Firma de fragmentos:

      d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435
    3. Datos de fragmentos enviados:

      x-amz-checksum-crc32c:sOO8/Q== x-amz-trailer-signature:d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435