it-swarm.com.de

Signatur abgelaufen: ist jetzt früher als Fehler: InvalidSignatureException

Ich versuche ein kleines Beispiel mit AWS API Gateway und IAM-Autorisierung. Das AWS API Gateway hat den folgenden Endpunkt generiert:

https://xyz1234.execute-api.us-east-2.amazonaws.com/Users/users

mit POST Aktion und ohne Parameter.

Ursprünglich hatte ich den IAM für diese POST -Methode deaktiviert und die Ergebnisse mit Postman überprüft, damit es funktioniert. Dann habe ich einen neuen IAM-Benutzer erstellt und die AmazonAPIGatewayInvokeFullAccess-Richtlinie an den Benutzer angehängt, um die Berechtigung zum Aufrufen von APIs zu erteilen. IAM für die Methode POST aktiviert.

Ich ging dann zu Postman - und fügte die Autorisierung mit AccessKey, Secret Key, AWS Region als us-east-2 und Service Name als execute-api hinzu und versuchte, die Anfrage auszuführen, bekam aber InvalidSignatureException Error mit 403 als Rückkehrcode.

Der Body enthält folgende Meldung:

Signature expired: 20170517T062414Z is now earlier than 20170517T062840Z (20170517T063340Z - 5 min.)" 

Was vermisse ich ?

13
j10

Eine mit AWS sigV4 signierte Anforderung enthält einen Zeitstempel für die Erstellung der Signatur. Unterschriften sind nach ihrer Erstellung nur für kurze Zeit gültig. (Dies begrenzt die Zeit, die ein Wiederholungsangriff ausgeführt werden kann.)

Wenn die Signatur validiert ist, wird der Zeitstempel mit der aktuellen Uhrzeit verglichen. Wenn dies bedeutet, dass die Signatur nicht kürzlich erstellt wurde, schlägt die Signaturüberprüfung mit der von Ihnen genannten Fehlermeldung fehl.

Dies ist häufig der Fall, wenn die lokale Uhr des Hosts, die die Signatur generiert, um mehr als ein paar Minuten ausgeschaltet ist.

14
MikeD at AWS

Sie müssen die lokale Uhr Ihrer Maschine mit NTP synchronisieren.

zum Beispiel auf einem Ubuntu-Gerät:

Sudo ntpdate pool.ntp.org

Die Systemzeit ist häufig nicht mehr synchron. Sie müssen sie regelmäßig synchron halten.

Sie können einen täglichen CRON-Job ausführen, um die Systemzeit wie unter diesem Link beschrieben zu synchronisieren: Synchronisieren Sie die Zeit in Linux regelmäßig .

Erstellen Sie ein Bash-Skript zur Synchronisierung der Uhrzeit namens ntpdate. hinein

#!/bin/sh
# sync server time
/usr/sbin/ntpdate pool.ntp.org >> /tmp/ntpdate.log

Sie können dieses Skript an einer beliebigen Stelle platzieren und dann eine cron I .__ einrichten. wird es im täglichen cron-Verzeichnis ablegen, so dass es einmal ausgeführt wird Jeden Tag Mein ntpdate-Skript befindet sich jetzt in /etc/cron.daily/ntpdate und es wird jeden Tag laufen

Machen Sie dieses Skript ausführbar

chmod +x /etc/cron.daily/ntpdate

Testen Sie es, indem Sie das Skript einmal ausführen, und suchen Sie nach Ausgaben in /tmp/ntpdate.log

/etc/cron.daily/ntpdate

In Ihrer Protokolldatei sollten Sie so etwas sehen

26 Aug 12:19:06 ntpdate[2191]: adjust time server 206.108.0.131 offset 0.272120 sec
17

Es gab ein ähnliches Problem, wenn ich den Befehl timedatectl verwende, um die Datumszeit des zugrunde liegenden Rechners zu ändern.

Sudo apt install ntp
Sudo apt install ntpdate
Sudo ntpdate ntp.ubuntu.com

Nach der Synchronisierung der Uhrzeit mit der korrekten aktuellen Datums- und Uhrzeitangabe wird dieses Problem behoben

1
Abhishek Jain

Ich habe das gleiche Problem beim Abrufen von Videos von Amazon Kinesis auf meine lokale Website. Um dieses Problem zu lösen, habe ich crony auf meinem Computer installiert. Dieses crony hat mein Problem gelöst. Sie können die Installation von Amazon crony unter folgendem Link sehen. https://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/set-time.html

0
Mahesh Basnet

Ich stand auch vor diesem Problem, fügte hinzu 

correctClockSkew: true

und Problem für mich behoben 

const nodemailer = require('nodemailer');
const ses = require('nodemailer-ses-transport');



let transporter = nodemailer.createTransport(ses({
        correctClockSkew: true,
        accessKeyId: **,
        secretAccessKey: **,
        region: **
    }));
0
Ashutosh Jha