Überprüfen der Signaturen von Amazon-SNS-Nachrichten - 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üfen der Signaturen von Amazon-SNS-Nachrichten

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

Führen Sie die folgenden Schritte aus, wenn Sie die von Amazon SNS gesendeten Nachrichten überprüfen:

  • Verwenden Sie immer HTTPS, wenn Sie das Zertifikat von Amazon SNS erhalten.

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

  • Überprüfen Sie, ob das Zertifikat von Amazon SNS empfangen wurde.

  • Wenn möglich, verwenden Sie eines der unterstützten AWS-SDKs für Amazon SNS, um Nachrichten zu validieren und zu überprüfen.

  • Vergewissern Sie sich, dass die Amazon-SNS-Nachrichten von Ihrem gewünschten TopicArn empfangen wurden.

Amazon SNS unterstützt zwei Versionen der Nachrichtensignatur:

  • SignatureVersion1: Amazon SNS erstellt die Signatur basierend auf dem SHA1-Hash der Nachricht.

  • SignatureVersion2: Amazon SNS erstellt die Signatur basierend auf dem SHA256-Hash der Nachricht.

So konfigurieren Sie die Version der Nachrichtensignatur in Amazon-SNS-Themen

Standardmäßig verwenden Amazon-SNS-Themen SignatureVersion 1. Zum Auswählen des Hashing-Algorithmus für Ihr Amazon-SNS-Thema, also entweder SignatureVersion 1 (SHA1) oder SignatureVersion 2 (SHA256), können Sie die API-Aktion SetTopicAttributes 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
So überprüfen Sie die Signatur einer Amazon-SNS-Nachricht bei der Verwendung von abfragebasierten HTTP-Anfragen
  1. Extrahieren Sie die Name-Wert-Paare aus dem JSON-Dokument der HTTP POST-Anfrage, die Amazon SNS an den Endpunkt gesendet hat. Sie werden mit den Werten einiger Name-Wert-Paare die zu signierende Zeichenfolge erstellen. Wenn Sie die Signatur einer Amazon-SNS-Nachricht überprüfen, ist es wichtig, dass Sie die Escape-Steuerzeichen zu den ursprünglichen Zeichenwerten Message und Subject konvertieren. Diese Werte müssen in ihren ursprünglichen Formaten vorliegen, wenn Sie sie als Teil der zu signierenden Zeichenfolge verwenden. Weitere Informationen zur Analyse eines JSON-Dokuments finden Sie unter Schritt 1: Stellen Sie sicher, dass Ihr Endpunkt Amazon-SNS-Nachrichten verarbeiten kann.

    Die SignatureVersion gibt an, welche Signaturversion von Amazon SNS zum Generieren der Signatur der Nachricht verwendet wurde. Mit der Signaturversion können Sie die Anforderungen für das Erstellen der Signatur bestimmen. Bei 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. Rufen Sie das X.509-Zertifikat ab, das Amazon SNS zum Signieren der Nachricht verwendet 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 Hash-Wert der Amazon-SNS-Nachricht. Senden Sie die Amazon-SNS-Nachricht im kanonischen Format an denselben Hash-Algorithmus, der zum Generieren der Signatur verwendet wurde.

    1. Wenn SignatureVersion 1 ist, verwenden Sie SHA1 als Hash-Algorithmus.

    2. Wenn SignatureVersion 2 ist, verwenden Sie SHA256 als Hash-Algorithmus.

  8. Generieren Sie den festgestellten Hash-Wert der Amazon-SNS-Nachricht. Der festgestellte Hash-Wert ist das Ergebnis, das sich aus der Verwendung des öffentlichen Schlüsselwerts (aus Schritt 3) für die Entschlüsselung der mit der Amazon-SNS-Nachricht übermittelten Signatur ergibt.

  9. Überprüfen Sie Authentizität und Integrität der Amazon-SNS-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 die Nachricht von Amazon SNS stammen muss. Wenn die Werte nicht identisch sind, sollte der Empfänger der Nachricht nicht vertrauen.