5

我为客户提供网络服务。我想提供一个功能,在某些事件中,我会通过向客户提供的 URL 发送请求来通知客户。

例如,订单发货通知可能通过 GET 请求发送https://customer.example.com/order/12345?status=shipped

客户如何相信此请求是真实的?

当客户收到此请求时,他们需要验证该请求是否真的来自服务,它没有被篡改,并且是私有的。

想到只通过 SSL 发送给客户,但需要客户运行带有签名证书的启用 SSL 的 Web 服务器。另外,要对服务(此请求中的客户端)进行身份验证,需要客户端证书。但是,SSL 应该处理加密、中间人、消息签名和重放攻击。

Service 的 IP 地址可以更改,因此对身份验证没有用处。

PayPal 的 IPN 系统使用了另一种方法。PayPal 向客户(本示例中为商家)发送通知,然后客户通过 SSL 将有效负载发送回 PayPal 以进行确认。本质上是问:“嘿,贝宝。你把这个寄给我了吗?”

你能想到其他方法吗?

4

1 回答 1

2

即使您使用私钥/公钥对签署消息,您也需要实施一些措施来防止重放攻击。

也许更好的方法是通知他们他们有新东西,然后让他们访问您的服务器以获取新东西。然后他们可以简单地轮询您的服务器并验证您的 SSL 证书。

在向他们发送任何数据之前,您需要对他们进行身份验证。

对于通知,您可以简单地向他们发布最新通知的签名日期和时间。这样,即使重播该通知,他们也会知道,因为时间和日期不会比上一个更新。

于 2012-08-29T14:58:15.897 回答