Vérification des signatures des messages Amazon SNS - 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érification des signatures des messages Amazon SNS

Pour contrôler l'authenticité d'un message envoyé à votre point de terminaison HTTP par Amazon SNS, vous pouvez vérifier la signature du message. Dans deux cas, nous recommandons de vérifier l'authenticité du message. Le premier cas est celui où Amazon SNS envoie un message à votre point de terminaison HTTP indiquant que vous êtes abonné à une rubrique. Le second, lorsqu'Amazon SNS vous envoie un message de confirmation à votre point de terminaison HTTP lors de l'exécution des actions d'API Subscribe ou Unsubscribe.

Vous devez exécuter les opérations suivantes lors de la vérification des messages envoyés par Amazon SNS :

  • Utilisez toujours le protocole HTTPS lors de l'obtention du certificat à partir d'Amazon SNS.

  • Validez l'authenticité du certificat.

  • Vérifiez que le certificat a été reçu à partir d'Amazon SNS.

  • Si possible, utilisez l'un des kits SDK AWS pris en charge pour qu'Amazon SNS valide et vérifie les messages.

  • Vérifiez que les messages Amazon SNS ont bien été reçus par le TopicArn de votre choix.

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

  • SignatureVersion1 : Amazon SNS crée la signature sur la base du hachage SHA1 du message.

  • SignatureVersion2 : Amazon SNS crée la signature sur la base du hachage SHA256 du message.

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

Par défaut, les rubriques Amazon SNS utilisent SignatureVersion 1. Pour choisir l'algorithme de hachage sur votre rubrique Amazon SNS, SignatureVersion 1 (SHA1) ou SignatureVersion 2 (SHA256), vous pouvez utiliser l’action d’API SetTopicAttributes.

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 message Amazon SNS lors de l'utilisation de demandes basées sur une requête HTTP
  1. Extrayez les paires nom-valeur à partir du document JSON dans le corps de la requête HTTP POST envoyée par Amazon SNS à 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 message Amazon SNS, il est essentiel de convertir les caractères de contrôle d'échappement en représentations des caractères d'origine dans Message et les valeurs Subject. 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 l'analyse du document JSON, consultez la page Étape 1 : Vérification de la disponibilité de votre point de terminaison pour traiter des messages Amazon SNS.

    La SignatureVersion vous 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 SNS prend actuellement en charge la signature versions 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 utilisé par Amazon SNS 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

    Les messages SubscriptionConfirmation et UnsubscribeConfirmation doivent contenir les paires nom-valeur suivantes :

    Message MessageId SubscribeURL Timestamp Token TopicArn Type

    L'exemple suivant est une chaîne de connexion pour 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. 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 message Amazon SNS. Envoyez le message Amazon SNS au format canonique à l’algorithme de hachage qui a été utilisé pour générer la signature.

    1. Si la SignatureVersion est 1, utilisez SHA1 comme algorithme de hachage.

    2. Si la SignatureVersion est 2, utilisez SHA256 comme algorithme de hachage.

  8. Générez la valeur de hachage déclarée du message Amazon SNS. La valeur de hachage déclarée résulte de l'utilisation de la valeur de clé publique (à l'étape 3) pour déchiffrer la signature diffusée avec le message Amazon SNS.

  9. Vérifiez l'authenticité et l'intégrité du message Amazon SNS. 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 sûr que le message n'a pas été modifié pendant son transfert et qu'il provient d'Amazon SNS. Si les valeurs ne sont pas identiques, le message n'est pas digne de confiance pour le destinataire.