Zum Hauptinhalt springen

B.4. HTTP Message Transformations (HTTP-Nachrichtentransformationen)

B.4. HTTP Message Transformations (HTTP-Nachrichtentransformationen)

HTTP erlaubt Vermittlern und Anwendungen, Nachrichten zu transformieren, ohne die Semantik zu ändern. HTTP-Nachrichtensignaturen sollen unter vielen Umständen robust gegen solche Transformationen sein.

Beispiel: folgende HTTP-Anfrage wurde mit Ed25519 und Schlüssel test-key-ed25519 signiert:

HINWEIS: Zeilenumbruch gemäß RFC 8792

GET /demo?name1=Value1&Name2=value2 HTTP/1.1 Host: example.org Date: Fri, 15 Jul 2022 14:24:55 GMT Accept: application/json Accept: / Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519" Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:

Signaturbasis für diese Nachricht:

"@method": GET "@path": /demo "@authority": example.org "accept": application/json, / "@signature-params": ("@method" "@path" "@authority" "accept")
;created=1618884473;keyid="test-key-ed25519"

Die folgende Nachricht wurde um Accept-Language und einen Query-Parameter ergänzt. Da weder Sprache noch Query abgedeckt sind, bleibt dieselbe Signatur gültig:

HINWEIS: Zeilenumbruch gemäß RFC 8792

GET /demo?name1=Value1&Name2=value2&param=added HTTP/1.1 Host: example.org Date: Fri, 15 Jul 2022 14:24:55 GMT Accept: application/json Accept: / Accept-Language: en-US,en;q=0.5 Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519" Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:

Die folgende Nachricht entfernt Date, fügt Referer hinzu und führt die beiden Accept-Zeilen zu einer zusammen. Date und Referer sind nicht abgedeckt; das Zusammenführen von Accept ist eine erlaubte Transformation laut Kanonisierung. Die Signatur bleibt gültig:

HINWEIS: Zeilenumbruch gemäß RFC 8792

GET /demo?name1=Value1&Name2=value2 HTTP/1.1 Host: example.org Referer: https://developer.example.org/demo Accept: application/json, / Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519" Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:

Die folgende Nachricht permutiert die Reihenfolge der Felder, nicht aber die Reihenfolge der beiden Accept-Instanzen untereinander. Die Signatur bleibt gültig:

HINWEIS: Zeilenumbruch gemäß RFC 8792

GET /demo?name1=Value1&Name2=value2 HTTP/1.1 Accept: application/json Accept: / Date: Fri, 15 Jul 2022 14:24:55 GMT Host: example.org Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519" Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:

Die folgende Nachricht ändert die Methode zu POST und die Authority zu example.com (Host). Da Methode und Authority abgedeckt sind, ist dieselbe Signatur nicht mehr gültig:

HINWEIS: Zeilenumbruch gemäß RFC 8792

POST /demo?name1=Value1&Name2=value2 HTTP/1.1 Host: example.com Date: Fri, 15 Jul 2022 14:24:55 GMT Accept: application/json Accept: / Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519" Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:

Die folgende Nachricht vertauscht die Reihenfolge der beiden Accept-Felder. Da die Reihenfolge gleichnamiger Felder in HTTP semantisch ist, ändert sich der Wert in der Signaturbasis — dieselbe Signatur ist nicht mehr gültig:

HINWEIS: Zeilenumbruch gemäß RFC 8792

GET /demo?name1=Value1&Name2=value2 HTTP/1.1 Host: example.org Date: Fri, 15 Jul 2022 14:24:55 GMT Accept: / Accept: application/json Signature-Input: transform=("@method" "@path" "@authority"
"accept");created=1618884473;keyid="test-key-ed25519" Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5J
Z1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==: