B.4. Trasformazioni dei messaggi HTTP (HTTP Message Transformations)
B.4. Trasformazioni dei messaggi HTTP (HTTP Message Transformations)
HTTP consente a intermediari e applicazioni di trasformare un messaggio HTTP senza alterarne la semantica. Le firme dei messaggi HTTP sono progettate per essere robuste rispetto a molte di queste trasformazioni in circostanze diverse.
Ad esempio, il seguente messaggio di richiesta HTTP è stato firmato usando l'algoritmo Ed25519 e la chiave test-key-ed25519:
NOTA: a capo con '' secondo 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==:
La stringa della base della firma per questo messaggio è:
"@method": GET
"@path": /demo
"@authority": example.org
"accept": application/json, /
"@signature-params": ("@method" "@path" "@authority" "accept")
;created=1618884473;keyid="test-key-ed25519"
Il messaggio seguente è stato modificato aggiungendo il campo di intestazione Accept-Language e un parametro di query. Tuttavia, poiché né Accept-Language né la query sono coperti dalla firma, la stessa firma resta valida:
NOTA: a capo con '' secondo RFC 8792
GET /demo?name1=Value1&Name2=value2¶m=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==:
Il messaggio seguente è stato modificato rimuovendo il campo Date, aggiungendo un campo Referer e unendo i valori del campo Accept in una sola riga. I campi Date e Referer non sono coperti dalla firma, e l'unione del campo Accept è una trasformazione consentita già contemplata dall'algoritmo di canonicalizzazione dei valori dei campi HTTP. La stessa firma resta valida:
NOTA: a capo con '' secondo 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==:
Il messaggio seguente è stato modificato riordinando i valori dei campi del messaggio originale ma senza riordinare le singole occorrenze del campo Accept. La stessa firma resta valida:
NOTA: a capo con '' secondo 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==:
Il messaggio seguente è stato modificato cambiando il metodo in POST e l'autorità in "example.com" (nel campo Host). Poiché sia il metodo sia l'autorità sono coperti dalla firma, la stessa firma NON è più valida:
NOTA: a capo con '' secondo 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==:
Il messaggio seguente è stato modificato cambiando l'ordine delle due occorrenze del campo Accept. Poiché in HTTP l'ordine dei campi con lo stesso nome ha significato semantico, ciò modifica il valore usato nella base della firma e la stessa firma NON è più valida:
NOTA: a capo con '' secondo 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==: