HTTP(S)
signées numériquementL’Audience Manager nécessite que les demandes HTTP(S)
serveur à serveur soient numériquement signées pour la validité. Ce document décrit comment signer des demandes HTTP(S)
avec des clés privées.
À l’aide d’une clé privée que vous avez fournie et partagée avec Audience Manager, nous pouvons signer numériquement les demandes HTTP(S)
envoyées entre IRIS et votre serveur HTTP(S). Cela garantit que :
HTTP(S)
des messages valides au partenaire.HTTP
, vous êtes protégé d'un homme dans l'attaque du milieu où les messages sont déformés.IRIS dispose d’une prise en charge intégrée pour faire pivoter les clés sans temps d’arrêt, comme indiqué dans la section Rotation des clés privées ci-dessous.
Pour une HTTP(S)
destination serveur à serveur en temps réel, contactez votre Audience Manager consultant et indiquez :
HTTP(S)
qui contiendra la signature générée (X-Signature dans l’exemple d’en-tête ci-dessous).* 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
HTTP(S)
message à envoyer au partenaire.HTTP(S)
message et la clé privée communiquée par le partenaire.HTTP(S)
demande au partenaire. Ce message contient la signature et le message réel, comme illustré dans l’exemple ci-dessus.HTTP(S)
. Il lit le corps du message et la signature reçue de IRIS.HMAC (Code d’authentification de message basé sur un hachage) est la méthode utilisée par IRIS pour la signature des messages. Les implémentations et les bibliothèques sont disponibles dans tous les langages de programmation. HMAC ne contient aucune attaque d’extension connue. Voir un exemple dans Java ci-dessous :
// 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 pour la mise en oeuvre du hachage HMAC est https://www.ietf.org/rfc/rfc2104.txt. Un site de test : https://asecuritysite.com/encryption/hmac (notez que vous devez convertir l’encodage hexadécimal en base64).
Pour faire pivoter la clé privée, les partenaires doivent communiquer la nouvelle clé privée à leur Adobe Audience Manager consultant. L’ancienne clé est supprimée de Audience Manager et IRIS envoie uniquement le nouvel en-tête de signature. Les clés ont été pivotées.
Pour les destinations de type GET
, le message utilisé pour la signature sera le REQUEST_PATH + QUERY STRING (par exemple, /from-aam-s2?sids=1,2,3). IRIS ne prend pas en compte les en-têtes de nom d’hôte ou HTTP(S)
: ils peuvent être modifiés/mal configurés le long du chemin ou signalés de manière incorrecte.
Pour les destinations de type POST
, le message utilisé pour la signature est le REQUEST BODY. Là encore, les en-têtes ou d’autres paramètres de requête sont ignorés.