Überprüfung der Signaturen von Amazon-Nachrichten SNS - Amazon Simple Notification Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Überprüfung der Signaturen von Amazon-Nachrichten SNS

Um die Echtheit einer von Amazon an Ihren HTTP Endpunkt gesendeten Nachricht zu überprüfenSNS, können Sie die Nachrichtensignatur überprüfen. Es gibt zwei Fälle, in denen wir empfehlen, die Echtheit der Nachricht zu überprüfen. Erstens, wenn Amazon eine Nachricht an Ihren HTTP Endpunkt SNS sendet, dass Sie ein Thema abonniert haben. Zweitens, wenn Amazon Ihnen nach der Ausführung der Subscribe oder der Unsubscribe API Aktionen eine Bestätigungsnachricht an Ihren HTTP Endpunkt SNS sendet.

Sie sollten bei der Überprüfung von Nachrichten, die von Amazon SNS gesendet wurden, wie folgt vorgehen:

  • Verwenden Sie HTTPS es immer, wenn Sie das Zertifikat von Amazon erhaltenSNS.

  • Überprüfen Sie die Authentizität des Zertifikats.

  • Stellen Sie sicher, dass das Zertifikat von Amazon erhalten wurdeSNS.

  • Verwenden Sie nach Möglichkeit eine der von Amazon unterstützten Optionen, AWS SDKs um Nachrichten SNS zu validieren und zu verifizieren.

  • Vergewissern Sie sich, dass die SNS Amazon-Nachrichten von Ihrem gewünschten Empfänger empfangen wurdenTopicArn.

Amazon SNS unterstützt zwei Versionen der Nachrichtensignatur:

  • SignatureVersion1: Amazon SNS erstellt die Signatur auf der Grundlage des SHA1Hashs der Nachricht.

  • SignatureVersion2: Amazon SNS erstellt die Signatur auf der Grundlage des SHA256Hashs der Nachricht.

So konfigurieren Sie die Nachrichtensignaturversion für SNS Amazon-Themen

Standardmäßig verwenden SNS Amazon-Themen SignatureVersion 1. Um den Hashing-Algorithmus für Ihr SNS Amazon-Thema auszuwählen, entweder SignatureVersion 1 (SHA1) oder SignatureVersion 2 (SHA256), können Sie die SetTopicAttributes API Aktion verwenden.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie das Themenattribut SignatureVersion mit der AWS CLI festlegen:

aws sns set-topic-attributes \ --topic-arn arn:aws:sns:us-east-2:123456789012:MyTopic \ --attribute-name SignatureVersion \ --attribute-value 2
Um die Signatur einer SNS Amazon-Nachricht zu überprüfen, wenn HTTP abfragebasierte Anfragen verwendet werden
  1. Extrahieren Sie die Name-Wert-Paare aus dem JSON Dokument im Hauptteil der HTTP POST Anfrage, die Amazon SNS an Ihren Endpunkt gesendet hat. Sie werden mit den Werten einiger Name-Wert-Paare die zu signierende Zeichenfolge erstellen. Wenn Sie die Signatur einer SNS Amazon-Nachricht überprüfen, ist es wichtig, dass Sie die maskierten Steuerzeichen in den Subject Werten Message und in ihren ursprünglichen Zeichendarstellungen konvertieren. Diese Werte müssen in ihren ursprünglichen Formaten vorliegen, wenn Sie sie als Teil der zu signierenden Zeichenfolge verwenden. Informationen zum Analysieren des JSON Dokuments finden Sie unter. Schritt 1: Stellen Sie sicher, dass Ihr Endpunkt bereit ist, SNS Amazon-Nachrichten zu verarbeiten

    Das SignatureVersion gibt Ihnen die Signaturversion an, die von Amazon verwendet wurdeSNS, um die Signatur der Nachricht zu generieren. Mit der Signaturversion können Sie die Anforderungen für das Erstellen der Signatur bestimmen. Für Benachrichtigungen unterstützt Amazon SNS derzeit die Signaturversionen 1 und 2. Dieser Abschnitt enthält die Schritte zum Überprüfen einer Signatur anhand dieser Signaturversionen.

  2. Besorgen Sie sich das X509-Zertifikat, mit dem SNS Amazon die Nachricht signiert hat. Der Wert SigningCertURL zeigt den Speicherort des X.509-Zertifikats, mit dem die digitale Signatur für die Nachricht erstellt wurde. Rufen Sie das Zertifikat von diesem Speicherort ab.

  3. Extrahieren Sie den öffentlichen Schlüssel aus dem Zertifikat. Der von SigningCertURL angegebene öffentliche Schlüssel aus dem Zertifikat wird zur Überprüfung von Authentizität und Integrität der Nachricht verwendet.

  4. Bestimmen des Nachrichtentyps. Das Format der zu signierenden Zeichenfolge hängt vom Nachrichtentyp ab, den der Wert Type bezeichnet.

  5. Erstellen Sie die zu signierende Zeichenfolge. Die zu signierende Zeichenfolge ist eine durch Zeilenumbruchzeichen getrennte Liste von spezifischen Name-Wert-Paaren aus der Nachricht. Jedes Name-Wert-Paar wird zuerst mit dem Namen, gefolgt von einem Zeilenumbruchzeichen, dann gefolgt vom Wert dargestellt und endet mit einem Zeilenumbruchzeichen. Die Name-Wert-Paare müssen in einer Byte-Sortierreihenfolge aufgelistet werden.

    Je nach Nachrichtentyp muss die zu signierende Zeichenfolge die folgenden Name-Wert-Paare aufweisen:

    Benachrichtigung

    Die Benachrichtigungen müssen die folgenden Name-Wert-Paare enthalten:

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

    Das folgende Beispiel ist eine zu signierende Zeichenfolge für eine 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 und UnsubscribeConfirmation

    SubscriptionConfirmation- und UnsubscribeConfirmation-Nachrichten müssen die folgenden Name-Wert-Paare enthalten:

    Message MessageId SubscribeURL Timestamp Token TopicArn Type

    Das folgende Beispiel ist eine zu signierende Zeichenfolge für eine 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. Dekodieren Sie den Signature-Wert aus dem Base64-Format. Die Nachricht stellt die Signatur im Signature-Wert zu, der als Base64 kodiert ist. Bevor Sie den Signaturwert mit der berechneten Signatur vergleichen, stellen Sie sicher, dass Sie den Signature-Wert aus dem Base64-Format decodieren, damit Sie die Werte im selben Format vergleichen.

  7. Generieren Sie den abgeleiteten Hashwert der SNS Amazon-Nachricht. Senden Sie die SNS Amazon-Nachricht im kanonischen Format an denselben Hash-Algorithmus, der zur Generierung der Signatur verwendet wurde.

    1. Wenn der Wert 1 SignatureVersion ist, verwenden Sie ihn SHA1als Hash-Algorithmus.

    2. Wenn der Wert 2 SignatureVersion ist, verwenden Sie SHA256ihn als Hash-Algorithmus.

  8. Generieren Sie den bestätigten Hashwert der SNS Amazon-Nachricht. Der bestätigte Hashwert ist das Ergebnis der Verwendung des Werts des öffentlichen Schlüssels (aus Schritt 3) zur Entschlüsselung der mit der SNS Amazon-Nachricht übermittelten Signatur.

  9. Überprüfen Sie die Echtheit und Integrität der SNS Amazon-Nachricht. Vergleichen Sie den abgeleiteten Hash-Wert (aus Schritt 7) mit dem festgestellten Hash-Wert (aus Schritt 8). Wenn die Werte identisch sind, kann der Empfänger sicher sein, dass die Nachricht während der Übertragung nicht geändert wurde und dass die Nachricht von Amazon stammen mussSNS. Wenn die Werte nicht identisch sind, sollte der Empfänger der Nachricht nicht vertrauen.