2

我想限制对注册客户端的Web服务访问。我想到的第一件事就是模仿AWS,简而言之,它向客户端颁发一个非秘密和秘密密钥对,并要求客户端通过使用某些HTTP请求的加密函数来证明秘密密钥的知识数据和密钥,然后在请求头中指定加密函数的输出。 AWS也是这样做的,并检查预期签名是否与客户指定的内容相符。秘密没有被传送,等等。这是非常典型的,尽管有用,但并不那么有趣。您是否知道执行类似于Amazon Web Service请求签名验证的NGiNX模块?

http://mws.amazon.com/docs/devGuide/Signatures.html

http://chrisroos.co.uk/blog/2009-01-31-implementing-version-2-of-the-amazon-aws-http-request-signature-in-ruby

我的首选Web服务器,Web服务是nginx的。我想开始在某些服务中要求类似的请求签名。在向上游进程(我的Web服务实例)发送请求之前,创建一个处理请求签名验证的nginx模块对我来说是有意义的。

你知道这样的nginx模块吗?你知道一个不同的我可以基于我的工作吗?

有一个体面的nginx模块写作指导在这里:“我怎样写一个nginx的模块”

http://www.evanmiller.org/nginx-modules-guide.html

请注意,我不我只是试图避免重蹈覆辙。

谢谢!

回答

0

如果我的理解正确,您可以简单地检查自定义标头if($http_{yourheader}){}并验证后端(如memcached)或代理到fastcgi脚本,甚至使用嵌入式perl脚本(尽管这将是缓慢并可能阻止)。 AFAIK没有任何具体的standardthird-party模块,但它们的组合可以提供合适的解决方案(例如,$http_{header} + redis后端,例如)。

是否有一个特别的原因,您不打算使用自定义SSL证书?他们似乎是限制访问与增加安全性的适当解决方案。

+0

请求签名计算的一部分是时间相关信息,以便阻止流量重放攻击。因此,简单地检查后端缓存式数据存储将无法工作,除非我每隔一秒为所有客户端生成密钥。 这里不需要客户端证书。我很好用API密钥来识别客户端。请求签名对于避免流量重播攻击非常重要,并且作为避免脚本kiddy滥用某些客户端的非秘密API密钥的额外步骤。 – z8000 2010-02-23 20:54:45