您知道执行类似于验证 Amazon Web Service 请求签名的 NGiNX 模块吗?
Posted
技术标签:
【中文标题】您知道执行类似于验证 Amazon Web Service 请求签名的 NGiNX 模块吗?【英文标题】:Do you know of a NGiNX module that performs something similar to verification of Amazon Web Service request signatures? 【发布时间】:2011-01-19 01:07:43 【问题描述】:我想限制注册客户访问我的网络服务。我想到的第一件事是模仿 AWS,简而言之,它向客户端颁发非秘密和秘密密钥对,并要求客户端通过使用某些 HTTP 请求的加密函数来证明秘密密钥的知识数据和密钥,然后在请求标头中指定加密函数的输出。 AWS 执行相同的操作并检查预期签名是否与客户端指定的匹配。秘密不传,废话。这是非常典型的,虽然有用,但并不那么有趣。
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
我首选的网络服务网络服务器是 nginx。我想开始在某些服务中要求类似的请求签名。在将请求发送到上游进程(我的 Web 服务实例)之前,创建一个处理请求签名验证的 nginx 模块对我来说很有意义。
你知道这样的nginx模块吗?你知道我的工作可以基于另一个不同的吗?
这里有一个不错的 nginx 模块编写指南:
http://www.evanmiller.org/nginx-modules-guide.html
请注意,我不是在问“我如何编写一个 nginx 模块?”我只是想避免重新发明***。
谢谢!
【问题讨论】:
【参考方案1】:如果我理解正确,您可以简单地使用 if($http_yourheader)
检查自定义标头,并针对 memcached 等后端或 fastcgi 脚本的代理进行验证,甚至使用嵌入式 perl 脚本(尽管这将速度慢,可能会阻塞)。
AFAIK 没有任何特定的 standard 或 third-party 模块可以执行此操作,但它们的组合可以提供合适的解决方案(例如,$http_header
+ redis 后端)。
您不希望使用自定义 SSL 证书是否有特殊原因?它们似乎是限制访问并增加安全性的适当解决方案。
【讨论】:
请求签名计算的一部分是时间相关信息,因此可以阻止流量重放攻击。因此,除非我每秒或类似地为所有客户端生成密钥,否则简单地检查类似后端缓存的数据存储是行不通的。此处不需要客户端证书。我可以使用用于识别客户端的 API 密钥。请求签名对于避免流量重放攻击和避免某些脚本小子滥用某些客户端的非秘密 API 密钥非常重要。以上是关于您知道执行类似于验证 Amazon Web Service 请求签名的 NGiNX 模块吗?的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Red Shift:如何在 SQL Server 中编写类似于存储过程的查询批处理