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.
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'. –