数字签名HTTP(S)请求

Audience Manager要求对HTTP(S)服务器到服务器请求进行数字签名以确保有效性。 此文档描述如何使用私钥对HTTP(S)请求进行签名。

概述

使用您提供并与Audience Manager共享的私钥,我们可以对在IRIS和您的HTTP(S)服务器之间发送的HTTP(S)请求进行数字签名。 这确保:

  • 真实性:只有具有私钥()的发送IRIS者才能向合作 HTTP(S) 伙伴发送有效消息。
  • 消息完整性:这种方法,即使是 HTTP在中间攻击中,信息也会被扭曲。

IRIS 内置了在零停机时间内旋转密钥的支持,如下 面的旋转专用 密钥部分所示。

需要提供的信息

对于HTTP(S)实时服务器到服务器目标,请与Audience Manager顾问联系并指定:

  • 用于签署请求的密钥。
  • 将包含生成的签名的HTTP(S)标头的名称(下面示例标题中的X-Signature)。
  • 可选:用于签名的哈希类型(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

工作原理

  1. IRIS 创建 HTTP(S) 要发送给合作伙伴的消息。
  2. IRIS 创建基于该消息 HTTP(S) 和由合作伙伴传递的私钥的签名。
  3. IRIS 将请求 HTTP(S) 发送给合作伙伴。此消息包含签名和实际消息,如上例所示。
  4. 合作伙伴服务器接收HTTP(S)请求。 它读取消息正文和从IRIS收到的签名。
  5. 合作伙伴服务器根据收到的消息正文和私钥重新计算签名。 有关如何实现此操作,请参见下面的如何计算签名部分。
  6. 将在合作伙伴服务器(接收方)上创建的签名与从IRIS(发送方)接收的签名进行比较。
  7. 如果签名匹配,则验证​真实性​和​消息完整性。 只有拥有私钥的发送者才能发送有效签名(真实性)。 此外,中间人无法修改消息并生成新的有效签名,因为他们没有私钥(消息完整性)。

如何计算签名

HMAC (基于哈希的消息身份验证代码)是消息签名 IRIS 所使用的方法。实现和库基本上在每种编程语言中都可用。 HMAC 没有已知的扩展攻击。请参见下面的Java示例:

// 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=

HMAC哈希实现的RFC是https://www.ietf.org/rfc/rfc2104.txt。 测试站点:https://asecuritysite.com/encryption/hmac(请注意,您必须将十六进制编码转换为base64。)

旋转私钥

要轮替私钥,合作伙伴必须向其Adobe Audience Manager顾问传达新的私钥。 旧密钥从Audience Manager中删除,而IRIS只发送新签名头。 钥匙已旋转。

用于签名的数据

对于GET类型目标,用于签名的消息将是​REQUEST_PATH +查询字符串(例如,/from-aam-s2s?sids=1,2,3)。 IRIS未考虑主机名或HTTP(S)标头——这些标头可能会沿路径被修改/配置错误或报告错误。

对于POST类型目标,用于签名的消息是​REQUEST BODY。 同样,标题或其他请求参数也会被忽略。

在此页面上