【问题标题】:Secure requests between different apps不同应用程序之间的安全请求
【发布时间】:2015-02-20 13:56:22
【问题描述】:

假设 appengine 上有两个不同的应用程序——一个由 Go 驱动,另一个由 PHP 驱动

他们每个人都需要能够纯粹通过后端网络向彼此发出特定请求(即,这些是唯一需要发出这些特定请求的服务 - 其他远程请求应该被阻止) .

执行此操作的最佳实践方式是什么?在我的脑海中,这里有 3 种可能的解决方案以及为什么我有点担心它们

1) 不要将它们作为单独的应用程序,而是模块

这样做的问题是,使用模块会带来一些其他的烦恼——例如频道存在报告的困难。此外,从概念上讲,这两个请求实际上是它们唯一接触的地方,如果将它们分开,就可以更清楚地看到数据库使用等方面的情况。但存在问题更像是一个阻碍

2) 使用硬编码的长密钥附加请求,并且仅在通过 SSL 时允许响应

依赖这个似乎有点奇怪,因为密钥永远不会改变......理论上唯一可以知道的方法是帐户管理员或有来源的人是否透露了它......但我不知道不知道,就是觉得很奇怪

3) 仅允许通过某些 IP 范围(可能与 #2 结合使用)

这似乎有点不确定,IP 范围可以确定吗?

4) 发布/订阅

所以看起来 AppEngine 允许发布/订阅机制——但这并不真正适合我的用例,因为我想立即获得响应——而不是通过订阅者处理后的回发

全部 -- 顺便说一句,假设它是某种 https 请求,是否使用每种语言的 Socket API 来完成?

【问题讨论】:

    标签: php google-app-engine go


    【解决方案1】:

    一般来说,HTTPS 当然是一个绝妙的主意(不仅仅用于两个 GAE 应用程序之间的通信)。

    但是,对于特定的用例,我建议依靠 X-Appengine-Inbound-Appid 请求标头:App Engine 的基础架构确保不能对来自 GAE 应用的请求进行设置,并且,对于do 来自 GAE 应用程序的请求(通过不遵循重定向的 url-fetch),标头设置为 app-id。

    Go 的文档位于 https://cloud.google.com/appengine/docs/go/urlfetch/,PHP 的文档位于 https://cloud.google.com/appengine/docs/php/urlfetch/(顺便说一下,Java 和 Python 也是如此)。

    【讨论】:

      【解决方案2】:
      • 完全通过后端网络
      • 仅允许通过某些 IP 范围

      应用引擎基础架构很难甚至不可能满足这些要求,因为您无法控制物理网络路由。来自应用引擎FAQ

      App Engine 目前不提供将静态 IP 地址映射到应用程序的方法。为了优化最终用户和 App Engine 应用程序之间的网络路径,不同 ISP 或地理位置的最终用户可能会使用不同的 IP 地址来访问同一个 App Engine 应用程序。

      因此,始终假设您的通信是通过开放网络进行的,并且永远不要假设任何关于 IP 的事情。

      用一些硬编码的长密钥附加请求

      硬编码的长密码不提供任何额外的安全性,只有obscurity

      只有通过 SSL 才允许响应

      这是一个更好的主意;使用强大的算法加密所有您的内部流量。例如,ECDHE-RSA 或 ECDHE-ECDSA(如果可用)。

      【讨论】:

      • 谢谢-需要消化一下...这会比在两端存储硬编码的密钥并使用 AES 加密通信更好吗?
      • 是的。确实。从技术上讲,这与 DHE (Diffie-Hellman) 等公钥加密算法的一部分相当。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 2012-11-18
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多