HTTP(S)
assinadas digitalmenteAudience Manager requer que as solicitações de HTTP(S)
servidor para servidor sejam assinadas digitalmente para validade. Este documento descreve como você pode assinar HTTP(S)
solicitações com chaves privadas.
Usando uma chave privada fornecida por você e compartilhada com Audience Manager, podemos assinar digitalmente as solicitações HTTP(S)
enviadas entre IRIS e seu servidor HTTP(S). Isso garante:
HTTP(S)
mensagens válidas para o parceiro.HTTP
você está protegido de um homem no ataque do meio, onde as mensagens ficam distorcidas.IRIS tem suporte integrado para girar as teclas com tempo de inatividade zero, conforme mostrado na seção Girando a tecla privada abaixo.
Para um HTTP(S)
destino de servidor para servidor em tempo real, entre em contato com seu Audience Manager consultor e especifique:
HTTP(S)
que manterá a assinatura gerada (assinatura X no cabeçalho de exemplo abaixo).* 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)
mensagem a ser enviada ao parceiro.HTTP(S)
mensagem e na chave privada comunicada pelo parceiro.HTTP(S)
solicitação ao parceiro. Esta mensagem contém a assinatura e a mensagem real, como visto no exemplo acima.HTTP(S)
. Ele lê o corpo da mensagem e a assinatura recebida de IRIS.HMAC (Código de autenticação de mensagem baseado em hash) é o método usado IRIS para assinatura de mensagem. Implementações e bibliotecas estão disponíveis basicamente em todas as linguagens de programação. HMAC não tem ataques de extensão conhecidos. Veja um exemplo em Java abaixo:
// 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=
A RFC para a implementação de hash HMAC é https://www.ietf.org/rfc/rfc2104.txt. Um local de teste: https://asecuritysite.com/encryption/hmac (observe que é necessário converter a codificação hexadecimal para base64).
Para girar a chave privada, os parceiros devem comunicar a nova chave privada ao consultor Adobe Audience Manager. A chave antiga é removida de Audience Manager e IRIS envia somente o novo cabeçalho de assinatura. As teclas foram giradas.
Para destinos do tipo GET
, a mensagem usada para assinatura será REQUEST_PATH + STRING de QUERY (por exemplo, /from-aam-s2s?sids=1,2,3). O IRIS não leva em conta o nome do host ou os cabeçalhos HTTP(S)
- eles podem ser modificados / configurados incorretamente ao longo do caminho ou reportados incorretamente.
Para destinos do tipo POST
, a mensagem usada para assinatura é REQUEST BODY. Novamente, os cabeçalhos ou outros parâmetros de solicitação são ignorados.