2017-12-05 1 views
0

Ich benutze Java, um einige Post mit AWS-Signatur-Header zu tun. Der Signierungsprozess ist unterAWS-Signatur 4: Java und Crypto-JS marschiert nicht

Wenn ich jedoch diese Signatur verwende, entspricht sie nicht der Signatur, die vom Server berechnet wird. Der Server ist in PHP geschrieben, und wir Crypto-JS, um die Signatur zu berechnen. Ich habe zwei Zeichenfolgen vergleichen müssen und Canonical Request zwischen Java und PHP signieren. Sie sind übereinstimmend.

Ich habe Leerzeichen, Befehl und andere Eigenschaften überprüft. aber kann nicht herausfinden, warum. Sind Java HmacSHA256 und crypto-js HmacSHA256 unterschiedlich? Oder stimmt etwas mit der bytesToHex-Methode nicht?

Die Java-Ausgabe von Canonical Anfrage

POST 
/

content-length:667 
content-type:application/json 
host:host.name.com 
x-amz-date:20171205T012629Z 
x-amz-target:_20141201.XXXXXXX 

content-length;content-type;host;x-amz-date;x-amz-target 
c5b31b699700e6debe4548836a723f89b73ffcef6570e1bed4c534c0f247dc26 

Die PHP zurückgibt:

POST 
/

content-length:667 
content-type:application/json 
host:host.name.com 
x-amz-date:20171205T012629Z 
x-amz-target:_20141201.XXXXXXX 

content-length;content-type;host;x-amz-date;x-amz-target 
c5b31b699700e6debe4548836a723f89b73ffcef6570e1bed4c534c0f247dc26 

Hilfe oder eine Idee wird geschätzt.

+0

Ihre beste Wette wäre, die Zwischenschlüssel (geheime, Datum, Region, Service, Signierung) auf beiden Plattformen hex-encodieren und vergleiche die Zwischenwerte. Jede Nichtübereinstimmung bedeutet, dass das Problem in Ihrem Ablauf früher auftritt. Sie zeigen nicht, was Sie übergeben, aber der Datumswert ist 8 Bytes 'yyyymmdd'. –

Antwort

0

Das Problem gefunden. Der Grund war, dass der Algorithmus des geheimen Schlüssels geändert wurde, aber ich war mir dieser Änderung nicht bewusst

Verwandte Themen