2012-04-23 17 views
7

Ich verwende eine PHP-Klasse für Amazon S3 und CloudFront - Link. Aber wenn ich versuche, eine Datei in einen Bucket hochzuladen, bekomme ich diesen Fehler:SignatureDoesNotMatch - Amazon S3 API

[SignatureDoesNotMatch] The request signature we calculated does not match the signature you provided. Check your key and signing method.

Wie man es repariert?

Danke.

Antwort

8

Wenn Sie sich für Amazon anmelden, können Sie sich ein Schlüsselpaar erstellen (Amazon ruft diese Zugangsschlüssel-ID und den geheimen Zugriffsschlüssel an).

Diese beiden werden verwendet, um Anfragen an Amazon Webservices zu signieren. Amazon berechnet die Signatur neu und vergleicht sie, wenn sie mit der in Ihrer Anfrage enthaltenen übereinstimmt. Auf diese Weise muss der geheime Zugangsschlüssel niemals über das Netzwerk übertragen werden.

Wenn Sie "Signatur stimmt nicht" erhalten, haben Sie höchstwahrscheinlich einen falschen geheimen Zugriffsschlüssel verwendet. Können Sie den Zugriffsschlüssel und den geheimen Zugriffsschlüssel überprüfen, um sicherzustellen, dass sie korrekt sind?

+0

Danke! Wie behebt man dieses Problem - http://goo.gl/QTdm4 –

+0

@ roman-nazarkin Also war das Problem der Eimer Ort? – awendt

+1

in meinem Fall gibt es einige zusätzlichen Leerzeichen in der Konfigurationsdatei/Einstellung, die den geheimen Schlüssel hatte, so dass es ein zusätzliches 'tab' Zeichen in dem„password“gesendet hat, so dass die Signatur ungültig zu machen. – drzaus

4

Persönlich erhielt ich diesen Fehler wegen der Zeichen, die in meinen Metadaten waren.

Das problematische Zeichen war der "-" - Zeichen, der "unicode" und anders als "-" ist.

$result = $s3->putObject(array(
    'Bucket'  => $bucket, 
    'Key'   => $keyname, 
    'Metadata' => [ 
     'name' => 'Terminology – Blah' 
    ] 
)); 

Ein Hinweis aus der Dokumentation http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#UserMetadata ...

Amazon S3 stores user-defined metadata in lowercase. Each name, value pair must conform to US-ASCII when using REST and UTF-8 when using SOAP or browser-based uploads via POST.

+1

dito - beim Hinzufügen von Metadaten mit einem Schlüssel ‚Cache-Control‘ auf ein Objekt, das einen Metadaten-Schlüssel ‚Cache-Control‘ schon habe ich diesen Fehler. – Joscha

0

ich mit putObject() diesen Fehler hatte, als ein Key beginnend mit Schrägstrich (/) Angabe - nach dem Schrägstrich es funktionierte entfernen fein.