HTTP(S) richieste con firma digitale digitally-signed-http-requests

L'Audience Manager richiede che le richieste server-to-server HTTP(S) siano firmate digitalmente per la validità. In questo documento viene descritto come firmare HTTP(S) richieste con chiavi private.

Panoramica overview

Utilizzando una chiave privata fornita dall'utente e condivisa con Audience Manager, è possibile firmare digitalmente le richieste HTTP(S) inviate tra IRIS e il server HTTP(S). In questo modo:

  • Autenticità: solo il mittente che dispone della chiave privata (IRIS) può inviare messaggi HTTP(S) validi al partner.
  • Integrità del messaggio: con questo approccio, anche su HTTP, sei protetto da un uomo in mezzo all'attacco in cui i messaggi vengono distorti.

IRIS dispone del supporto integrato per la rotazione delle chiavi senza tempi di inattività, come illustrato nella sezione Rotazione della chiave privata di seguito.

Informazioni da fornire info-to-provide

Per una destinazione server-to-server in tempo reale HTTP(S), contatta il tuo consulente Audience Manager e specifica:

  • Chiave utilizzata per firmare la richiesta.
  • Nome dell'intestazione HTTP(S) che conterrà la firma generata (X-Signature nell'intestazione di esempio seguente).
  • Facoltativo: tipo di hash utilizzato per la firma (md5, sha1, sha256).
* Connected to partner.website.com (127.0.0.1) port 80 (#0)
> POST /webpage HTTP/1.1
> Host: partner.host.com
> Accept: */*
> Content-Type: application/json
> Content-Length: 20
> X-Signature: +wFdR/afZNoVqtGl8/e1KJ4ykPU=
POST message content

Come funziona how-it-works

  1. IRIS crea il messaggio HTTP(S) da inviare al partner.
  2. IRIS crea una firma basata sul messaggio HTTP(S) e sulla chiave privata comunicata dal partner.
  3. IRIS invia la richiesta HTTP(S) al partner. Questo messaggio contiene la firma e il messaggio effettivo, come illustrato nell’esempio precedente.
  4. Il server partner riceve la richiesta HTTP(S). Legge il corpo del messaggio e la firma ricevuta da IRIS.
  5. In base al corpo del messaggio ricevuto e alla chiave privata, il server partner ricalcola la firma. Per informazioni su come ottenere questo risultato, vedere la sezione Come calcolare la firma.
  6. Confrontare la firma creata sul server partner (ricevitore) con quella ricevuta da IRIS (mittente).
  7. Se le firme corrispondono, sono state convalidate l'autenticità e l'integrità del messaggio. Solo il mittente che dispone della chiave privata può inviare una firma valida (autenticità). Inoltre, un utente al centro non può modificare il messaggio e generare una nuova firma valida, in quanto non dispone della chiave privata (integrità del messaggio).

Come calcolare la firma calculate-signature

HMAC (codice di autenticazione dei messaggi basato su hash) è il metodo utilizzato da IRIS per la firma dei messaggi. Le implementazioni e le librerie sono disponibili praticamente in ogni linguaggio di programmazione. HMAC non ha attacchi di estensione noti. Vedi un esempio in Java di seguito:

// Message to be signed.
// For GET type HTTP(S) destinations, the message used for signing will be the REQUEST_PATH + QUERY_STRING
// For POST type HTTP(S) destinations, the message used for signing will be the REQUEST_BODY.
// String getData = "/from-aam-s2s?sids=1,2,3";
String postData = "POST message content";
// Algorithm used. Currently supported: HmacSHA1, HmacSHA256, HmacMD5.
String algorithm = "HmacSHA1";
// Private key shared between the partner and Adobe Audience Manager.
String key = "sample_partner_private_key";

// Perform signing.
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), algorithm);
Mac mac = Mac.getInstance(algorithm);
mac.init(signingKey);
byte[] result = mac.doFinal(postData.getBytes());

String signature = Base64.encodeBase64String(result).trim();
// signature = +wFdR/afZNoVqtGl8/e1KJ4ykPU=

La RFC per l'implementazione hash HMAC è https://www.ietf.org/rfc/rfc2104.txt. Un sito di test: https://asecuritysite.com/encryption/hmac (si noti che è necessario convertire la codifica esadecimale in base64).

Rotazione della chiave privata rotate-private-key

Per ruotare la chiave privata, i partner devono comunicare la nuova chiave privata al proprio consulente Adobe Audience Manager. La chiave precedente è stata rimossa da Audience Manager e IRIS invia solo la nuova intestazione della firma. Le chiavi sono state ruotate.

Dati utilizzati per la firma data-signing

Per le destinazioni di tipo GET, il messaggio utilizzato per la firma sarà REQUEST_PATH + QUERY STRING (ad esempio /from-aam-s2s?sids=1,2,3). IRIS non prende in considerazione il nome host o le intestazioni HTTP(S), che possono essere modificate/configurate in modo errato lungo il percorso o segnalate in modo errato.

Per le destinazioni di tipo POST, il messaggio utilizzato per la firma è il CORPO DELLA RICHIESTA. Anche in questo caso, le intestazioni o altri parametri di richiesta vengono ignorati.

recommendation-more-help
de293fbf-b489-49b0-8daa-51ed303af695