2

假设我有一个源服务器,它通过带有特定查询字符串参数的重定向行为需要向目标服务器提供详细信息。但是,我需要确保这些详细信息仅来自我的原始服务器。

我也不能确定目标服务器的完整性。或者具体来说,目标服务器可能会受到威胁,因此任何加密密钥都可能已被恶意方读取。

我想我可以使用某种形式的公钥/私钥对对查询字符串进行签名。源服务器使用私钥对字符串进行签名,目标服务器使用公钥验证它来自我的源服务器,并且消息没有被篡改。

我远离密码学专家或任何东西,所以我在这里所做的任何假设都可能是错误的,如果是,请纠正我:)

我基本上是在用一种(希望)简单的方法在 Ruby 中做到这一点。

4

1 回答 1

1

可能,对查询数据(在您的情况下为重定向 URL)进行签名的最简单形式是使用HMAC。在这种情况下,您的源服务器和目标服务器需要共享一个公用密钥 - HMAC 不是一种公钥/私钥加密形式,而是一种密钥散列形式。

您要查找的模块是ruby​​-hmac,您的源服务器和目标服务器必须执行以下操作:

require 'hmac-md5'
HMAC::MD5.new("<your shared key>").update("<your URL to check>").hexdigest

并在目的端比较源端 HMAC 计算的摘要是等价的:因此双方都进行相同的计算。HMAC 的十六进制摘要可以简单地通过附加查询参数从源传输到目标。

于 2012-04-09T10:27:05.520 回答