Verificación de las firmas de los mensajes de Amazon SNS - Amazon Simple Notification Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Verificación de las firmas de los mensajes de Amazon SNS

Para comprobar la autenticidad de un mensaje enviado por Amazon a tu HTTP punto de conexiónSNS, puedes comprobar la firma del mensaje. Hay dos casos en los que recomendamos verificar la autenticidad del mensaje. En primer lugar, cuando Amazon SNS envía un mensaje a tu HTTP punto de conexión indicando que te has suscrito a un tema. En segundo lugar, cuando Amazon te SNS envía un mensaje de confirmación a tu HTTP punto de conexión tras la ejecución de la Subscribe o las Unsubscribe API acciones.

Debes hacer lo siguiente al verificar los mensajes enviados por AmazonSNS:

  • HTTPSUtilízalo siempre que obtengas el certificado de AmazonSNS.

  • Valide la autenticidad del certificado.

  • Verifica que Amazon haya recibido el certificadoSNS.

  • Cuando sea posible, utiliza una de las opciones compatibles con Amazon AWS SDKs SNS para validar y verificar los mensajes.

  • Valida que los SNS mensajes de Amazon se hayan recibido de la forma deseadaTopicArn.

Amazon SNS admite dos versiones de firma de mensajes:

  • SignatureVersion1: Amazon SNS crea la firma en función del SHA1hash del mensaje.

  • SignatureVersion2: Amazon SNS crea la firma en función del SHA256hash del mensaje.

Para configurar la versión de firma de mensajes en los SNS temas de Amazon

De forma predeterminada, SNS los temas de Amazon utilizan SignatureVersion 1. Para elegir el algoritmo de hash de tu SNS tema de Amazon, ya sea SignatureVersion 1 (SHA1) o SignatureVersion 2 (SHA256), puedes usar la SetTopicAttributes API acción.

El siguiente ejemplo de código muestra cómo establecer el atributo de tema SignatureVersion con la AWS CLI:

aws sns set-topic-attributes \ --topic-arn arn:aws:sns:us-east-2:123456789012:MyTopic \ --attribute-name SignatureVersion \ --attribute-value 2
Para verificar la firma de un SNS mensaje de Amazon cuando se utilizan solicitudes basadas HTTP en consultas
  1. Extrae los pares nombre-valor del JSON documento del cuerpo de la HTTP POST solicitud que Amazon SNS envió a tu punto de conexión. Usará los valores de algunos de los pares de nombre-valor para crear la cadena para firmar. Cuando verifiques la firma de un SNS mensaje de Amazon, es fundamental que conviertas los caracteres de control escapados a sus representaciones de caracteres originales en los Subject valores Message y. Estos valores deben estar en sus formatos originales cuando se utilizan como parte de la cadena para firmar. Para obtener información sobre cómo analizar el JSON documento, consultePaso 1: Asegúrese de que su dispositivo de punto final esté preparado para procesar SNS los mensajes de Amazon.

    Te SignatureVersion indica la versión de firma utilizada por Amazon SNS para generar la firma del mensaje. A partir de la versión de la firma, puede determinar los requisitos de generación de la firma. En cuanto a las notificaciones, Amazon admite SNS actualmente las versiones de firma 1 y 2. En esta sección se indican los pasos para verificar una firma mediante estas versiones de firmas.

  2. Obtén el certificado X509 que Amazon SNS usó para firmar el mensaje. El valor SigningCertURL apunta a la ubicación en la que se encuentra el certificado X509 utilizado para crear la firma digital para el mensaje. Recupere el certificado de esta ubicación.

  3. Extraiga la clave pública del certificado. La clave pública del certificado especificada por SigningCertURL se utiliza para verificar la autenticidad y la integridad del mensaje.

  4. Determine el tipo de mensaje. El formato de la cadena para firmar depende del tipo de mensaje, especificado por el valor de Type.

  5. Cree la cadena para firmar. La cadena para firmar es un carácter de nueva línea, una lista delimitada de pares de nombre-valor del mensaje. Cada par de nombre-valor se representa con el nombre seguido de un carácter de nueva línea, seguido de un valor y con un carácter de nueva línea al final. Los pares de nombre-valor deben mostrarse en el orden de clasificación de bytes.

    En función del tipo de mensaje, la cadena para firmar debe tener los siguientes pares de nombre-valor.

    Notificación

    Los mensajes de notificación deben contener los siguientes pares de nombre-valor:

    Message MessageId Subject (if included in the message) Timestamp TopicArn Type

    El siguiente ejemplo es una cadena para firmar de una notificación (Notification).

    Message My Test Message MessageId 4d4dc071-ddbf-465d-bba8-08f81c89da64 Subject My subject Timestamp 2019-01-31T04:37:04.321Z TopicArn arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P Type Notification
    SubscriptionConfirmation y UnsubscribeConfirmation

    Los mensajes SubscriptionConfirmation y UnsubscribeConfirmation deben contener los siguientes pares de nombre-valor:

    Message MessageId SubscribeURL Timestamp Token TopicArn Type

    El siguiente ejemplo es una cadena para firmar de una notificación (SubscriptionConfirmation).

    Message My Test Message MessageId 3d891288-136d-417f-bc05-901c108273ee SubscribeURL https://sns.us-east-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P&Token=233... Timestamp 2019-01-31T19:25:13.719Z Token 233... TopicArn arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P Type SubscriptionConfirmation
  6. Descodifique el valor de Signature del formato Base64. El mensaje entrega la firma en el valor de Signature, que está codificado en Base64. Antes de comparar el valor de la firma con la firma que ha calculado, asegúrese de descodificar el valor de Signature de Base64 para comparar los valores utilizando el mismo formato.

  7. Genera el valor hash derivado del SNS mensaje de Amazon. Envía el SNS mensaje de Amazon, en formato canónico, al mismo algoritmo hash utilizado para generar la firma.

    1. Si SignatureVersion es 1, úsalo SHA1como algoritmo hash.

    2. Si SignatureVersion es 2, SHA256utilícelo como algoritmo hash.

  8. Genera el valor hash declarado del SNS mensaje de Amazon. El valor hash declarado es el resultado de usar el valor de clave pública (del paso 3) para descifrar la firma entregada con el mensaje de AmazonSNS.

  9. Verifica la autenticidad e integridad del SNS mensaje de Amazon. Compare el valor hash derivado (del paso 7) con el valor hash certificado (del paso 8). Si los valores son idénticos, el destinatario tiene la seguridad de que el mensaje no se ha modificado mientras estaba en tránsito y que el mensaje debe provenir de AmazonSNS. Si los valores no son idénticos, el receptor no debe confiar en el mensaje.