对HTTP(S)
请求进行数字签名 digitally-signed-http-requests
Audience Manager要求对HTTP(S)
服务器到服务器请求进行数字签名以使其有效。 本文档介绍如何使用私钥对HTTP(S)
请求进行签名。
概述 overview
使用您提供的并与Audience Manager共享的私钥,我们可以对IRIS和您的HTTP(S)服务器之间发送的HTTP(S)
请求进行数字签名。 这样可以确保:
- 真实性:只有拥有私钥(IRIS)的发件人才能向合作伙伴发送有效的
HTTP(S)
邮件。 - 消息完整性:使用此方法,即使在
HTTP
上,您也会受到保护,不会受到中间人攻击造成消息失真的攻击。
IRIS已内置支持在零停机时间的情况下旋转密钥,如下面的旋转私钥部分所示。
您需要提供的信息 info-to-provide
对于HTTP(S)
实时服务器到服务器目标,请联系您的Audience Manager顾问并指定:
- 用于签署请求的密钥。
- 将保存生成的签名(下面示例标头中的X-Signature)的
HTTP(S)
标头的名称。 - 可选:用于签名的哈希类型(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
工作原理 how-it-works
- IRIS创建要发送给合作伙伴的
HTTP(S)
消息。 - IRIS根据
HTTP(S)
消息和合作伙伴传达的私钥创建签名。 - IRIS将
HTTP(S)
请求发送给合作伙伴。 此消息包含签名和实际消息,如上面的示例所示。 - 伙伴服务器接收
HTTP(S)
请求。 它读取从IRIS收到的邮件正文和签名。 - 合作伙伴服务器根据收到的消息正文和私钥重新计算签名。 请参阅下面的如何计算签名部分,了解如何实现此目标。
- 比较在合作伙伴服务器(接收方)上创建的签名与从IRIS(发送方)接收的签名。
- 如果签名匹配,则验证 真实性 和 消息完整性。 只有拥有私钥的发件人才能发送有效的签名(真实性)。 此外,中间人无法修改消息并生成新的有效签名,因为他们没有私钥(消息完整性)。
如何计算签名 calculate-signature
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)。
旋转私钥 rotate-private-key
要轮换私钥,合作伙伴必须将新的私钥传达给其Adobe Audience Manager顾问。 旧密钥已从Audience Manager中删除,IRIS仅发送新签名标头。 这些钥匙已旋转。
用于签名的数据 data-signing
对于GET
类型目标,用于签名的消息将为 REQUEST_PATH +查询字符串 (例如 /from-aam-s2s?sids=1,2,3)。 IRIS不考虑主机名或HTTP(S)
标头 — 这些标头可能沿路径修改/配置错误或报告不正确。
对于POST
类型目标,用于签名的消息是 请求正文。 同样,标头或其他请求参数将被忽略。