Vérifier les signatures des SNS messages Amazon - Amazon Simple Notification Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Vérifier les signatures des SNS messages Amazon

Pour vérifier l'authenticité d'un message envoyé à votre HTTP terminal par AmazonSNS, vous pouvez vérifier la signature du message. Dans deux cas, nous recommandons de vérifier l'authenticité du message. Tout d'abord, lorsqu'Amazon SNS envoie un message à votre HTTP terminal indiquant que vous êtes abonné à un sujet. Ensuite, lorsqu'Amazon vous SNS envoie un message de confirmation à votre HTTP point de terminaison lors de l'exécution de la Subscribe ou Unsubscribe API des actions.

Lors de la vérification des messages envoyés par Amazon, vous devez procéder comme suit SNS :

  • Utilisez-le toujours HTTPS lorsque vous obtenez le certificat auprès d'AmazonSNS.

  • Validez l'authenticité du certificat.

  • Vérifiez que le certificat a été reçu d'AmazonSNS.

  • Dans la mesure du possible, utilisez l'une des solutions prises en charge par Amazon AWS SDKs SNS pour valider et vérifier les messages.

  • Vérifiez que les SNS messages Amazon ont bien été reçus de la part de votre choixTopicArn.

Amazon SNS prend en charge deux versions de signature de message :

  • SignatureVersion1 : Amazon SNS crée la signature en fonction du SHA1hachage du message.

  • SignatureVersion2 : Amazon SNS crée la signature en fonction du SHA256hachage du message.

Pour configurer la version de signature des messages sur les SNS sujets Amazon

Par défaut, les SNS rubriques Amazon utilisent SignatureVersion 1. Pour choisir l'algorithme de hachage pour votre SNS sujet Amazon, soit SignatureVersion 1 (SHA1) soit SignatureVersion 2 (SHA256), vous pouvez utiliser l'SetTopicAttributesAPIaction.

L'exemple de code suivant montre comment définir l'attribut de rubrique SignatureVersion avec le AWS CLI :

aws sns set-topic-attributes \ --topic-arn arn:aws:sns:us-east-2:123456789012:MyTopic \ --attribute-name SignatureVersion \ --attribute-value 2
Pour vérifier la signature d'un SNS message Amazon lors de l'utilisation de demandes HTTP basées sur des requêtes
  1. Extrayez les paires nom-valeur du JSON document figurant dans le corps de la HTTP POST demande qu'Amazon SNS a envoyée à votre point de terminaison. Vous utiliserez les valeurs de certaines paires nom-valeur pour créer la chaîne de connexion. Lorsque vous vérifiez la signature d'un SNS message Amazon, il est essentiel de convertir les caractères de contrôle échappés en leurs représentations de caractères d'origine dans les Subject valeurs Message et. Ces valeurs doivent être dans leur format d'origine lorsque vous les utilisez dans le cadre de la chaîne de connexion. Pour plus d'informations sur la façon d'analyser le JSON document, consultezÉtape 1 : Vérification de la disponibilité de votre point de terminaison pour traiter des messages Amazon SNS.

    Vous SignatureVersion indique la version de signature utilisée par Amazon SNS pour générer la signature du message. A partir de la version de la signature, vous pouvez déterminer les exigences requises pour la génération de la signature. Pour les notifications, Amazon prend SNS actuellement en charge les versions de signature 1 et 2. Cette section indique les étapes de vérification d'une signature à l'aide de ces versions de signature.

  2. Obtenez le certificat X509 SNS utilisé par Amazon pour signer le message. La valeur SigningCertURL pointe vers l'emplacement du certificat X509 utilisé pour créer la signature numérique du message. Récupérez le certificat à partir de cet emplacement.

  3. Extrayez la clé publique à partir du certificat. La clé publique provenant du certificat spécifié par SigningCertURL est utilisée pour vérifier l'authenticité et l'intégrité du message.

  4. Déterminez le type du message. Le format de la chaîne de connexion dépend du type de message, qui est spécifié par la valeur Type.

  5. Créez la chaîne de connexion. La chaîne de connexion est une liste délimitée par des caractères de nouvelle ligne, qui est composée de paires nom-valeur provenant du message. Chaque paire nom-valeur est représentée par le nom, suivi d'un caractère de nouvelle ligne, suivi de la valeur et se terminant par un caractère de nouvelle ligne. Les paires nom-valeur doivent figurer dans l'ordre de tri par octet.

    En fonction du type de message, la chaîne de connexion doit avoir les paires nom-valeur suivantes.

    Notification

    Les messages de notification doivent contenir les paires nom-valeur suivantes :

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

    L'exemple suivant est une chaîne de connexion pour 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 et UnsubscribeConfirmation

    Pour vérifier la signature SubscriptionConfirmation et les UnsubscribeConfirmation messages, la chaîne à signer doit inclure les paires nom-valeur suivantes :

    Message MessageId SubscribeURL Timestamp Token TopicArn Type

    L'exemple suivant est une chaîne à signer pour un SubscriptionConfirmation message :

    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
    Note

    Le SubscribeURL champ est utilisé dans la chaîne pour signer à la fois pour les UnsubscribeConfirmation messages SubscriptionConfirmation et pour les messages. Cela URL est nécessaire pour confirmer ou gérer l'abonnement.

  6. Décodez la valeur Signature à partir du format Base64. Le message diffuse la signature dans la valeur Signature, qui est codée en Base64. Avant de comparer la valeur de la signature avec la signature que vous avez calculée, assurez-vous que vous décodez la valeur Signature en Base64 afin d'utiliser le même format pour comparer les valeurs.

  7. Générez la valeur de hachage dérivée du SNS message Amazon. Soumettez le SNS message Amazon, au format canonique, au même algorithme de hachage que celui utilisé pour générer la signature.

    1. Si la valeur SignatureVersion est 1, utilisez-la SHA1comme algorithme de hachage.

    2. Si la valeur SignatureVersion est 2, utilisez-la SHA256comme algorithme de hachage.

  8. Générez la valeur de hachage affirmée du SNS message Amazon. La valeur de hachage affirmée est le résultat de l'utilisation de la valeur de clé publique (à partir de l'étape 3) pour déchiffrer la signature envoyée avec le message AmazonSNS.

  9. Vérifiez l'authenticité et l'intégrité du SNS message Amazon. Comparez la valeur de hachage dérivée (à l'étape 7) avec la valeur de hachage déclarée (à l'étape 8). Si les valeurs sont identiques, le destinataire est assuré que le message n'a pas été modifié pendant le transport et qu'il doit provenir d'AmazonSNS. Si les valeurs ne sont pas identiques, le message n'est pas digne de confiance pour le destinataire.